Merge "Use UM.canAddMoreUsers and UM.isUserTypeEnabled"
diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java
index 459a880..7af6c64 100644
--- a/src/com/android/settings/users/UserCapabilities.java
+++ b/src/com/android/settings/users/UserCapabilities.java
@@ -58,7 +58,9 @@
         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 @@
         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 92d1bae..096b6ee 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -1080,6 +1080,7 @@
 
     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);
@@ -1104,7 +1105,10 @@
                 && 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 299e054..9d35797 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 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 @@
     @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 @@
     @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 @@
     @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 @@
     @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 @@
     @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();