Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba0f9f3a authored by bkchoi's avatar bkchoi
Browse files

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
parent 49c7dad1
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -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();