diff options
| author | 2019-12-23 10:09:14 -0800 | |
|---|---|---|
| committer | 2020-01-06 14:04:42 -0800 | |
| commit | 351a8fb4155323beadefa29482a0610b4d4153d6 (patch) | |
| tree | f2a460e29319994df1af3752a6ce7dbd82878c8c | |
| parent | 52060dca88768b7c2b4ab2cf39f42edfd5d22b1f (diff) | |
UserManager.isUserOfType
Replaces the UserManager.getUserType API with isUserOfType, where the
suspected type is passed in as a parameter. Also makes this API require
MANAGE_USERS.
Test: atest UserManagerServiceUserInfoTest
Test: atest UserManagerTest
Bug: 142482943
Change-Id: Icca1d5d9a36bfc1422c3f37456135ce69c3f3b38
5 files changed, 35 insertions, 40 deletions
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index e81a505a1715..edaaf81cd906 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -62,7 +62,7 @@ interface IUserManager { boolean canAddMoreManagedProfiles(int userId, boolean allowedToRemoveOne); UserInfo getProfileParent(int userId); boolean isSameProfileGroup(int userId, int otherUserHandle); - String getUserTypeForUser(int userId); + boolean isUserOfType(int userId, in String userType); @UnsupportedAppUsage UserInfo getUserInfo(int userId); String getUserAccount(int userId); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index fa9569bbe0ef..6e199ce3a73f 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -1626,39 +1626,35 @@ public class UserManager { } /** - * Returns the calling user's user type. + * Returns whether the current user is of the given user type, such as + * {@link UserManager#USER_TYPE_FULL_GUEST}. * - * // TODO(b/142482943): Decide on the appropriate permission requirements. - * - * @return the name of the user type, such as {@link UserManager#USER_TYPE_PROFILE_MANAGED}. + * @return true if the user is of the given user type. * @hide */ - public @NonNull String getUserType() { + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) + public boolean isUserOfType(@NonNull String userType) { try { - return mService.getUserTypeForUser(UserHandle.myUserId()); + return mService.isUserOfType(UserHandle.myUserId(), userType); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } } /** - * Returns the given user's user type. - * - * // TODO(b/142482943): Decide on the appropriate permission requirements. - * Requires {@link android.Manifest.permission#MANAGE_USERS} or - * {@link android.Manifest.permission#INTERACT_ACROSS_USERS} permission, otherwise the caller - * must be in the same profile group of specified user. + * Returns whether the given user is of the given user type, such as + * {@link UserManager#USER_TYPE_FULL_GUEST}. * * @param userHandle the user handle of the user whose type is being requested. - * @return the name of the user's user type, e.g. {@link UserManager#USER_TYPE_PROFILE_MANAGED}, - * or {@code null} if there is no such user. + * @param userType the name of the user's user type, e.g. + * {@link UserManager#USER_TYPE_PROFILE_MANAGED}. + * @return true if the userHandle user is of type userType * @hide */ - @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS, - android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional = true) - public @Nullable String getUserTypeForUser(@NonNull UserHandle userHandle) { + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) + public boolean isUserOfType(@NonNull UserHandle userHandle, @NonNull String userType) { try { - return mService.getUserTypeForUser(userHandle.getIdentifier()); + return mService.isUserOfType(userHandle.getIdentifier(), userType); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 5854e321665b..3cfb6774ce90 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1132,14 +1132,13 @@ public class UserManagerService extends IUserManager.Stub { } /** - * Returns the user type, e.g. {@link UserManager#USER_TYPE_FULL_GUEST}, of the given userId, - * or null if the user doesn't exist. + * Returns whether the given user (specified by userId) is of the given user type, such as + * {@link UserManager#USER_TYPE_FULL_GUEST}. */ @Override - public @Nullable String getUserTypeForUser(@UserIdInt int userId) { - // TODO(b/142482943): Decide on the appropriate permission requirements. - checkManageOrInteractPermIfCallerInOtherProfileGroup(userId, "getUserTypeForUser"); - return getUserTypeNoChecks(userId); + public boolean isUserOfType(@UserIdInt int userId, String userType) { + checkManageUsersPermission("check user type"); + return userType != null && userType.equals(getUserTypeNoChecks(userId)); } /** 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 1e760ccba9f3..ac27a087ba8e 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java @@ -139,18 +139,18 @@ public class UserManagerServiceUserInfoTest { assertEquals("A Name", mUserManagerService.getUserInfo(TEST_ID).name); } - /** Test UMS.getUserTypeForUser(). */ + /** Test UMS.isUserOfType(). */ @Test - public void testGetUserTypeForUser() throws Exception { - final String typeSys = mUserManagerService.getUserTypeForUser(UserHandle.USER_SYSTEM); - assertTrue("System user was of invalid type " + typeSys, - typeSys.equals(USER_TYPE_SYSTEM_HEADLESS) || typeSys.equals(USER_TYPE_FULL_SYSTEM)); + public void testIsUserOfType() throws Exception { + assertTrue("System user was of invalid type", + mUserManagerService.isUserOfType(UserHandle.USER_SYSTEM, USER_TYPE_SYSTEM_HEADLESS) + || mUserManagerService.isUserOfType(UserHandle.USER_SYSTEM, USER_TYPE_FULL_SYSTEM)); final int testId = 100; final String typeName = "A type"; UserInfo userInfo = createUser(testId, 0, typeName); mUserManagerService.putUserInfo(userInfo); - assertEquals(typeName, mUserManagerService.getUserTypeForUser(testId)); + assertTrue(mUserManagerService.isUserOfType(testId, typeName)); } /** Tests upgradeIfNecessaryLP (but without locking) for upgrading from version 8 to 9+. */ @@ -169,22 +169,22 @@ public class UserManagerServiceUserInfoTest { mUserManagerService.upgradeIfNecessaryLP(null, versionToTest - 1); - assertEquals(USER_TYPE_PROFILE_MANAGED, mUserManagerService.getUserTypeForUser(100)); + assertTrue(mUserManagerService.isUserOfType(100, USER_TYPE_PROFILE_MANAGED)); assertTrue((mUserManagerService.getUserInfo(100).flags & FLAG_PROFILE) != 0); - assertEquals(USER_TYPE_FULL_GUEST, mUserManagerService.getUserTypeForUser(101)); + assertTrue(mUserManagerService.isUserOfType(101, USER_TYPE_FULL_GUEST)); - assertEquals(USER_TYPE_FULL_RESTRICTED, mUserManagerService.getUserTypeForUser(102)); + assertTrue(mUserManagerService.isUserOfType(102, USER_TYPE_FULL_RESTRICTED)); assertTrue((mUserManagerService.getUserInfo(102).flags & FLAG_PROFILE) == 0); - assertEquals(USER_TYPE_FULL_SECONDARY, mUserManagerService.getUserTypeForUser(103)); + assertTrue(mUserManagerService.isUserOfType(103, USER_TYPE_FULL_SECONDARY)); assertTrue((mUserManagerService.getUserInfo(103).flags & FLAG_PROFILE) == 0); - assertEquals(USER_TYPE_SYSTEM_HEADLESS, mUserManagerService.getUserTypeForUser(104)); + assertTrue(mUserManagerService.isUserOfType(104, USER_TYPE_SYSTEM_HEADLESS)); - assertEquals(USER_TYPE_FULL_SYSTEM, mUserManagerService.getUserTypeForUser(105)); + assertTrue(mUserManagerService.isUserOfType(105, USER_TYPE_FULL_SYSTEM)); - assertEquals(USER_TYPE_FULL_DEMO, mUserManagerService.getUserTypeForUser(106)); + assertTrue(mUserManagerService.isUserOfType(106, USER_TYPE_FULL_DEMO)); } /** Creates a UserInfo with the given flags and userType. */ 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 a7275fc74734..77376f069525 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java @@ -341,8 +341,8 @@ public final class UserManagerTest { assertThat(mUserManager.getUserBadgeNoBackgroundResId(userId)) .isEqualTo(userTypeDetails.getBadgeNoBackground()); assertThat(mUserManager.isProfile(userId)).isEqualTo(userTypeDetails.isProfile()); - assertThat(mUserManager.getUserTypeForUser(asHandle(userId))) - .isEqualTo(userTypeDetails.getName()); + assertThat(mUserManager.isUserOfType(asHandle(userId), userTypeDetails.getName())) + .isTrue(); final int badgeIndex = userInfo.profileBadge; assertThat(mUserManager.getUserBadgeColor(userId)).isEqualTo( |