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

Commit 0669ee1e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "UserManager.isUserOfType"

parents aec408b4 351a8fb4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+14 −18
Original line number Diff line number Diff line
@@ -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();
        }
+5 −6
Original line number Diff line number Diff line
@@ -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));
    }

    /**
+13 −13
Original line number Diff line number Diff line
@@ -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. */
+2 −2
Original line number Diff line number Diff line
@@ -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(