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

Commit 2e00a285 authored by Tetiana Meronyk's avatar Tetiana Meronyk
Browse files

Move part of UserManager method isUserSwitcherEnabled to UserManagerService

Bug: 242812503
Test: atest UserManagerServiceTest
Change-Id: I513ba7a9060e3fd5bca365f8354850ca1cfce542
parent 0b28238d
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 {