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

Commit 16c011fa authored by Tetiana Meronyk's avatar Tetiana Meronyk Committed by Android (Google) Code Review
Browse files

Merge "Move part of UserManager method isUserSwitcherEnabled to UserManagerService"

parents 7144d64e 2e00a285
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ interface IUserManager {
    String getUserAccount(int userId);
    void setUserAccount(int userId, String accountName);
    long getUserCreationTime(int userId);
    boolean isUserSwitcherEnabled(int mUserId);
    boolean isUserSwitcherEnabled(boolean showEvenIfNotActionable, int mUserId);
    boolean isRestricted(int userId);
    boolean canHaveRestrictedProfile(int userId);
    int getUserSerialNumber(int userId);
+1 −27
Original line number Diff line number Diff line
@@ -5265,36 +5265,10 @@ public class UserManager {
    public boolean isUserSwitcherEnabled(boolean showEvenIfNotActionable) {

        try {
            if (!mService.isUserSwitcherEnabled(mUserId)) {
                return false;
            }
            return mService.isUserSwitcherEnabled(showEvenIfNotActionable, mUserId);
        } catch (RemoteException re) {
            throw re.rethrowFromSystemServer();
        }

        // The feature is enabled. But is it worth showing?
        return showEvenIfNotActionable
                || areThereUsersToWhichToSwitch() // There are switchable users.
                || !hasUserRestrictionForUser(DISALLOW_ADD_USER, mUserId); // New users can be added
    }

    /** Returns whether there are any users (other than the current user) to which to switch. */
    @RequiresPermission(anyOf = {
            android.Manifest.permission.MANAGE_USERS,
            android.Manifest.permission.CREATE_USERS
    })
    private boolean areThereUsersToWhichToSwitch() {
        final List<UserInfo> users = getAliveUsers();
        if (users == null) {
            return false;
        }
        int switchableUserCount = 0;
        for (UserInfo user : users) {
            if (user.supportsSwitchToByUser()) {
                ++switchableUserCount;
            }
        }
        return switchableUserCount > 1;
    }

    /**
+30 −2
Original line number Diff line number Diff line
@@ -2048,8 +2048,8 @@ public class UserManagerService extends IUserManager.Stub {
        }
    }

    @Override
    public boolean isUserSwitcherEnabled(@UserIdInt int mUserId) {
    @VisibleForTesting
    boolean isUserSwitcherEnabled(@UserIdInt int mUserId) {
        boolean multiUserSettingOn = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.USER_SWITCHER_ENABLED,
                Resources.getSystem().getBoolean(com.android.internal
@@ -2061,6 +2061,33 @@ public class UserManagerService extends IUserManager.Stub {
                && multiUserSettingOn;
    }

    @Override
    public boolean isUserSwitcherEnabled(boolean showEvenIfNotActionable,
            @UserIdInt int mUserId) {
        if (!isUserSwitcherEnabled(mUserId)) {
            return false;
        }
        // The feature is enabled. But is it worth showing?
        return showEvenIfNotActionable
                || !hasUserRestriction(UserManager.DISALLOW_ADD_USER, mUserId) // Can add new user
                || areThereMultipleSwitchableUsers(); // There are switchable users
    }

    /** Returns true if there is more than one user that can be switched to. */
    private boolean areThereMultipleSwitchableUsers() {
        List<UserInfo> aliveUsers = getUsers(true, true, true);
        boolean isAnyAliveUser = false;
        for (UserInfo userInfo : aliveUsers) {
            if (userInfo.supportsSwitchToByUser()) {
                if (isAnyAliveUser) {
                    return true;
                }
                isAnyAliveUser = true;
            }
        }
        return false;
    }

    @Override
    public boolean isRestricted(@UserIdInt int userId) {
        if (userId != UserHandle.getCallingUserId()) {
@@ -7072,4 +7099,5 @@ public class UserManagerService extends IUserManager.Stub {
        }
        return mAmInternal;
    }

}
+19 −0
Original line number Diff line number Diff line
@@ -216,6 +216,25 @@ public class UserManagerServiceTest {
        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
    }

    @Test
    public void assertIsUserSwitcherEnabled()  throws Exception {
        int userId = ActivityManager.getCurrentUser();
        setMaxSupportedUsers(8);
        assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isTrue();

        setUserSwitch(false);
        assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();

        setUserSwitch(true);
        assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isTrue();

        mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, true, userId);
        assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isFalse();

        mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, false, userId);
        setMaxSupportedUsers(1);
        assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
    }

    @Test
    public void assertIsUserSwitcherEnabledOnShowMultiuserUI()  throws Exception {