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();