diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 477e120695e6b..5a81a1af50ec3 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4299,6 +4299,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService mAppsFilter.onUserDeleted(snapshotComputer(), userId); } mInstantAppRegistry.onUserRemoved(userId); + mPackageMonitorCallbackHelper.onUserRemoved(userId); } /** diff --git a/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java b/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java index 55823cfe41104..20d150845d015 100644 --- a/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java +++ b/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java @@ -68,6 +68,21 @@ class PackageMonitorCallbackHelper { } } + public void onUserRemoved(int userId) { + RemoteCallbackList callbacks; + synchronized (mLock) { + callbacks = mCallbacks; + } + int registerCount = callbacks.getRegisteredCallbackCount(); + for (int i = 0; i < registerCount; i++) { + int registerUserId = (int) callbacks.getRegisteredCallbackCookie(i); + if (registerUserId == userId) { + IRemoteCallback callback = callbacks.getRegisteredCallbackItem(i); + unregisterPackageMonitorCallback(callback); + } + } + } + public void notifyPackageAddedForNewUsers(String packageName, @AppIdInt int appId, @NonNull int[] userIds, @NonNull int[] instantUserIds, int dataLoaderType) {