diff options
| author | 2015-01-06 18:55:08 +0100 | |
|---|---|---|
| committer | 2015-01-06 18:55:08 +0100 | |
| commit | 4a9849b1d9ceee01bb47cbdfec25a88568bae80f (patch) | |
| tree | 3c6a66e248a3b6f5e77654d4db3b4cac5be86e79 | |
| parent | 9ffb53cb1131eeac5c246e7378455bb4b64293f5 (diff) | |
NoMan: Cancel previous instance of ignored notification
When a notification is ignored due to notification group optimization,
make sure any existing instance of the ignored notification is
canceled.
Bug: 18914108
Change-Id: Ifcc4833df019ea5cb7048eaab11ae76e7fa2a31c
| -rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 14 | 
1 files changed, 11 insertions, 3 deletions
| diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 825627f6a793..960775548b70 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1829,7 +1829,7 @@ public class NotificationManagerService extends SystemService {                      // can to avoid extracting signals.                      handleGroupedNotificationLocked(r, old, callingUid, callingPid);                      boolean ignoreNotification = -                            removeUnusedGroupedNotificationLocked(r, callingUid, callingPid); +                            removeUnusedGroupedNotificationLocked(r, old, callingUid, callingPid);                      // This conditional is a dirty hack to limit the logging done on                      //     behalf of the download manager without affecting other apps. @@ -1966,7 +1966,8 @@ public class NotificationManagerService extends SystemService {       *       * <p>Returns true if the given notification is a child of a group with a       * summary, which means that SysUI will never show it, and hence the new -     * notification can be safely ignored.</p> +     * notification can be safely ignored. Also cancels any previous instance +     * of the ignored notification.</p>       *       * <p>For summaries, cancels all children of that group, as SysUI will       * never show them anymore.</p> @@ -1974,7 +1975,7 @@ public class NotificationManagerService extends SystemService {       * @return true if the given notification can be ignored as an optimization       */      private boolean removeUnusedGroupedNotificationLocked(NotificationRecord r, -            int callingUid, int callingPid) { +            NotificationRecord old, int callingUid, int callingPid) {          // No optimizations are possible if listeners want groups.          if (mListeners.notificationGroupsDesired()) {              return false; @@ -1992,6 +1993,13 @@ public class NotificationManagerService extends SystemService {                  Slog.d(TAG, "Ignoring group child " + sbn.getKey() + " due to existing summary "                          + summary.getKey());              } +            // Make sure we don't leave an old version of the notification around. +            if (old != null) { +                if (DBG) { +                    Slog.d(TAG, "Canceling old version of ignored group child " + sbn.getKey()); +                } +                cancelNotificationLocked(old, false, REASON_GROUP_OPTIMIZATION); +            }              return true;          } else if (isSummary) {              // Summary -> cancel children |