summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/UserManager.java10
-rw-r--r--core/res/res/values/strings.xml2
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt5
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java33
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java13
7 files changed, 45 insertions, 22 deletions
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index e56f214e30d9..5c6a75c7af22 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -3322,7 +3322,7 @@ public class UserManager {
*
* <p>This method can be used by OEMs to "warm" up the user creation by pre-creating some users
* at the first boot, so they when the "real" user is created (for example,
- * by {@link #createUser(String, String, int)} or {@link #createGuest(Context, String)}), it
+ * by {@link #createUser(String, String, int)} or {@link #createGuest(Context)}), it
* takes less time.
*
* <p>This method completes the majority of work necessary for user creation: it
@@ -3359,7 +3359,6 @@ public class UserManager {
/**
* Creates a guest user and configures it.
* @param context an application context
- * @param name the name to set for the user
* @return the {@link UserInfo} object for the created user, or {@code null} if the user
* could not be created.
*
@@ -3367,20 +3366,19 @@ public class UserManager {
*/
@RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,
Manifest.permission.CREATE_USERS})
- public UserInfo createGuest(Context context, String name) {
- UserInfo guest = null;
+ public UserInfo createGuest(Context context) {
try {
- guest = mService.createUserWithThrow(name, USER_TYPE_FULL_GUEST, 0);
+ final UserInfo guest = mService.createUserWithThrow(null, USER_TYPE_FULL_GUEST, 0);
if (guest != null) {
Settings.Secure.putStringForUser(context.getContentResolver(),
Settings.Secure.SKIP_FIRST_USE_HINTS, "1", guest.id);
}
+ return guest;
} catch (ServiceSpecificException e) {
return null;
} catch (RemoteException re) {
throw re.rethrowFromSystemServer();
}
- return guest;
}
/**
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index e64756119478..34bd2fbad576 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4894,6 +4894,8 @@
<string name="user_logging_out_message">Logging out <xliff:g id="name" example="Bob">%1$s</xliff:g>\u2026</string>
<!-- Default name of the owner user [CHAR LIMIT=20] -->
<string name="owner_name" msgid="3879126011135546571">Owner</string>
+ <!-- Default name of the guest user [CHAR LIMIT=35] -->
+ <string name="guest_name">Guest</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] -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 2112953d6962..9b677b368265 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1108,6 +1108,7 @@
<java-symbol type="string" name="media_route_status_not_available" />
<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="config_chooseAccountActivity" />
<java-symbol type="string" name="config_chooseTypeAndAccountActivity" />
<java-symbol type="string" name="config_chooserActivity" />
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index d1c9b3f1c2c5..d7c8a9160807 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -855,8 +855,7 @@ public class UserSwitcherController implements Dumpable {
public @UserIdInt int createGuest() {
UserInfo guest;
try {
- guest = mUserManager.createGuest(mContext,
- mContext.getString(com.android.settingslib.R.string.guest_nickname));
+ guest = mUserManager.createGuest(mContext);
} catch (UserManager.UserOperationException e) {
Log.e(TAG, "Couldn't create guest user", e);
return UserHandle.USER_NULL;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt
index 896dab6c060d..91c347fc4685 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt
@@ -64,7 +64,6 @@ import org.mockito.ArgumentMatchers.eq
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.any
-import org.mockito.Mockito.anyString
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock
@@ -207,7 +206,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
`when`(userTracker.userId).thenReturn(ownerId)
`when`(userTracker.userInfo).thenReturn(ownerInfo)
- `when`(userManager.createGuest(any(), anyString())).thenReturn(guestInfo)
+ `when`(userManager.createGuest(any())).thenReturn(guestInfo)
userSwitcherController.onUserListItemClicked(emptyGuestUserRecord, null)
testableLooper.processAllMessages()
@@ -232,7 +231,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
`when`(userTracker.userId).thenReturn(ownerId)
`when`(userTracker.userInfo).thenReturn(ownerInfo)
- `when`(userManager.createGuest(any(), anyString())).thenReturn(guestInfo)
+ `when`(userManager.createGuest(any())).thenReturn(guestInfo)
userSwitcherController.onUserListItemClicked(emptyGuestUserRecord, dialogShower)
testableLooper.processAllMessages()
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index ad0f9a183c43..d99305d728b9 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1399,21 +1399,28 @@ public class UserManagerService extends IUserManager.Stub {
}
/**
- * Returns a UserInfo object with the name filled in, for Owner, or the original
+ * Returns a UserInfo object with the name filled in, for Owner and Guest, or the original
* if the name is already set.
*/
private UserInfo userWithName(UserInfo orig) {
- if (orig != null && orig.name == null && orig.id == UserHandle.USER_SYSTEM) {
- if (DBG_ALLOCATION) {
- final int number = mUser0Allocations.incrementAndGet();
- Slog.w(LOG_TAG, "System user instantiated at least " + number + " times");
- }
- UserInfo withName = new UserInfo(orig);
- withName.name = getOwnerName();
- return withName;
- } else {
- return orig;
+ if (orig != null && orig.name == null) {
+ String name = null;
+ if (orig.id == UserHandle.USER_SYSTEM) {
+ if (DBG_ALLOCATION) {
+ final int number = mUser0Allocations.incrementAndGet();
+ Slog.w(LOG_TAG, "System user instantiated at least " + number + " times");
+ }
+ name = getOwnerName();
+ } else if (orig.isGuest()) {
+ name = getGuestName();
+ }
+ if (name != null) {
+ final UserInfo withName = new UserInfo(orig);
+ withName.name = name;
+ return withName;
+ }
}
+ return orig;
}
/** Returns whether the given user type is one of the FULL user types. */
@@ -3259,6 +3266,10 @@ public class UserManagerService extends IUserManager.Stub {
return mOwnerName.get();
}
+ private String getGuestName() {
+ return mContext.getString(com.android.internal.R.string.guest_name);
+ }
+
private void invalidateOwnerNameIfNecessary(@NonNull Resources res, boolean forceUpdate) {
final int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
if (forceUpdate || (configChanges & mOwnerNameTypedValue.changingConfigurations) != 0) {
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
index 401cd7f0b67e..c7b5547170d0 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
@@ -1079,6 +1079,19 @@ public final class UserManagerTest {
}
@Test
+ public void testGetUserName_shouldReturnTranslatedTextForNullNamedGuestUser() throws Exception {
+ UserInfo guestWithNullName = createUser(null, UserManager.USER_TYPE_FULL_GUEST, 0);
+ assertThat(guestWithNullName).isNotNull();
+
+ UserManager um = (UserManager) mContext.createPackageContextAsUser(
+ "android", 0, guestWithNullName.getUserHandle())
+ .getSystemService(Context.USER_SERVICE);
+
+ assertThat(um.getUserName()).isEqualTo(
+ mContext.getString(com.android.internal.R.string.guest_name));
+ }
+
+ @Test
public void testGetUserIcon_withContextUserId() throws Exception {
assumeManagedUsersSupported();
final int primaryUserId = mUserManager.getPrimaryUser().id;