public void testNotify() { mNotificationManager.cancelAll(); final int id = 1; sendNotification(id, R.drawable.black); // test updating the same notification sendNotification(id, R.drawable.blue); sendNotification(id, R.drawable.yellow); // assume that sendNotification tested to make sure individual notifications were present StatusBarNotification[] sbns = mNotificationManager.getActiveNotifications(); for (StatusBarNotification sbn : sbns) { if (sbn.getId() != id) { fail("we got back other notifications besides the one we posted: " + sbn.getKey()); } } }
@Override public void onNotificationPosted(StatusBarNotification sbn) { RemoteViews views = sbn.getNotification().contentView; RemoteViewsInfo info = RemoteViewsReader.read(this, views); if (info == null) return; List<RemoteViewsAction> actions = info.getActions(); for (RemoteViewsAction action : actions) Log.v("NotificationWatcher", action.getActionName()); }
@Override public void onNotificationRemoved(StatusBarNotification sbn) { try { maybeUnbundle(sbn, true, sbn.getUserId()); } catch (Exception e) { Slog.e(TAG, "Error processing canceled notification", e); } }
@Override public void onNotificationPosted(StatusBarNotification sbn) { Log.i(TAG, sbn.getPackageName() + " Notification received:" + sbn.getNotification().tickerText); Notification postedNotification = sbn.getNotification(); String packageName = sbn.getPackageName(); if (postedNotification.tickerText == null || sbn.isOngoing() || !sbn.isClearable() || isInBlackList(packageName)) { return; } mNotificationHub.addNotification(sbn); mNotificationHub.setCurrentNotification(sbn); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); // Retrieve user specified peek timeout. int peekTimeoutMultiplier = Integer.parseInt(preferences.getString(PreferenceKeys.PREF_PEEK_TIMEOUT, "1")); // Does user select always listening? boolean alwaysListening = preferences.getBoolean(PreferenceKeys.PREF_ALWAYS_LISTENING, false); mNotificationPeek.showNotification(sbn, false, peekTimeoutMultiplier, alwaysListening); }
private boolean checkNotificationExistence(int id, boolean shouldExist) { // notification is a bit asynchronous so it may take a few ms to appear in // getActiveNotifications() // we will check for it for up to 200ms before giving up boolean found = false; for (int tries = 3; tries-- > 0; ) { final StatusBarNotification[] sbns = mNotificationManager.getActiveNotifications(); for (StatusBarNotification sbn : sbns) { if (sbn.getId() == id) { found = true; break; } } if (found == shouldExist) break; try { Thread.sleep(100); } catch (InterruptedException ex) { // pass } } return found == shouldExist; }
@SuppressLint("NewApi") @Override public void onNotificationPosted(StatusBarNotification sbn) { String pack = sbn.getPackageName(); // String ticker = sbn.getNotification().tickerText.toString(); Bundle extras = sbn.getNotification().extras; String title = extras.getString("android.title"); String text = extras.getCharSequence("android.text").toString(); Log.i("Package", pack); // Log.i("Ticker", ticker); Log.i("Title", title); Log.i("Text", text); Intent msgrcv = new Intent("Msg"); msgrcv.putExtra("package", pack); // msgrcv.putExtra("ticker", ticker); msgrcv.putExtra("title", title); msgrcv.putExtra("text", text); LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv); }
/** * Un-autobundles notifications that are now grouped by the app. Additionally cancels autobundling * if the status change of this notification resulted in the loose notification count being under * the limit. */ private void maybeUnbundle(StatusBarNotification sbn, boolean notificationGone, int user) { List<String> notificationsToUnAutobundle = new ArrayList<>(); boolean removeSummary = false; synchronized (mUnbundledNotifications) { Map<String, LinkedHashSet<String>> unbundledNotificationsByUser = mUnbundledNotifications.get(sbn.getUserId()); if (unbundledNotificationsByUser == null || unbundledNotificationsByUser.size() == 0) { return; } LinkedHashSet<String> notificationsForPackage = unbundledNotificationsByUser.get(sbn.getPackageName()); if (notificationsForPackage == null || notificationsForPackage.size() == 0) { return; } if (notificationsForPackage.remove(sbn.getKey())) { if (!notificationGone) { // Add the current notification to the unbundling list if it still exists. notificationsToUnAutobundle.add(sbn.getKey()); } // If the status change of this notification has brought the number of loose // notifications back below the limit, remove the summary and un-autobundle. if (notificationsForPackage.size() == AUTOBUNDLE_AT_COUNT - 1) { removeSummary = true; for (String key : notificationsForPackage) { notificationsToUnAutobundle.add(key); } } } } if (notificationsToUnAutobundle.size() > 0) { if (removeSummary) { adjustAutobundlingSummary(sbn.getPackageName(), null, false, user); } adjustNotificationBundling(sbn.getPackageName(), notificationsToUnAutobundle, false, user); } }
@Override public void onNotificationPosted(StatusBarNotification sbn) { if (DEBUG) Log.i(TAG, "POSTED " + sbn.getKey()); try { List<String> notificationsToBundle = new ArrayList<>(); if (!sbn.isAppGroup()) { // Not grouped by the app, add to the list of notifications for the app; // send bundling update if app exceeds the autobundling limit. synchronized (mUnbundledNotifications) { Map<String, LinkedHashSet<String>> unbundledNotificationsByUser = mUnbundledNotifications.get(sbn.getUserId()); if (unbundledNotificationsByUser == null) { unbundledNotificationsByUser = new HashMap<>(); } mUnbundledNotifications.put(sbn.getUserId(), unbundledNotificationsByUser); LinkedHashSet<String> notificationsForPackage = unbundledNotificationsByUser.get(sbn.getPackageName()); if (notificationsForPackage == null) { notificationsForPackage = new LinkedHashSet<>(); } notificationsForPackage.add(sbn.getKey()); unbundledNotificationsByUser.put(sbn.getPackageName(), notificationsForPackage); if (notificationsForPackage.size() >= AUTOBUNDLE_AT_COUNT) { for (String key : notificationsForPackage) { notificationsToBundle.add(key); } } } if (notificationsToBundle.size() > 0) { adjustAutobundlingSummary( sbn.getPackageName(), notificationsToBundle.get(0), true, sbn.getUserId()); adjustNotificationBundling( sbn.getPackageName(), notificationsToBundle, true, sbn.getUserId()); } } else { // Grouped, but not by us. Send updates to unautobundle, if we bundled it. maybeUnbundle(sbn, false, sbn.getUserId()); } } catch (Exception e) { Slog.e(TAG, "Failure processing new notification", e); } }
@Override public Adjustment onNotificationEnqueued( StatusBarNotification sbn, int importance, boolean user) { if (DEBUG) Log.i(TAG, "ENQUEUED " + sbn.getKey()); return null; }