summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/notification/ManagedServices.java17
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java3
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);
}