diff options
| author | 2020-06-22 19:19:20 +0000 | |
|---|---|---|
| committer | 2020-06-22 19:19:20 +0000 | |
| commit | 340e55d091722a51d55fe2c2d71a8ffe4cd8b966 (patch) | |
| tree | 7f4bc334ad5c14b8c88daf13064435278cee2fa2 | |
| parent | 296855fe7651cbcf3cec7743da6fa5bed58f7db1 (diff) | |
| parent | 0a2b53f36acd3ac9da5cb9e5df4dc3eec9315666 (diff) | |
Merge "Add a guard on UserController to avoid user switches when not ready." into rvc-dev
| -rw-r--r-- | services/core/java/com/android/server/am/UserController.java | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index f2c4e4428af2..2d8d2c32a4c3 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -348,6 +348,17 @@ class UserController implements Handler.Callback { @GuardedBy("mUserIdToUserJourneyMap") private final SparseArray<UserJourneySession> mUserIdToUserJourneyMap = new SparseArray<>(); + /** + * Sets on {@link #setInitialConfig(boolean, int, boolean)}, which is called by + * {@code ActivityManager} when the system is started. + * + * <p>It's useful to ignore external operations (i.e., originated outside {@code system_server}, + * like from {@code adb shell am switch-user})) that could happen before such call is made and + * the system is ready. + */ + @GuardedBy("mLock") + private boolean mInitialized; + UserController(ActivityManagerService service) { this(new Injector(service)); } @@ -372,6 +383,7 @@ class UserController implements Handler.Callback { mUserSwitchUiEnabled = userSwitchUiEnabled; mMaxRunningUsers = maxRunningUsers; mDelayUserDataLocking = delayUserDataLocking; + mInitialized = true; } } @@ -1587,6 +1599,11 @@ class UserController implements Handler.Callback { } boolean userSwitchUiEnabled; synchronized (mLock) { + if (!mInitialized) { + Slog.e(TAG, "Cannot switch to User #" + targetUserId + + ": UserController not ready yet"); + return false; + } mTargetUserId = targetUserId; userSwitchUiEnabled = mUserSwitchUiEnabled; } @@ -2422,6 +2439,7 @@ class UserController implements Handler.Callback { pw.println(" mDelayUserDataLocking:" + mDelayUserDataLocking); pw.println(" mMaxRunningUsers:" + mMaxRunningUsers); pw.println(" mUserSwitchUiEnabled:" + mUserSwitchUiEnabled); + pw.println(" mInitialized:" + mInitialized); } } |