Merge "Don't hide "Add user" when disallowed by admin"
diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java
index 473c9c5..459a880 100644
--- a/src/com/android/settings/users/UserCapabilities.java
+++ b/src/com/android/settings/users/UserCapabilities.java
@@ -118,6 +118,8 @@
", mDisallowAddUser=" + mDisallowAddUser +
", mEnforcedAdmin=" + mEnforcedAdmin +
", mDisallowSwitchUser=" + mDisallowSwitchUser +
+ ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin +
+ ", mUserSwitcherEnabled=" + mUserSwitcherEnabled +
'}';
}
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 21552ce..5a83f34 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -271,18 +271,7 @@
mMePreference.setSummary(R.string.user_admin);
}
mAddUser = (RestrictedPreference) findPreference(KEY_ADD_USER);
- mAddUser.useAdminDisabledSummary(false);
- // Determine if add user/profile button should be visible
- if (mUserCaps.mCanAddUser && Utils.isDeviceProvisioned(activity)) {
- mAddUser.setVisible(true);
- mAddUser.setOnPreferenceClickListener(this);
- // change label to only mention user, if restricted profiles are not supported
- if (!mUserCaps.mCanAddRestrictedProfile) {
- mAddUser.setTitle(R.string.user_add_user_menu);
- }
- } else {
- mAddUser.setVisible(false);
- }
+ mAddUser.setOnPreferenceClickListener(this);
activity.registerReceiverAsUser(
mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler);
@@ -968,9 +957,10 @@
mAddUserWhenLockedPreferenceController.getPreferenceKey());
mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
mMultiUserFooterPreferenceController.updateState(null /* preference */);
- mAddUser.setVisible(mUserCaps.mCanAddUser && Utils.isDeviceProvisioned(context)
- && mUserCaps.mUserSwitcherEnabled);
mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
+
+ updateAddUser(context);
+
if (!mUserCaps.mUserSwitcherEnabled) {
return;
}
@@ -980,10 +970,13 @@
mUserListCategory.addPreference(userPreference);
}
- // Append Add user to the end of the list
- if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin) &&
- Utils.isDeviceProvisioned(context)) {
- boolean moreUsers = mUserManager.canAddMoreUsers();
+ }
+
+ private void updateAddUser(Context context) {
+ if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
+ && Utils.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) {
+ mAddUser.setVisible(true);
+ final boolean moreUsers = mUserManager.canAddMoreUsers();
mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());
if (!moreUsers) {
mAddUser.setSummary(getString(R.string.user_add_max_count, getMaxRealUsers()));
@@ -994,6 +987,8 @@
mAddUser.setDisabledByAdmin(
mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
}
+ } else {
+ mAddUser.setVisible(false);
}
}
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index b682388..1a98238 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -57,7 +57,6 @@
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.AdditionalMatchers;
@@ -101,15 +100,23 @@
MockitoAnnotations.initMocks(this);
mActivity = spy(ActivityController.of(new FragmentActivity()).get());
mContext = spy(RuntimeEnvironment.application);
+ mUserCapabilities = UserCapabilities.create(mContext);
+
mFragment = spy(new UserSettings());
ReflectionHelpers.setField(mFragment, "mAddUserWhenLockedPreferenceController",
mock(AddUserWhenLockedPreferenceController.class));
ReflectionHelpers.setField(mFragment, "mMultiUserFooterPreferenceController",
mock(MultiUserFooterPreferenceController.class));
- mUserCapabilities = UserCapabilities.create(mContext);
+ ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+ ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
+ ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
+ ReflectionHelpers.setField(mFragment, "mAddingUser", false);
+ mFragment.mMePreference = mMePreference;
+
when((Object) mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
doReturn(mActivity).when(mFragment).getActivity();
doReturn(mContext).when(mFragment).getContext();
+ doReturn(mMockPreferenceManager).when(mFragment).getPreferenceManager();
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
mProvisioned = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0);
@@ -157,10 +164,6 @@
mUserCapabilities.mDisallowSwitchUser = false;
mUserCapabilities.mUserSwitcherEnabled = true;
- ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
- ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
- ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
- mFragment.mMePreference = mMePreference;
mFragment.mUserListCategory = userListCategory;
mFragment.mAddUser = addUser;
@@ -186,11 +189,6 @@
mUserCapabilities.mDisallowAddUser = false;
mUserCapabilities.mUserSwitcherEnabled = true;
- ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
- ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
- ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
- ReflectionHelpers.setField(mFragment, "mAddingUser", false);
- mFragment.mMePreference = mMePreference;
mFragment.mUserListCategory = userListCategory;
mFragment.mAddUser = addUser;
@@ -206,7 +204,6 @@
}
@Test
- @Ignore
public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 1);
@@ -216,11 +213,6 @@
mUserCapabilities.mDisallowAddUser = true;
mUserCapabilities.mUserSwitcherEnabled = true;
- ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
- ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
- ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
- ReflectionHelpers.setField(mFragment, "mAddingUser", false);
- mFragment.mMePreference = mMePreference;
mFragment.mUserListCategory = mock(PreferenceCategory.class);
mFragment.mAddUser = addUser;
@@ -251,9 +243,6 @@
doReturn(true).when(mUserManager).canSwitchUsers();
mUserCapabilities.mIsAdmin = false;
- ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
- ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
-
Menu menu = mock(Menu.class);
MenuItem menuItem = mock(MenuItem.class);
final String title = "title";
@@ -279,9 +268,6 @@
doReturn(true).when(mUserManager).canSwitchUsers();
mUserCapabilities.mIsAdmin = false;
- ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
- ReflectionHelpers.setField(mFragment, "mUserManager", mock(UserManager.class));
-
Menu menu = mock(Menu.class);
MenuItem menuItem = mock(MenuItem.class);
final String title = "title";
@@ -301,7 +287,6 @@
}
@Test
- @Ignore
public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 1);
@@ -311,13 +296,8 @@
mUserCapabilities.mDisallowAddUser = false;
mUserCapabilities.mUserSwitcherEnabled = true;
- ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
- ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
- ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
- ReflectionHelpers.setField(mFragment, "mAddingUser", false);
- mFragment.mMePreference = mMePreference;
- mFragment.mUserListCategory = mock(PreferenceCategory.class);
mFragment.mAddUser = addUser;
+ mFragment.mUserListCategory = mock(PreferenceCategory.class);
doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
doReturn("Test summary").when(mFragment).getString(anyInt(), anyInt());
@@ -326,4 +306,26 @@
verify(addUser).setVisible(true);
}
+
+ @Test
+ public void updateUserList_addUserDisallowedByAdmin_shouldShowAddUserDisabled() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.DEVICE_PROVISIONED, 1);
+ final RestrictedPreference addUser = mock(RestrictedPreference.class);
+
+ mUserCapabilities.mCanAddUser = false;
+ mUserCapabilities.mDisallowAddUser = true;
+ mUserCapabilities.mDisallowAddUserSetByAdmin = true;
+ mUserCapabilities.mUserSwitcherEnabled = true;
+
+ mFragment.mUserListCategory = mock(PreferenceCategory.class);
+ mFragment.mAddUser = addUser;
+
+ doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
+
+ mFragment.updateUserList();
+
+ verify(addUser).setVisible(true);
+ assertThat(addUser.isEnabled()).isFalse();
+ }
}