summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java188
1 files changed, 94 insertions, 94 deletions
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 8283ac668d5e..fe19956ce8ce 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -2861,6 +2861,100 @@ public class UserManagerService extends IUserManager.Stub {
}
}
+ @GuardedBy("mUsersLock")
+ @VisibleForTesting
+ void upgradeUserTypesLU(@NonNull List<UserTypeFactory.UserTypeUpgrade> upgradeOps,
+ @NonNull ArrayMap<String, UserTypeDetails> userTypes,
+ final int formerUserTypeVersion,
+ @NonNull Set<Integer> userIdsToWrite) {
+ for (UserTypeFactory.UserTypeUpgrade userTypeUpgrade : upgradeOps) {
+ if (DBG) {
+ Slog.i(LOG_TAG, "Upgrade: " + userTypeUpgrade.getFromType() + " to: "
+ + userTypeUpgrade.getToType() + " maxVersion: "
+ + userTypeUpgrade.getUpToVersion());
+ }
+
+ // upgrade user type if version up to getUpToVersion()
+ if (formerUserTypeVersion <= userTypeUpgrade.getUpToVersion()) {
+ for (int i = 0; i < mUsers.size(); i++) {
+ UserData userData = mUsers.valueAt(i);
+ if (userTypeUpgrade.getFromType().equals(userData.info.userType)) {
+ final UserTypeDetails newUserType = userTypes.get(
+ userTypeUpgrade.getToType());
+
+ if (newUserType == null) {
+ throw new IllegalStateException(
+ "Upgrade destination user type not defined: "
+ + userTypeUpgrade.getToType());
+ }
+
+ upgradeProfileToTypeLU(userData.info, newUserType);
+ userIdsToWrite.add(userData.info.id);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Changes the user type of a profile to a new user type.
+ * @param userInfo The user to be updated.
+ * @param newUserType The new user type.
+ */
+ @GuardedBy("mUsersLock")
+ @VisibleForTesting
+ void upgradeProfileToTypeLU(@NonNull UserInfo userInfo, @NonNull UserTypeDetails newUserType) {
+ Slog.i(LOG_TAG, "Upgrading user " + userInfo.id
+ + " from " + userInfo.userType
+ + " to " + newUserType.getName());
+
+ if (!userInfo.isProfile()) {
+ throw new IllegalStateException(
+ "Can only upgrade profile types. " + userInfo.userType
+ + " is not a profile type.");
+ }
+
+ // Exceeded maximum profiles for parent user: log error, but allow upgrade
+ if (!canAddMoreProfilesToUser(newUserType.getName(), userInfo.profileGroupId, false)) {
+ Slog.w(LOG_TAG,
+ "Exceeded maximum profiles of type " + newUserType.getName() + " for user "
+ + userInfo.id + ". Maximum allowed= "
+ + newUserType.getMaxAllowedPerParent());
+ }
+
+ final UserTypeDetails oldUserType = mUserTypes.get(userInfo.userType);
+ final int oldFlags;
+ if (oldUserType != null) {
+ oldFlags = oldUserType.getDefaultUserInfoFlags();
+ } else {
+ // if oldUserType is missing from config_user_types.xml -> can only assume FLAG_PROFILE
+ oldFlags = UserInfo.FLAG_PROFILE;
+ }
+
+ //convert userData to newUserType
+ userInfo.userType = newUserType.getName();
+ // remove old default flags and add newUserType's default flags
+ userInfo.flags = newUserType.getDefaultUserInfoFlags() | (userInfo.flags ^ oldFlags);
+
+ // merge existing base restrictions with the new type's default restrictions
+ synchronized (mRestrictionsLock) {
+ if (!BundleUtils.isEmpty(newUserType.getDefaultRestrictions())) {
+ final Bundle newRestrictions = BundleUtils.clone(
+ mBaseUserRestrictions.getRestrictions(userInfo.id));
+ UserRestrictionsUtils.merge(newRestrictions,
+ newUserType.getDefaultRestrictions());
+ updateUserRestrictionsInternalLR(newRestrictions, userInfo.id);
+ if (DBG) {
+ Slog.i(LOG_TAG, "Updated user " + userInfo.id
+ + " restrictions to " + newRestrictions);
+ }
+ }
+ }
+
+ // re-compute badge index
+ userInfo.profileBadge = getFreeProfileBadgeLU(userInfo.profileGroupId, userInfo.userType);
+ }
+
@GuardedBy({"mPackagesLock", "mRestrictionsLock"})
private void fallbackToSingleUserLP() {
int flags = UserInfo.FLAG_SYSTEM | UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_ADMIN
@@ -5759,98 +5853,4 @@ public class UserManagerService extends IUserManager.Stub {
}
return mDevicePolicyManagerInternal;
}
-
- @GuardedBy("mUsersLock")
- @VisibleForTesting
- void upgradeUserTypesLU(@NonNull List<UserTypeFactory.UserTypeUpgrade> upgradeOps,
- @NonNull ArrayMap<String, UserTypeDetails> userTypes,
- final int formerUserTypeVersion,
- @NonNull Set<Integer> userIdsToWrite) {
- for (UserTypeFactory.UserTypeUpgrade userTypeUpgrade : upgradeOps) {
- if (DBG) {
- Slog.i(LOG_TAG, "Upgrade: " + userTypeUpgrade.getFromType() + " to: "
- + userTypeUpgrade.getToType() + " maxVersion: "
- + userTypeUpgrade.getUpToVersion());
- }
-
- // upgrade user type if version up to getUpToVersion()
- if (formerUserTypeVersion <= userTypeUpgrade.getUpToVersion()) {
- for (int i = 0; i < mUsers.size(); i++) {
- UserData userData = mUsers.valueAt(i);
- if (userTypeUpgrade.getFromType().equals(userData.info.userType)) {
- final UserTypeDetails newUserType = userTypes.get(
- userTypeUpgrade.getToType());
-
- if (newUserType == null) {
- throw new IllegalStateException(
- "Upgrade destination user type not defined: "
- + userTypeUpgrade.getToType());
- }
-
- upgradeProfileToTypeLU(userData.info, newUserType);
- userIdsToWrite.add(userData.info.id);
- }
- }
- }
- }
- }
-
- /**
- * Changes the user type of a profile to a new user type.
- * @param userInfo The user to be updated.
- * @param newUserType The new user type.
- */
- @GuardedBy("mUsersLock")
- @VisibleForTesting
- void upgradeProfileToTypeLU(@NonNull UserInfo userInfo, @NonNull UserTypeDetails newUserType) {
- Slog.i(LOG_TAG, "Upgrading user " + userInfo.id
- + " from " + userInfo.userType
- + " to " + newUserType.getName());
-
- if (!userInfo.isProfile()) {
- throw new IllegalStateException(
- "Can only upgrade profile types. " + userInfo.userType
- + " is not a profile type.");
- }
-
- // Exceeded maximum profiles for parent user: log error, but allow upgrade
- if (!canAddMoreProfilesToUser(newUserType.getName(), userInfo.profileGroupId, false)) {
- Slog.w(LOG_TAG,
- "Exceeded maximum profiles of type " + newUserType.getName() + " for user "
- + userInfo.id + ". Maximum allowed= "
- + newUserType.getMaxAllowedPerParent());
- }
-
- final UserTypeDetails oldUserType = mUserTypes.get(userInfo.userType);
- final int oldFlags;
- if (oldUserType != null) {
- oldFlags = oldUserType.getDefaultUserInfoFlags();
- } else {
- // if oldUserType is missing from config_user_types.xml -> can only assume FLAG_PROFILE
- oldFlags = UserInfo.FLAG_PROFILE;
- }
-
- //convert userData to newUserType
- userInfo.userType = newUserType.getName();
- // remove old default flags and add newUserType's default flags
- userInfo.flags = newUserType.getDefaultUserInfoFlags() | (userInfo.flags ^ oldFlags);
-
- // merge existing base restrictions with the new type's default restrictions
- synchronized (mRestrictionsLock) {
- if (!BundleUtils.isEmpty(newUserType.getDefaultRestrictions())) {
- final Bundle newRestrictions = BundleUtils.clone(
- mBaseUserRestrictions.getRestrictions(userInfo.id));
- UserRestrictionsUtils.merge(newRestrictions,
- newUserType.getDefaultRestrictions());
- updateUserRestrictionsInternalLR(newRestrictions, userInfo.id);
- if (DBG) {
- Slog.i(LOG_TAG, "Updated user " + userInfo.id
- + " restrictions to " + newRestrictions);
- }
- }
- }
-
- // re-compute badge index
- userInfo.profileBadge = getFreeProfileBadgeLU(userInfo.profileGroupId, userInfo.userType);
- }
}