diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index f647037e14d74..13fbf6c8312b1 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 mEnabledServicesPackageNames = new ArraySet(); + // 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 c09eff8fb7ebf..06310073e55ce 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); }