Loading src/com/android/settings/users/UserCapabilities.java +2 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,8 @@ public class UserCapabilities { ", mDisallowAddUser=" + mDisallowAddUser + ", mEnforcedAdmin=" + mEnforcedAdmin + ", mDisallowSwitchUser=" + mDisallowSwitchUser + ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin + ", mUserSwitcherEnabled=" + mUserSwitcherEnabled + '}'; } } src/com/android/settings/users/UserSettings.java +13 −18 Original line number Diff line number Diff line Loading @@ -271,18 +271,7 @@ public class UserSettings extends SettingsPreferenceFragment 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); } activity.registerReceiverAsUser( mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler); Loading Loading @@ -968,9 +957,10 @@ public class UserSettings extends SettingsPreferenceFragment 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; } Loading @@ -980,10 +970,13 @@ public class UserSettings extends SettingsPreferenceFragment 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())); Loading @@ -994,6 +987,8 @@ public class UserSettings extends SettingsPreferenceFragment mAddUser.setDisabledByAdmin( mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null); } } else { mAddUser.setVisible(false); } } Loading tests/robotests/src/com/android/settings/users/UserSettingsTest.java +32 −30 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ import com.android.settingslib.RestrictedPreference; 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; Loading Loading @@ -101,15 +100,23 @@ public class UserSettingsTest { 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); Loading Loading @@ -157,10 +164,6 @@ public class UserSettingsTest { 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; Loading @@ -186,11 +189,6 @@ public class UserSettingsTest { 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; Loading @@ -206,7 +204,6 @@ public class UserSettingsTest { } @Test @Ignore public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); Loading @@ -216,11 +213,6 @@ public class UserSettingsTest { 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; Loading Loading @@ -251,9 +243,6 @@ public class UserSettingsTest { 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"; Loading @@ -279,9 +268,6 @@ public class UserSettingsTest { 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"; Loading @@ -301,7 +287,6 @@ public class UserSettingsTest { } @Test @Ignore public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); Loading @@ -311,13 +296,8 @@ public class UserSettingsTest { 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()); Loading @@ -326,4 +306,26 @@ public class UserSettingsTest { 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(); } } Loading
src/com/android/settings/users/UserCapabilities.java +2 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,8 @@ public class UserCapabilities { ", mDisallowAddUser=" + mDisallowAddUser + ", mEnforcedAdmin=" + mEnforcedAdmin + ", mDisallowSwitchUser=" + mDisallowSwitchUser + ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin + ", mUserSwitcherEnabled=" + mUserSwitcherEnabled + '}'; } }
src/com/android/settings/users/UserSettings.java +13 −18 Original line number Diff line number Diff line Loading @@ -271,18 +271,7 @@ public class UserSettings extends SettingsPreferenceFragment 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); } activity.registerReceiverAsUser( mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler); Loading Loading @@ -968,9 +957,10 @@ public class UserSettings extends SettingsPreferenceFragment 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; } Loading @@ -980,10 +970,13 @@ public class UserSettings extends SettingsPreferenceFragment 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())); Loading @@ -994,6 +987,8 @@ public class UserSettings extends SettingsPreferenceFragment mAddUser.setDisabledByAdmin( mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null); } } else { mAddUser.setVisible(false); } } Loading
tests/robotests/src/com/android/settings/users/UserSettingsTest.java +32 −30 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ import com.android.settingslib.RestrictedPreference; 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; Loading Loading @@ -101,15 +100,23 @@ public class UserSettingsTest { 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); Loading Loading @@ -157,10 +164,6 @@ public class UserSettingsTest { 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; Loading @@ -186,11 +189,6 @@ public class UserSettingsTest { 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; Loading @@ -206,7 +204,6 @@ public class UserSettingsTest { } @Test @Ignore public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); Loading @@ -216,11 +213,6 @@ public class UserSettingsTest { 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; Loading Loading @@ -251,9 +243,6 @@ public class UserSettingsTest { 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"; Loading @@ -279,9 +268,6 @@ public class UserSettingsTest { 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"; Loading @@ -301,7 +287,6 @@ public class UserSettingsTest { } @Test @Ignore public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); Loading @@ -311,13 +296,8 @@ public class UserSettingsTest { 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()); Loading @@ -326,4 +306,26 @@ public class UserSettingsTest { 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(); } }