diff options
| author | 2024-11-05 16:44:18 +0000 | |
|---|---|---|
| committer | 2024-11-05 16:44:18 +0000 | |
| commit | 2c4f6de1764c37d2b26a2e695bd56094224d121d (patch) | |
| tree | b357907e6202e3a782ca7608b89f80b6805c2623 | |
| parent | 4207033fa5e0dc08296a7e24e8d6d4302ef4021a (diff) | |
| parent | 6cf3567b4fa18925154f43e99d50b50d12053ce0 (diff) | |
Merge "Refactor getBootUserUnchecked() to extract a couple of methods" into main
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 7ecfe7f64ffe..9ca206a9e1ca 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1395,33 +1395,46 @@ public class UserManagerService extends IUserManager.Stub { .getBoolean(com.android.internal.R.bool.config_bootToHeadlessSystemUser)) { return UserHandle.USER_SYSTEM; } - // Return the previous foreground user, if there is one. - final int previousUser = getPreviousFullUserToEnterForeground(); - if (previousUser != UserHandle.USER_NULL) { - Slogf.i(LOG_TAG, "Boot user is previous user %d", previousUser); - return previousUser; - } - // No previous user. Return the first switchable user if there is one. - synchronized (mUsersLock) { - final int userSize = mUsers.size(); - for (int i = 0; i < userSize; i++) { - final UserData userData = mUsers.valueAt(i); - if (userData.info.supportsSwitchToByUser()) { - int firstSwitchable = userData.info.id; - Slogf.i(LOG_TAG, - "Boot user is first switchable user %d", firstSwitchable); - return firstSwitchable; - } - } - } - // No switchable users found. Uh oh! - throw new UserManager.CheckedUserOperationException( - "No switchable users found", USER_OPERATION_ERROR_UNKNOWN); + return getPreviousOrFirstSwitchableUser(); } // Not HSUM, return system user. return UserHandle.USER_SYSTEM; } + private @UserIdInt int getPreviousOrFirstSwitchableUser() + throws UserManager.CheckedUserOperationException { + // Return the previous foreground user, if there is one. + final int previousUser = getPreviousFullUserToEnterForeground(); + if (previousUser != UserHandle.USER_NULL) { + Slogf.i(LOG_TAG, "Boot user is previous user %d", previousUser); + return previousUser; + } + // No previous user. Return the first switchable user if there is one. + final int firstSwitchableUser = getFirstSwitchableUser(); + if (firstSwitchableUser != UserHandle.USER_NULL) { + Slogf.i(LOG_TAG, + "Boot user is first switchable user %d", firstSwitchableUser); + return firstSwitchableUser; + } + // No switchable users found. Uh oh! + throw new UserManager.CheckedUserOperationException( + "No switchable users found", USER_OPERATION_ERROR_UNKNOWN); + } + + private @UserIdInt int getFirstSwitchableUser() { + synchronized (mUsersLock) { + final int userSize = mUsers.size(); + for (int i = 0; i < userSize; i++) { + final UserData userData = mUsers.valueAt(i); + if (userData.info.supportsSwitchToByUser()) { + int firstSwitchable = userData.info.id; + return firstSwitchable; + } + } + } + return UserHandle.USER_NULL; + } + @Override public int getPreviousFullUserToEnterForeground() { |