diff options
| -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 |