NoMan: Refresh ManagedServices on user switch
Fix a bug where ManagedServices didn't unbind from obsolete and
bind to new services after switching the current user.
Bug: 17477093
Change-Id: Ica28978a01f84ba17bdd93e2feaf68547e837bcc
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index f647037..13fbf6c 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 @@
// 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 @@
}
}
+ 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 @@
registerService(component, userIds[i]);
}
}
+
+ mLastSeenProfileIds = mUserProfiles.getCurrentProfileIds();
}
/**
@@ -523,6 +538,8 @@
private void update(Uri uri) {
if (uri == null || mSecureSettingsUri.equals(uri)) {
+ if (DEBUG) Slog.d(TAG, "Setting changed: mSecureSettingsUri=" + mSecureSettingsUri +
+ " / uri=" + uri);
rebindServices();
}
}