summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author bkchoi <bkchoi@google.com> 2023-01-12 15:52:45 -0800
committer bkchoi <bkchoi@google.com> 2023-01-19 09:31:09 -0800
commitba0f9f3ad2de99e8f96075db4571e6bf25d6c310 (patch)
tree6b857d2a2ac3fdf03a9dd0ae577deb53dcea25e0
parent49c7dad14e26efa5c24914b94aefe656a9a17875 (diff)
Send system user broadcasts in headless system user mode.
In headless system user mode, USER_STARTING, USER_STARTED, and USER_SWITCHED broadcasts were not sent for the system user. It had caused issues for other parts of the system which are expecting such broadcast messages. For example, VpnManagerService expects USER_STARTED event for system user but was not receiving it. This change will only affect headless system user mode. No behavior changes for phones. Bug: 263439429 Bug: 242195409 Test: atest com.android.cts.devicepolicy.MixedDeviceOwnerTest Change-Id: I4a101418c10a2c959c2bfae01b95863aebd521e8
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java14
1 files changed, 8 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 19b5cc93932b..5d4dc39341a1 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -8196,15 +8196,13 @@ public class ActivityManagerService extends IActivityManager.Stub
t.traceEnd();
}
+ boolean isBootingSystemUser = currentUserId == UserHandle.USER_SYSTEM;
+
// Some systems - like automotive - will explicitly unlock system user then switch
- // to a secondary user. Hence, we don't want to send duplicate broadcasts for
- // the system user here.
+ // to a secondary user.
// TODO(b/242195409): this workaround shouldn't be necessary once we move
// the headless-user start logic to UserManager-land.
- final boolean isBootingSystemUser = (currentUserId == UserHandle.USER_SYSTEM)
- && !UserManager.isHeadlessSystemUserMode();
-
- if (isBootingSystemUser) {
+ if (isBootingSystemUser && !UserManager.isHeadlessSystemUserMode()) {
t.traceBegin("startHomeOnAllDisplays");
mAtmInternal.startHomeOnAllDisplays(currentUserId, "systemReady");
t.traceEnd();
@@ -8216,6 +8214,10 @@ public class ActivityManagerService extends IActivityManager.Stub
if (isBootingSystemUser) {
+ // Need to send the broadcasts for the system user here because
+ // UserController#startUserInternal will not send them for the system user starting,
+ // It checks if the user state already exists, which is always the case for the
+ // system user.
t.traceBegin("sendUserStartBroadcast");
final int callingUid = Binder.getCallingUid();
final int callingPid = Binder.getCallingPid();