From 24d949138fe85e0efe55f181f270e6791b06f603 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 7 Jul 2016 12:33:48 -0600 Subject: Suppress PRE_BOOT notifications for some profiles. When a profile is unlocked as a side effect of it's parent user being unlocked, it's confusing to see two sets of identical notifications, so suppress the set belonging to the profile. Profile notifications are still shown when the profile has a separate authentication challenge. Bug: 29931646 Change-Id: Id8d621451996c9e2f159560894596292ceb00f8d --- services/core/java/com/android/server/am/PreBootBroadcaster.java | 6 ++++-- services/core/java/com/android/server/am/UserController.java | 7 ++++++- services/core/java/com/android/server/am/UserState.java | 1 + 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 -- cgit v1.2.3-59-g8ed1b