Loading core/res/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5105,6 +5105,8 @@ <!-- 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> <!-- Used when the name of a user is not explicitly set [CHAR LIMIT=35] --> <string name="unnamed_user_name">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] --> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1127,6 +1127,7 @@ <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="unnamed_user_name" /> <java-symbol type="string" name="config_chooseAccountActivity" /> <java-symbol type="string" name="config_chooseTypeAndAccountActivity" /> <java-symbol type="string" name="config_chooserActivity" /> Loading services/core/java/com/android/server/pm/UserManagerService.java +7 −1 Original line number Diff line number Diff line Loading @@ -2537,7 +2537,7 @@ public class UserManagerService extends IUserManager.Stub { if (user.isGuest()) { return getGuestName(); } return null; return getUnnamedUserName(); } /** Returns whether the given user type is one of the FULL user types. */ Loading Loading @@ -5410,6 +5410,11 @@ public class UserManagerService extends IUserManager.Stub { return mContext.getString(com.android.internal.R.string.guest_name); } @VisibleForTesting String getUnnamedUserName() { return mContext.getString(com.android.internal.R.string.unnamed_user_name); } String getHeadlessSystemUserName() { return mContext.getString(com.android.internal.R.string.headless_system_user_name); } Loading Loading @@ -8045,6 +8050,7 @@ public class UserManagerService extends IUserManager.Stub { pw.println(" User version: " + mUserVersion); pw.println(" Owner name: " + getOwnerName()); pw.println(" Guest name: " + getGuestName()); pw.println(" Unnamed user name: " + getUnnamedUserName()); if (DBG_ALLOCATION) { pw.println(" System user allocations: " + mUser0Allocations.get()); } Loading services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceMockedTest.java +50 −15 Original line number Diff line number Diff line Loading @@ -120,8 +120,11 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * Run as {@code atest Loading Loading @@ -1166,8 +1169,9 @@ public final class UserManagerServiceMockedTest { UserInfo normalUserWithName = mUms.userWithName(normalUser); assertWithMessage("userWithName(normalUser)").that(normalUserWithName).isNotNull(); expect.withMessage("userWithName(normalUser)").that(normalUserWithName) .isSameInstanceAs(normalUser); expect.withMessage("normalUserWithName.name").that(normalUserWithName.name).isNull(); .isNotSameInstanceAs(normalUser); expect.withMessage("normalUserWithName.name").that(normalUserWithName.name) .isEqualTo(mUms.getUnnamedUserName()); expect.withMessage("normalUser.name").that(normalUser.name).isNull(); expect.withMessage("number of system user allocations after non-systemUser call") .that(getCurrentNumberOfUser0Allocations()).isEqualTo(expectedAllocations); Loading Loading @@ -1229,7 +1233,8 @@ public final class UserManagerServiceMockedTest { .isEqualTo(mUms.getGuestName()); var normalUser = new UserInfo(42, /* name= */ null, /* flags= */ 0); expect.withMessage("name of normal user").that(mUms.getName(normalUser)).isNull(); expect.withMessage("name of normal user").that(mUms.getName(normalUser)) .isEqualTo(mUms.getUnnamedUserName()); } @Test Loading @@ -1250,7 +1255,8 @@ public final class UserManagerServiceMockedTest { .isEqualTo(mUms.getGuestName()); var normalUser = new UserInfo(42, /* name= */ null, /* flags= */ 0); expect.withMessage("name of normal user").that(mUms.getName(normalUser)).isNull(); expect.withMessage("name of normal user").that(mUms.getName(normalUser)) .isEqualTo(mUms.getUnnamedUserName()); } @Test Loading Loading @@ -1383,6 +1389,18 @@ public final class UserManagerServiceMockedTest { } } private void assertDefaultNewUserName(List<UserInfo> users, int... userIds) { Set<Integer> userIdsSet = Arrays.stream(userIds).boxed().collect(Collectors.toSet()); var newUserName = mUms.getUnnamedUserName(); for (var user : users) { if (userIdsSet.contains(user.id)) { expect.withMessage("name on user (%s)", user.toFullString()) .that(user.name) .isEqualTo(newUserName); } } } @Test public void testGetUsersWithUnresolvedNames() { var headlessSystemUser = addUser(new UserInfo(USER_SYSTEM, /* name= */ null, FLAG_ADMIN)); Loading Loading @@ -1418,8 +1436,19 @@ public final class UserManagerServiceMockedTest { } @Test public void testGetUsersInternal() { public void testGetUsersInternal_nonHsum() { var fullSystemUser = addUser(new UserInfo(USER_SYSTEM, /* name= */ null, FLAG_FULL | FLAG_ADMIN)); testGetUsersInternal(fullSystemUser); } @Test public void testGetUsersInternal_hsum() { var headlessSystemUser = addUser(new UserInfo(USER_SYSTEM, /* name= */ null, FLAG_ADMIN)); testGetUsersInternal(headlessSystemUser); } private void testGetUsersInternal(UserInfo systemUser) { var adminUser = addUser(new UserInfo(/* id= */ 4, /* name= */ null, FLAG_FULL | FLAG_ADMIN)); var nonAdminUser = addUser(new UserInfo(/* id= */ 8, /* name= */ null, FLAG_FULL)); Loading @@ -1435,28 +1464,28 @@ public final class UserManagerServiceMockedTest { DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(EXCLUDE_PARTIAL, EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser); .containsExactly(systemUser, adminUser, nonAdminUser, namedUser); expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser, .containsExactly(systemUser, adminUser, nonAdminUser, namedUser, partialUser); expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser, .containsExactly(systemUser, adminUser, nonAdminUser, namedUser, partialUser, dyingUser); expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser, .containsExactly(systemUser, adminUser, nonAdminUser, namedUser, partialUser, dyingUser); // NOTE: cannot check for a system user with resolved name on containsExactly() because // UserInfo doesn't implement equals, hence checks below need to explicitly check it // NOTE: cannot check for users with resolved names on containsExactly() because // UserInfo doesn't implement equals, hence checks below need to explicitly check them List<UserInfo> resolvedNameUsers; resolvedNameUsers = mUms.getUsersInternal(EXCLUDE_PARTIAL, EXCLUDE_DYING, Loading @@ -1468,8 +1497,9 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", EXCLUDE_PARTIAL, EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id); resolvedNameUsers = mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, RESOLVE_NULL_NAMES); Loading @@ -1480,8 +1510,9 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser, partialUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id, partialUser.id); resolvedNameUsers = mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES); Loading @@ -1492,8 +1523,10 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser, partialUser, dyingUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id, partialUser.id, dyingUser.id); resolvedNameUsers = mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES); Loading @@ -1504,8 +1537,10 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser, partialUser, dyingUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id, partialUser.id, dyingUser.id); } @Test Loading Loading
core/res/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5105,6 +5105,8 @@ <!-- 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> <!-- Used when the name of a user is not explicitly set [CHAR LIMIT=35] --> <string name="unnamed_user_name">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] --> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1127,6 +1127,7 @@ <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="unnamed_user_name" /> <java-symbol type="string" name="config_chooseAccountActivity" /> <java-symbol type="string" name="config_chooseTypeAndAccountActivity" /> <java-symbol type="string" name="config_chooserActivity" /> Loading
services/core/java/com/android/server/pm/UserManagerService.java +7 −1 Original line number Diff line number Diff line Loading @@ -2537,7 +2537,7 @@ public class UserManagerService extends IUserManager.Stub { if (user.isGuest()) { return getGuestName(); } return null; return getUnnamedUserName(); } /** Returns whether the given user type is one of the FULL user types. */ Loading Loading @@ -5410,6 +5410,11 @@ public class UserManagerService extends IUserManager.Stub { return mContext.getString(com.android.internal.R.string.guest_name); } @VisibleForTesting String getUnnamedUserName() { return mContext.getString(com.android.internal.R.string.unnamed_user_name); } String getHeadlessSystemUserName() { return mContext.getString(com.android.internal.R.string.headless_system_user_name); } Loading Loading @@ -8045,6 +8050,7 @@ public class UserManagerService extends IUserManager.Stub { pw.println(" User version: " + mUserVersion); pw.println(" Owner name: " + getOwnerName()); pw.println(" Guest name: " + getGuestName()); pw.println(" Unnamed user name: " + getUnnamedUserName()); if (DBG_ALLOCATION) { pw.println(" System user allocations: " + mUser0Allocations.get()); } Loading
services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceMockedTest.java +50 −15 Original line number Diff line number Diff line Loading @@ -120,8 +120,11 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * Run as {@code atest Loading Loading @@ -1166,8 +1169,9 @@ public final class UserManagerServiceMockedTest { UserInfo normalUserWithName = mUms.userWithName(normalUser); assertWithMessage("userWithName(normalUser)").that(normalUserWithName).isNotNull(); expect.withMessage("userWithName(normalUser)").that(normalUserWithName) .isSameInstanceAs(normalUser); expect.withMessage("normalUserWithName.name").that(normalUserWithName.name).isNull(); .isNotSameInstanceAs(normalUser); expect.withMessage("normalUserWithName.name").that(normalUserWithName.name) .isEqualTo(mUms.getUnnamedUserName()); expect.withMessage("normalUser.name").that(normalUser.name).isNull(); expect.withMessage("number of system user allocations after non-systemUser call") .that(getCurrentNumberOfUser0Allocations()).isEqualTo(expectedAllocations); Loading Loading @@ -1229,7 +1233,8 @@ public final class UserManagerServiceMockedTest { .isEqualTo(mUms.getGuestName()); var normalUser = new UserInfo(42, /* name= */ null, /* flags= */ 0); expect.withMessage("name of normal user").that(mUms.getName(normalUser)).isNull(); expect.withMessage("name of normal user").that(mUms.getName(normalUser)) .isEqualTo(mUms.getUnnamedUserName()); } @Test Loading @@ -1250,7 +1255,8 @@ public final class UserManagerServiceMockedTest { .isEqualTo(mUms.getGuestName()); var normalUser = new UserInfo(42, /* name= */ null, /* flags= */ 0); expect.withMessage("name of normal user").that(mUms.getName(normalUser)).isNull(); expect.withMessage("name of normal user").that(mUms.getName(normalUser)) .isEqualTo(mUms.getUnnamedUserName()); } @Test Loading Loading @@ -1383,6 +1389,18 @@ public final class UserManagerServiceMockedTest { } } private void assertDefaultNewUserName(List<UserInfo> users, int... userIds) { Set<Integer> userIdsSet = Arrays.stream(userIds).boxed().collect(Collectors.toSet()); var newUserName = mUms.getUnnamedUserName(); for (var user : users) { if (userIdsSet.contains(user.id)) { expect.withMessage("name on user (%s)", user.toFullString()) .that(user.name) .isEqualTo(newUserName); } } } @Test public void testGetUsersWithUnresolvedNames() { var headlessSystemUser = addUser(new UserInfo(USER_SYSTEM, /* name= */ null, FLAG_ADMIN)); Loading Loading @@ -1418,8 +1436,19 @@ public final class UserManagerServiceMockedTest { } @Test public void testGetUsersInternal() { public void testGetUsersInternal_nonHsum() { var fullSystemUser = addUser(new UserInfo(USER_SYSTEM, /* name= */ null, FLAG_FULL | FLAG_ADMIN)); testGetUsersInternal(fullSystemUser); } @Test public void testGetUsersInternal_hsum() { var headlessSystemUser = addUser(new UserInfo(USER_SYSTEM, /* name= */ null, FLAG_ADMIN)); testGetUsersInternal(headlessSystemUser); } private void testGetUsersInternal(UserInfo systemUser) { var adminUser = addUser(new UserInfo(/* id= */ 4, /* name= */ null, FLAG_FULL | FLAG_ADMIN)); var nonAdminUser = addUser(new UserInfo(/* id= */ 8, /* name= */ null, FLAG_FULL)); Loading @@ -1435,28 +1464,28 @@ public final class UserManagerServiceMockedTest { DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(EXCLUDE_PARTIAL, EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser); .containsExactly(systemUser, adminUser, nonAdminUser, namedUser); expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser, .containsExactly(systemUser, adminUser, nonAdminUser, namedUser, partialUser); expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser, .containsExactly(systemUser, adminUser, nonAdminUser, namedUser, partialUser, dyingUser); expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES) .that(mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, DONT_RESOLVE_NULL_NAMES)) .containsExactly(headlessSystemUser, adminUser, nonAdminUser, namedUser, .containsExactly(systemUser, adminUser, nonAdminUser, namedUser, partialUser, dyingUser); // NOTE: cannot check for a system user with resolved name on containsExactly() because // UserInfo doesn't implement equals, hence checks below need to explicitly check it // NOTE: cannot check for users with resolved names on containsExactly() because // UserInfo doesn't implement equals, hence checks below need to explicitly check them List<UserInfo> resolvedNameUsers; resolvedNameUsers = mUms.getUsersInternal(EXCLUDE_PARTIAL, EXCLUDE_DYING, Loading @@ -1468,8 +1497,9 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", EXCLUDE_PARTIAL, EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id); resolvedNameUsers = mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, RESOLVE_NULL_NAMES); Loading @@ -1480,8 +1510,9 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser, partialUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id, partialUser.id); resolvedNameUsers = mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES); Loading @@ -1492,8 +1523,10 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser, partialUser, dyingUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id, partialUser.id, dyingUser.id); resolvedNameUsers = mUms.getUsersInternal(DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES); Loading @@ -1504,8 +1537,10 @@ public final class UserManagerServiceMockedTest { expect.withMessage("getUsersInternal(%s, %s, %s)", DONT_EXCLUDE_PARTIAL, DONT_EXCLUDE_DYING, RESOLVE_NULL_NAMES) .that(resolvedNameUsers) .containsAtLeast(adminUser, nonAdminUser, namedUser, partialUser, dyingUser); .contains(namedUser); assertDefaultSystemUserName(resolvedNameUsers); assertDefaultNewUserName(resolvedNameUsers, adminUser.id, nonAdminUser.id, partialUser.id, dyingUser.id); } @Test Loading