summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/AppOpsService.java5
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java12
2 files changed, 14 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index be20616..bfa0402 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -1253,7 +1253,10 @@ public class AppOpsService extends IAppOpsService.Stub {
public void removeUser(int userHandle) throws RemoteException {
checkSystemUid("removeUser");
mOpRestrictions.remove(userHandle);
- mProfileOwnerUids.removeAt(mProfileOwnerUids.indexOfKey(userHandle));
+ final int index = mProfileOwnerUids.indexOfKey(userHandle);
+ if (index >= 0) {
+ mProfileOwnerUids.removeAt(index);
+ }
}
private void checkSystemUid(String function) {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 131d05b..fd180bf 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -511,8 +511,16 @@ public class UserManagerService extends IUserManager.Stub {
* Check if we've hit the limit of how many users can be created.
*/
private boolean isUserLimitReachedLocked() {
- int nUsers = mUsers.size();
- return nUsers >= UserManager.getMaxSupportedUsers();
+ int aliveUserCount = 0;
+ final int totalUserCount = mUsers.size();
+ // Skip over users being removed
+ for (int i = 0; i < totalUserCount; i++) {
+ UserInfo user = mUsers.valueAt(i);
+ if (!mRemovingUserIds.get(user.id)) {
+ aliveUserCount++;
+ }
+ }
+ return aliveUserCount >= UserManager.getMaxSupportedUsers();
}
/**