From 083807d61cd87f0e7d531612c7d6a139901b1078 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 6 Apr 2016 14:07:09 -0600 Subject: [PATCH] Send onUnlockUser() before PRE_BOOT broadcasts. Before this change, a PRE_BOOT_COMPLETED receiver could try calling back into the system to ask for AccountManager details, only to be told the user wasn't unlocked yet. If the broadcast code was probing in a loop, it would force us to wait around for the 60-second ANR timeout. Since typical devices have ~7 PRE_BOOT receivers, this would delay BOOT_COMPLETED and other operations, like mounting the SD card, for up to 7 minutes. Bug: 28024024 Change-Id: Ibf8611e6fe94b0deb5ae5715c86f897ff6779088 --- .../core/java/com/android/server/am/UserController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index aef454ee6357f..6e890d5d34d85 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -260,6 +260,9 @@ final class UserController { mUserManager.onBeforeUnlockUser(userId); progress.setProgress(20); + // Dispatch unlocked to system services + mHandler.sendMessage(mHandler.obtainMessage(SYSTEM_USER_UNLOCK_MSG, userId, 0)); + // Send PRE_BOOT broadcasts if fingerprint changed final UserInfo info = getUserInfo(userId); if (!Objects.equals(info.lastLoggedInFingerprint, Build.FINGERPRINT)) { @@ -302,9 +305,6 @@ final class UserController { // Remember that we logged in mUserManager.onUserLoggedIn(userId); - // Dispatch unlocked to system services - mHandler.sendMessage(mHandler.obtainMessage(SYSTEM_USER_UNLOCK_MSG, userId, 0)); - // Dispatch unlocked to external apps final Intent unlockedIntent = new Intent(Intent.ACTION_USER_UNLOCKED); unlockedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);