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

Commit 20f819a7 authored by Yao Li's avatar Yao Li
Browse files

Change headless system user's name

This CL changes the default user name for HSU to "System User".
This value can be overridden by overlay.

Bug: 410929293
Bug: 407568535
Flag: android.multiuser.logout_user_api
Test: Manual test. adb shell am logout-user 10
Test: atest FrameworksMockingServicesTests:UserManagerServiceMockedTest

Change-Id: I375191126d4300ff036327484d5fd03d9b306786
parent 2fc51dd2
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -5077,6 +5077,9 @@
    <string name="owner_name" msgid="3879126011135546571">Owner</string>
    <!-- Default name of the guest user [CHAR LIMIT=35] -->
    <string name="guest_name">Guest</string>
    <!-- Default name of the headless system user, on HSUM devices. This users hosts the system, but
    is not a human user. [CHAR LIMIT=35] -->
    <string name="headless_system_user_name">System User</string>
    <!-- Error message title [CHAR LIMIT=35] -->
    <string name="error_message_title">Error</string>
    <!-- Message informing user that the change was disallowed by an administrator. [CHAR LIMIT=none] -->
+1 −0
Original line number Diff line number Diff line
@@ -1108,6 +1108,7 @@
  <java-symbol type="string" name="media_route_status_in_use" />
  <java-symbol type="string" name="owner_name" />
  <java-symbol type="string" name="guest_name" />
  <java-symbol type="string" name="headless_system_user_name" />
  <java-symbol type="string" name="config_chooseAccountActivity" />
  <java-symbol type="string" name="config_chooseTypeAndAccountActivity" />
  <java-symbol type="string" name="config_chooserActivity" />
+9 −0
Original line number Diff line number Diff line
@@ -2444,6 +2444,11 @@ public class UserManagerService extends IUserManager.Stub {
                int number = mUser0Allocations.incrementAndGet();
                Slog.w(LOG_TAG, "System user instantiated at least " + number + " times");
            }
            if (android.multiuser.Flags.logoutUserApi()) {
                if (isHeadlessSystemUserMode()) {
                    return getHeadlessSystemUserName();
                }
            }
            return getOwnerName();
        }
        if (user.isMain()) {
@@ -5109,6 +5114,10 @@ public class UserManagerService extends IUserManager.Stub {
        return mContext.getString(com.android.internal.R.string.guest_name);
    }

    String getHeadlessSystemUserName() {
        return mContext.getString(com.android.internal.R.string.headless_system_user_name);
    }

    private void invalidateOwnerNameIfNecessary(@NonNull Resources res, boolean forceUpdate) {
        final int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
        if (forceUpdate || (configChanges & mOwnerNameTypedValue.changingConfigurations) != 0) {
+41 −2
Original line number Diff line number Diff line
@@ -1148,7 +1148,8 @@ public final class UserManagerServiceMockedTest {
     * {@code null} name.
     */
    @Test
    public void testUserWithName_withDefaultName() {
    public void testUserWithName_withDefaultName_nonHsum() {
        setSystemUserHeadless(false);
        int initialAllocations = getCurrentNumberOfUser0Allocations();

        var systemUser = new UserInfo(UserHandle.USER_SYSTEM, /* name= */ null, /* flags= */ 0);
@@ -1198,6 +1199,21 @@ public final class UserManagerServiceMockedTest {
                .that(getCurrentNumberOfUser0Allocations()).isEqualTo(expectedAllocations);
    }

    @Test
    @EnableFlags(FLAG_LOGOUT_USER_API)
    public void testUserWithName_withDefaultName_hsum() {
        setSystemUserHeadless(true);

        var systemUser = new UserInfo(UserHandle.USER_SYSTEM, /* name= */ null, /* flags= */ 0);
        UserInfo systemUserWithName = mUms.userWithName(systemUser);
        assertWithMessage("userWithName(systemUser)").that(systemUserWithName).isNotNull();
        expect.withMessage("userWithName(systemUser)").that(systemUserWithName)
                .isNotSameInstanceAs(systemUser);
        expect.withMessage("systemUserWithName.name").that(systemUserWithName.name)
                .isEqualTo(mUms.getHeadlessSystemUserName());
        expect.withMessage("system.name").that(systemUser.name).isNull();
    }

    @Test
    public void testGetName_null() {
        assertThrows(NullPointerException.class, () -> mUms.getName(null));
@@ -1223,7 +1239,9 @@ public final class UserManagerServiceMockedTest {

    /** Tests what happens when the {@link UserInfo} has a {@code null} name. */
    @Test
    public void testGetName_withDefaultNames() {
    public void testGetName_withDefaultNames_nonHsum() {
        setSystemUserHeadless(false);

        var systemUser = new UserInfo(UserHandle.USER_SYSTEM, /* name= */ null, /* flags= */ 0);
        expect.withMessage("name of system user").that(mUms.getName(systemUser))
                .isEqualTo(mUms.getOwnerName());
@@ -1240,6 +1258,27 @@ public final class UserManagerServiceMockedTest {
        expect.withMessage("name of normal user").that(mUms.getName(normalUser)).isNull();
    }

    @Test
    @EnableFlags(FLAG_LOGOUT_USER_API)
    public void testGetName_withDefaultNames_hsum() {
        setSystemUserHeadless(true);

        var systemUser = new UserInfo(UserHandle.USER_SYSTEM, /* name= */ null, /* flags= */ 0);
        expect.withMessage("name of system user").that(mUms.getName(systemUser))
                .isEqualTo(mUms.getHeadlessSystemUserName());

        var mainUser = new UserInfo(42, /* name= */ null, UserInfo.FLAG_MAIN);
        expect.withMessage("name of main user").that(mUms.getName(mainUser))
                .isEqualTo(mUms.getOwnerName());

        var guestUser = new UserInfo(42, /* name= */ null, UserInfo.FLAG_GUEST);
        expect.withMessage("name of guest user").that(mUms.getName(guestUser))
                .isEqualTo(mUms.getGuestName());

        var normalUser = new UserInfo(42, /* name= */ null, /* flags= */ 0);
        expect.withMessage("name of normal user").that(mUms.getName(normalUser)).isNull();
    }

    @Test
    public void testCanSwitchToHeadlessSystemUser_true() {
        mockCanSwitchToHeadlessSystemUser(true);