Loading core/java/android/os/IUserManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading core/java/android/os/UserManager.java +1 −27 Original line number Diff line number Diff line Loading @@ -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; } /** Loading services/core/java/com/android/server/pm/UserManagerService.java +30 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) { Loading Loading @@ -7072,4 +7099,5 @@ public class UserManagerService extends IUserManager.Stub { } return mAmInternal; } } services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading
core/java/android/os/IUserManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
core/java/android/os/UserManager.java +1 −27 Original line number Diff line number Diff line Loading @@ -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; } /** Loading
services/core/java/com/android/server/pm/UserManagerService.java +30 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) { Loading Loading @@ -7072,4 +7099,5 @@ public class UserManagerService extends IUserManager.Stub { } return mAmInternal; } }
services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading