summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Christoph Studer <chstuder@google.com> 2015-01-06 18:55:08 +0100
committer Christoph Studer <chstuder@google.com> 2015-01-06 18:55:08 +0100
commit4a9849b1d9ceee01bb47cbdfec25a88568bae80f (patch)
tree3c6a66e248a3b6f5e77654d4db3b4cac5be86e79
parent9ffb53cb1131eeac5c246e7378455bb4b64293f5 (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.java14
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