From 8ca17560e50c419ad9121530b41d52e448be20b9 Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Tue, 23 Nov 2021 14:55:28 -0800 Subject: [PATCH] Use UM.canAddMoreUsers and UM.isUserTypeEnabled Settings shouldn't allow creating users if the type is diabled, and it shouldn't allow creating more of a particular user type if no more can be created (even if more can be created of other user types). Previously, Settings didn't take into account the user type when querying whether more users could be created. Bug: 192577100 Test: com.android.settings.users.UserSettingsTest Change-Id: I065478fd14779f528be4edce8ae215391a752ef4 --- .../android/settings/users/UserCapabilities.java | 14 ++++++++++---- src/com/android/settings/users/UserSettings.java | 6 +++++- .../android/settings/users/UserSettingsTest.java | 14 +++++++++----- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java index 459a880964f..7af6c645f66 100644 --- a/src/com/android/settings/users/UserCapabilities.java +++ b/src/com/android/settings/users/UserCapabilities.java @@ -58,7 +58,9 @@ public class UserCapabilities { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( Context.DEVICE_POLICY_SERVICE); // No restricted profiles for tablets with a device owner, or phones. - if (dpm.isDeviceManaged() || Utils.isVoiceCapable(context)) { + if (dpm.isDeviceManaged() + || Utils.isVoiceCapable(context) + || !userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_RESTRICTED)) { caps.mCanAddRestrictedProfile = false; } caps.updateAddUserCapabilities(context); @@ -76,15 +78,19 @@ public class UserCapabilities { mDisallowAddUser = (mEnforcedAdmin != null || hasBaseUserRestriction); mUserSwitcherEnabled = userManager.isUserSwitcherEnabled(); mCanAddUser = true; - if (!mIsAdmin || UserManager.getMaxSupportedUsers() < 2 + if (!mIsAdmin + || UserManager.getMaxSupportedUsers() < 2 || !UserManager.supportsMultipleUsers() - || mDisallowAddUser) { + || mDisallowAddUser + || (!userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_SECONDARY) + && !mCanAddRestrictedProfile)) { mCanAddUser = false; } final boolean canAddUsersWhenLocked = mIsAdmin || Settings.Global.getInt( context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1; - mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked; + mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked + && userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_GUEST); mDisallowSwitchUser = userManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH); } diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 23cdaf987f7..de547c7dddb 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -1073,6 +1073,7 @@ public class UserSettings extends SettingsPreferenceFragment private void updateAddGuest(Context context, boolean isGuestAlreadyCreated) { if (!isGuestAlreadyCreated && mUserCaps.mCanAddGuest + && mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_GUEST) && WizardManagerHelper.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) { mAddGuest.setVisible(true); @@ -1097,7 +1098,10 @@ public class UserSettings extends SettingsPreferenceFragment && mUserCaps.mUserSwitcherEnabled) { mAddUser.setVisible(true); mAddUser.setSelectable(true); - final boolean canAddMoreUsers = mUserManager.canAddMoreUsers(); + final boolean canAddMoreUsers = + mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_SECONDARY) + || (mUserCaps.mCanAddRestrictedProfile + && mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_RESTRICTED)); mAddUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow()); if (!canAddMoreUsers) { mAddUser.setSummary( diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java index 299e054c6fc..9d357977a6c 100644 --- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java @@ -24,6 +24,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.notNull; import static org.mockito.Mockito.doReturn; @@ -258,7 +259,8 @@ public class UserSettingsTest { @Test public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() { mUserCapabilities.mCanAddUser = true; - doReturn(true).when(mUserManager).canAddMoreUsers(); + doReturn(true) + .when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_SECONDARY)); doReturn(true).when(mAddUserPreference).isEnabled(); doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability(); @@ -274,7 +276,8 @@ public class UserSettingsTest { @Test public void updateUserList_canAddGuestAndSwitchUser_shouldShowAddGuest() { mUserCapabilities.mCanAddGuest = true; - doReturn(true).when(mUserManager).canAddMoreUsers(); + doReturn(true) + .when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST)); doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability(); mFragment.updateUserList(); @@ -288,7 +291,7 @@ public class UserSettingsTest { @Test public void updateUserList_cannotSwitchUser_shouldDisableAddUser() { mUserCapabilities.mCanAddUser = true; - doReturn(true).when(mUserManager).canAddMoreUsers(); + doReturn(true).when(mUserManager).canAddMoreUsers(anyString()); doReturn(true).when(mAddUserPreference).isEnabled(); doReturn(SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED) .when(mUserManager).getUserSwitchability(); @@ -304,7 +307,7 @@ public class UserSettingsTest { @Test public void updateUserList_canNotAddMoreUsers_shouldDisableAddUserWithSummary() { mUserCapabilities.mCanAddUser = true; - doReturn(false).when(mUserManager).canAddMoreUsers(); + doReturn(false).when(mUserManager).canAddMoreUsers(anyString()); doReturn(false).when(mAddUserPreference).isEnabled(); doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability(); doReturn(4).when(mFragment).getRealUsersCount(); @@ -320,7 +323,8 @@ public class UserSettingsTest { @Test public void updateUserList_cannotSwitchUser_shouldDisableAddGuest() { mUserCapabilities.mCanAddGuest = true; - doReturn(true).when(mUserManager).canAddMoreUsers(); + doReturn(true) + .when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST)); doReturn(SWITCHABILITY_STATUS_USER_IN_CALL).when(mUserManager).getUserSwitchability(); mFragment.updateUserList();