From 22745f4c9ad0e5abc58fe9ff93e9952a601cc6c9 Mon Sep 17 00:00:00 2001 From: Alexandra Gherghina Date: Wed, 4 Jun 2014 12:03:08 +0100 Subject: [PATCH] Clean up deleted users in DevicePolicyManagerService Bug: 15405715 Change-Id: Icd958fe9378deb92f25622b341e0502d865b742f --- .../DevicePolicyManagerService.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 043fab4faacaa..743fec50bb0d1 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -1227,6 +1227,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { loadSettingsLocked(getUserData(UserHandle.USER_OWNER), UserHandle.USER_OWNER); loadDeviceOwner(); } + cleanUpOldUsers(); mAppOpsService = IAppOpsService.Stub.asInterface( ServiceManager.getService(Context.APP_OPS_SERVICE)); if (mDeviceOwner != null) { @@ -1247,6 +1248,32 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } } + private void cleanUpOldUsers() { + // This is needed in case the broadcast {@link Intent.ACTION_USER_REMOVED} was not handled + // before reboot + Set usersWithProfileOwners; + Set usersWithData; + synchronized(this) { + usersWithProfileOwners = mDeviceOwner != null + ? mDeviceOwner.getProfileOwnerKeys() : new HashSet(); + usersWithData = new HashSet(); + for (int i = 0; i < mUserData.size(); i++) { + usersWithData.add(mUserData.keyAt(i)); + } + } + List allUsers = mUserManager.getUsers(); + + Set deletedUsers = new HashSet(); + deletedUsers.addAll(usersWithProfileOwners); + deletedUsers.addAll(usersWithData); + for (UserInfo userInfo : allUsers) { + deletedUsers.remove(userInfo.id); + } + for (Integer userId : deletedUsers) { + removeUserData(userId); + } + } + private void handlePasswordExpirationNotification(int userHandle) { synchronized (this) { final long now = System.currentTimeMillis();