Added isUserNameSet
It can be used to check that the value returned by getUserName() was set
by the user and is not a default value returned by the system.
Test: UserManagerServiceUserInfoTest pass
Bug: 38138381
Change-Id: I0ca37970fda548508190bffd1fa7be95d4a15076
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 12f5396..e426356 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -93,4 +93,5 @@
int getManagedProfileBadge(int userId);
boolean isUserUnlocked(int userId);
boolean isUserRunning(int userId);
+ boolean isUserNameSet(int userHandle);
}
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 52b2f52..f2df7da 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -906,6 +906,20 @@
}
/**
+ * Returns whether user name has been set.
+ * <p>This method can be used to check that the value returned by {@link #getUserName()} was
+ * set by the user and is not a placeholder string provided by the system.
+ * @hide
+ */
+ public boolean isUserNameSet() {
+ try {
+ return mService.isUserNameSet(getUserHandle());
+ } catch (RemoteException re) {
+ throw re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Used to determine whether the user making this call is subject to
* teleportations.
*
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 63e2d47..30c4009 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -3069,6 +3069,14 @@
}
@Override
+ public boolean isUserNameSet(int userHandle) {
+ synchronized (mUsersLock) {
+ UserInfo userInfo = getUserInfoLU(userHandle);
+ return userInfo != null && userInfo.name != null;
+ }
+ }
+
+ @Override
public int getUserHandle(int userSerialNumber) {
synchronized (mUsersLock) {
for (int userId : mUserIds) {
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java
index 575d7a3..092119e 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java
@@ -24,6 +24,7 @@
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.filters.MediumTest;
+import android.text.TextUtils;
import com.android.server.LocalServices;
import com.android.server.pm.UserManagerService.UserData;
@@ -38,6 +39,8 @@
import java.util.List;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
/**
* <p>Run with:<pre>
@@ -100,6 +103,23 @@
assertUserInfoEquals(info, read);
}
+ @Test
+ public void testGetUserName() throws Exception {
+ assertFalse("System user name shouldn't be set",
+ mUserManagerService.isUserNameSet(UserHandle.USER_SYSTEM));
+ UserInfo userInfo = mUserManagerService.getUserInfo(UserHandle.USER_SYSTEM);
+ assertFalse("A system provided name should be returned for primary user",
+ TextUtils.isEmpty(userInfo.name));
+
+ userInfo = createUser();
+ userInfo.partial = false;
+ final int TEST_ID = 100;
+ userInfo.id = TEST_ID;
+ mUserManagerService.putUserInfo(userInfo);
+ assertTrue("Test user name must be set", mUserManagerService.isUserNameSet(TEST_ID));
+ assertEquals("A Name", mUserManagerService.getUserInfo(TEST_ID).name);
+ }
+
private UserInfo createUser() {
UserInfo user = new UserInfo(/*id*/ 21, "A Name", "A path", /*flags*/ 0x0ff0ff);
user.serialNumber = 5;