diff --git a/services/core/java/com/android/server/am/UserState.java b/services/core/java/com/android/server/am/UserState.java index 71a551113f125..4741849c82674 100644 --- a/services/core/java/com/android/server/am/UserState.java +++ b/services/core/java/com/android/server/am/UserState.java @@ -35,18 +35,20 @@ import java.util.ArrayList; public final class UserState { private static final String TAG = TAG_WITH_CLASS_NAME ? "UserState" : TAG_AM; + // user doesn't exist. + public static final int STATE_NONE = -1; // User is first coming up. - public final static int STATE_BOOTING = 0; + public static final int STATE_BOOTING = 0; // User is in the locked state. - public final static int STATE_RUNNING_LOCKED = 1; + public static final int STATE_RUNNING_LOCKED = 1; // User is in the unlocking state. - public final static int STATE_RUNNING_UNLOCKING = 2; + public static final int STATE_RUNNING_UNLOCKING = 2; // User is in the running state. - public final static int STATE_RUNNING_UNLOCKED = 3; + public static final int STATE_RUNNING_UNLOCKED = 3; // User is in the initial process of being stopped. - public final static int STATE_STOPPING = 4; + public static final int STATE_STOPPING = 4; // User is in the final phase of stopping, sending Intent.ACTION_SHUTDOWN. - public final static int STATE_SHUTDOWN = 5; + public static final int STATE_SHUTDOWN = 5; public final UserHandle mHandle; public final ArrayList mStopCallbacks = new ArrayList<>(); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 964b367c010f9..13a4b31a40fde 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -6560,9 +6560,14 @@ public class UserManagerService extends IUserManager.Stub { @Override public boolean isUserRunning(@UserIdInt int userId) { + int state; synchronized (mUserStates) { - return mUserStates.get(userId, -1) >= 0; + state = mUserStates.get(userId, UserState.STATE_NONE); } + + return state != UserState.STATE_NONE + && state != UserState.STATE_STOPPING + && state != UserState.STATE_SHUTDOWN; } @Override diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceOrInternalTestCase.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceOrInternalTestCase.java index 991053a120ef9..5914a8c9fc322 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceOrInternalTestCase.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceOrInternalTestCase.java @@ -535,8 +535,7 @@ abstract class UserManagerServiceOrInternalTestCase extends ExtendedMockitoTestC } protected final void stopDefaultProfile() { - // TODO(b/244798930): should set it to STATE_STOPPING or STATE_SHUTDOWN instead - removeUserState(PROFILE_USER_ID); + setUserState(PROFILE_USER_ID, UserState.STATE_STOPPING); } // NOTE: should only called by tests that indirectly needs to check user assignments (like