Merge "Clean up deleted users in DevicePolicyManagerService"

This commit is contained in:
Alexandra Gherghina
2014-06-06 16:14:52 +00:00
committed by Android (Google) Code Review

View File

@@ -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<Integer> usersWithProfileOwners;
Set<Integer> usersWithData;
synchronized(this) {
usersWithProfileOwners = mDeviceOwner != null
? mDeviceOwner.getProfileOwnerKeys() : new HashSet<Integer>();
usersWithData = new HashSet<Integer>();
for (int i = 0; i < mUserData.size(); i++) {
usersWithData.add(mUserData.keyAt(i));
}
}
List<UserInfo> allUsers = mUserManager.getUsers();
Set<Integer> deletedUsers = new HashSet<Integer>();
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();