diff options
3 files changed, 11 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/PreBootBroadcaster.java b/services/core/java/com/android/server/am/PreBootBroadcaster.java index 3ed3d9a29c69..a7d09d0882bf 100644 --- a/services/core/java/com/android/server/am/PreBootBroadcaster.java +++ b/services/core/java/com/android/server/am/PreBootBroadcaster.java @@ -57,7 +57,7 @@ public abstract class PreBootBroadcaster extends IIntentReceiver.Stub { private int mIndex = 0; public PreBootBroadcaster(ActivityManagerService service, int userId, - ProgressReporter progress) { + ProgressReporter progress, boolean quiet) { mService = service; mUserId = userId; mProgress = progress; @@ -68,7 +68,9 @@ public abstract class PreBootBroadcaster extends IIntentReceiver.Stub { mTargets = mService.mContext.getPackageManager().queryBroadcastReceiversAsUser(mIntent, MATCH_SYSTEM_ONLY, UserHandle.of(userId)); - mHandler.obtainMessage(MSG_SHOW).sendToTarget(); + if (!quiet) { + mHandler.obtainMessage(MSG_SHOW).sendToTarget(); + } } public void sendNext() { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index d25f2cb76d74..4de09bd5318e 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -351,7 +351,11 @@ final class UserController { // PRE_BOOT receivers are finished to avoid ANR'ing apps final UserInfo info = getUserInfo(userId); if (!Objects.equals(info.lastLoggedInFingerprint, Build.FINGERPRINT)) { - new PreBootBroadcaster(mService, userId, null) { + // Suppress double notifications for managed profiles that + // were unlocked automatically (no challenge token required) + // as part of their parent user being unlocked. + final boolean quiet = info.isManagedProfile() && !uss.tokenProvided; + new PreBootBroadcaster(mService, userId, null, quiet) { @Override public void onFinished() { finishUserUnlockedCompleted(uss); @@ -972,6 +976,7 @@ final class UserController { return false; } else { uss.mUnlockProgress.addListener(listener); + uss.tokenProvided = (token != null); } finishUserUnlocking(uss); diff --git a/services/core/java/com/android/server/am/UserState.java b/services/core/java/com/android/server/am/UserState.java index 952283eb7290..ff8014cbb985 100644 --- a/services/core/java/com/android/server/am/UserState.java +++ b/services/core/java/com/android/server/am/UserState.java @@ -54,6 +54,7 @@ public final class UserState { public int state = STATE_BOOTING; public int lastState = STATE_BOOTING; public boolean switching; + public boolean tokenProvided; /** * The last time that a provider was reported to usage stats as being brought to important |