From 98571a09f57b441ccabad969a3e44b59a0d0a573 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Thu, 28 Feb 2019 16:26:06 +0000 Subject: [PATCH] Notify caller when unlockUser() bails out Returns false and notify caller's progress callback when unlockUser() fails to progress due to unmet preconditions. Bug: 122876105 Test: None Change-Id: Ifcf485c9a4992ae884d64aa8668696c61e1ff43e --- .../java/com/android/server/am/UserController.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 4746e12e2838f..3f48e28d57804 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -383,14 +383,14 @@ class UserController implements Handler.Callback { * Step from {@link UserState#STATE_RUNNING_LOCKED} to * {@link UserState#STATE_RUNNING_UNLOCKING}. */ - private void finishUserUnlocking(final UserState uss) { + private boolean finishUserUnlocking(final UserState uss) { final int userId = uss.mHandle.getIdentifier(); // Only keep marching forward if user is actually unlocked - if (!StorageManager.isUserKeyUnlocked(userId)) return; + if (!StorageManager.isUserKeyUnlocked(userId)) return false; synchronized (mLock) { // Do not proceed if unexpected state or a stale user if (mStartedUsers.get(userId) != uss || uss.state != STATE_RUNNING_LOCKED) { - return; + return false; } } uss.mUnlockProgress.start(); @@ -421,6 +421,7 @@ class UserController implements Handler.Callback { mHandler.obtainMessage(SYSTEM_USER_UNLOCK_MSG, userId, 0, uss) .sendToTarget(); }); + return true; } /** @@ -1180,7 +1181,10 @@ class UserController implements Handler.Callback { return false; } - finishUserUnlocking(uss); + if (!finishUserUnlocking(uss)) { + notifyFinished(userId, listener); + return false; + } // We just unlocked a user, so let's now attempt to unlock any // managed profiles under that user.