diff options
| -rw-r--r-- | services/core/java/com/android/server/notification/ManagedServices.java | 17 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 3 |
2 files changed, 20 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index f647037e14d7..13fbf6c8312b 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -87,6 +87,10 @@ abstract public class ManagedServices { // Just the packages from mEnabledServicesForCurrentProfiles private ArraySet<String> mEnabledServicesPackageNames = new ArraySet<String>(); + // Kept to de-dupe user change events (experienced after boot, when we receive a settings and a + // user change). + private int[] mLastSeenProfileIds; + public ManagedServices(Context context, Handler handler, Object mutex, UserProfiles userProfiles) { mContext = context; @@ -159,6 +163,15 @@ abstract public class ManagedServices { } } + public void onUserSwitched() { + if (DEBUG) Slog.d(TAG, "onUserSwitched"); + if (Arrays.equals(mLastSeenProfileIds, mUserProfiles.getCurrentProfileIds())) { + if (DEBUG) Slog.d(TAG, "Current profile IDs didn't change, skipping rebindServices()."); + return; + } + rebindServices(); + } + public ManagedServiceInfo checkServiceTokenLocked(IInterface service) { checkNotNull(service); final IBinder token = service.asBinder(); @@ -321,6 +334,8 @@ abstract public class ManagedServices { registerService(component, userIds[i]); } } + + mLastSeenProfileIds = mUserProfiles.getCurrentProfileIds(); } /** @@ -523,6 +538,8 @@ abstract public class ManagedServices { private void update(Uri uri) { if (uri == null || mSecureSettingsUri.equals(uri)) { + if (DEBUG) Slog.d(TAG, "Setting changed: mSecureSettingsUri=" + mSecureSettingsUri + + " / uri=" + uri); rebindServices(); } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 148b9eff617c..14587e63ace6 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -718,6 +718,9 @@ public class NotificationManagerService extends SystemService { // reload per-user settings mSettingsObserver.update(null); mUserProfiles.updateCache(context); + // Refresh managed services + mConditionProviders.onUserSwitched(); + mListeners.onUserSwitched(); } else if (action.equals(Intent.ACTION_USER_ADDED)) { mUserProfiles.updateCache(context); } |