Merge "UserManager: move preCreate code to new method"
This commit is contained in:
committed by
Android (Google) Code Review
commit
9e51dbbb90
@@ -3107,36 +3107,11 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
// First try to use a pre-created user (if available).
|
||||
// TODO(b/142482943): Move this to its own function later.
|
||||
if (!preCreate
|
||||
&& (parentId < 0 && isUserTypeEligibleForPreCreation(userTypeDetails))) {
|
||||
final UserData preCreatedUserData;
|
||||
synchronized (mUsersLock) {
|
||||
preCreatedUserData = getPreCreatedUserLU(userType);
|
||||
}
|
||||
if (preCreatedUserData != null) {
|
||||
final UserInfo preCreatedUser = preCreatedUserData.info;
|
||||
final int newFlags = preCreatedUser.flags | flags;
|
||||
if (!checkUserTypeConsistency(newFlags)) {
|
||||
Slog.wtf(LOG_TAG, "Cannot reuse pre-created user " + preCreatedUser.id
|
||||
+ " of type " + userType + " because flags are inconsistent. "
|
||||
+ "Flags (" + Integer.toHexString(flags) + "); preCreatedUserFlags ( "
|
||||
+ Integer.toHexString(preCreatedUser.flags) + ").");
|
||||
} else {
|
||||
Log.i(LOG_TAG, "Reusing pre-created user " + preCreatedUser.id + " of type "
|
||||
+ userType + " and bestowing on it flags "
|
||||
+ UserInfo.flagsToString(flags));
|
||||
preCreatedUser.name = name;
|
||||
preCreatedUser.flags = newFlags;
|
||||
preCreatedUser.preCreated = false;
|
||||
preCreatedUser.creationTime = getCreationTime();
|
||||
|
||||
dispatchUserAddedIntent(preCreatedUser);
|
||||
writeUserLP(preCreatedUserData);
|
||||
writeUserListLP();
|
||||
return preCreatedUser;
|
||||
}
|
||||
// Try to use a pre-created user (if available).
|
||||
if (!preCreate && parentId < 0 && isUserTypeEligibleForPreCreation(userTypeDetails)) {
|
||||
final UserInfo preCreatedUser = convertPreCreatedUserIfPossible(userType, flags, name);
|
||||
if (preCreatedUser != null) {
|
||||
return preCreatedUser;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3320,6 +3295,44 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and converts a previously pre-created user into a regular user, if possible.
|
||||
*
|
||||
* @return the converted user, or {@code null} if no pre-created user could be converted.
|
||||
*/
|
||||
private @Nullable UserInfo convertPreCreatedUserIfPossible(String userType,
|
||||
@UserInfoFlag int flags, String name) {
|
||||
final UserData preCreatedUserData;
|
||||
synchronized (mUsersLock) {
|
||||
preCreatedUserData = getPreCreatedUserLU(userType);
|
||||
}
|
||||
if (preCreatedUserData == null) {
|
||||
return null;
|
||||
}
|
||||
final UserInfo preCreatedUser = preCreatedUserData.info;
|
||||
final int newFlags = preCreatedUser.flags | flags;
|
||||
if (!checkUserTypeConsistency(newFlags)) {
|
||||
Slog.wtf(LOG_TAG, "Cannot reuse pre-created user " + preCreatedUser.id
|
||||
+ " of type " + userType + " because flags are inconsistent. "
|
||||
+ "Flags (" + Integer.toHexString(flags) + "); preCreatedUserFlags ( "
|
||||
+ Integer.toHexString(preCreatedUser.flags) + ").");
|
||||
return null;
|
||||
}
|
||||
Log.i(LOG_TAG, "Reusing pre-created user " + preCreatedUser.id + " of type "
|
||||
+ userType + " and bestowing on it flags " + UserInfo.flagsToString(flags));
|
||||
preCreatedUser.name = name;
|
||||
preCreatedUser.flags = newFlags;
|
||||
preCreatedUser.preCreated = false;
|
||||
preCreatedUser.creationTime = getCreationTime();
|
||||
|
||||
dispatchUserAddedIntent(preCreatedUser);
|
||||
synchronized (mPackagesLock) {
|
||||
writeUserLP(preCreatedUserData);
|
||||
writeUserListLP();
|
||||
}
|
||||
return preCreatedUser;
|
||||
}
|
||||
|
||||
/** Checks that the flags do not contain mutually exclusive types/properties. */
|
||||
static boolean checkUserTypeConsistency(@UserInfoFlag int flags) {
|
||||
// Mask to check that flags don't refer to multiple user types.
|
||||
|
||||
Reference in New Issue
Block a user