From 79f7892c1002d2e7159d34537fcd6a46a2db4fb8 Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Thu, 16 May 2013 09:10:05 -0400 Subject: [PATCH] Deactivate notification listeners disabled at runtime. PACKAGE_CHANGED is called when either the application or any of its components change. Rework old early exit code to handle component-level disabling wrt listeners. Note PACKAGE_CHANGED can take quite a while to reach NMS. Up to ten seconds (!) after component-disabling in app. Bug:8982243 Change-Id: Ia325516140dd9288466a663192a5326019f071ab --- .../com/android/server/NotificationManagerService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java index 903bc0bfc526d..4348a81178f30 100644 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -1133,6 +1133,7 @@ public class NotificationManagerService extends INotificationManager.Stub boolean queryRestart = false; boolean queryRemove = false; boolean packageChanged = false; + boolean cancelNotifications = true; if (action.equals(Intent.ACTION_PACKAGE_ADDED) || (queryRemove=action.equals(Intent.ACTION_PACKAGE_REMOVED)) @@ -1163,7 +1164,7 @@ public class NotificationManagerService extends INotificationManager.Stub .getApplicationEnabledSetting(pkgName); if (enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED || enabled == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { - return; + cancelNotifications = false; } } pkgList = new String[]{pkgName}; @@ -1172,8 +1173,10 @@ public class NotificationManagerService extends INotificationManager.Stub boolean anyListenersInvolved = false; if (pkgList != null && (pkgList.length > 0)) { for (String pkgName : pkgList) { - cancelAllNotificationsInt(pkgName, 0, 0, !queryRestart, - UserHandle.USER_ALL); + if (cancelNotifications) { + cancelAllNotificationsInt(pkgName, 0, 0, !queryRestart, + UserHandle.USER_ALL); + } if (mEnabledListenerPackageNames.contains(pkgName)) { anyListenersInvolved = true; }