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
(cherry picked from commit ba0f9f3ad2)
Merged-In: I4a101418c10a2c959c2bfae01b95863aebd521e8
This commit is contained in:
committed by
Android Build Coastguard Worker
parent
34696dcb97
commit
746d2338b3
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user