Don't hide "Add user" when disallowed by admin
Bug: 125226170 Test: atest tests/robotests/src/com/android/settings/users/UserSettingsTest.java Test: manual, with TestDPC Change-Id: I347fae04030e04325a5ee5c634f782e554ece263
This commit is contained in:
@@ -118,6 +118,8 @@ public class UserCapabilities {
|
|||||||
", mDisallowAddUser=" + mDisallowAddUser +
|
", mDisallowAddUser=" + mDisallowAddUser +
|
||||||
", mEnforcedAdmin=" + mEnforcedAdmin +
|
", mEnforcedAdmin=" + mEnforcedAdmin +
|
||||||
", mDisallowSwitchUser=" + mDisallowSwitchUser +
|
", mDisallowSwitchUser=" + mDisallowSwitchUser +
|
||||||
|
", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin +
|
||||||
|
", mUserSwitcherEnabled=" + mUserSwitcherEnabled +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -271,18 +271,7 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
mMePreference.setSummary(R.string.user_admin);
|
mMePreference.setSummary(R.string.user_admin);
|
||||||
}
|
}
|
||||||
mAddUser = (RestrictedPreference) findPreference(KEY_ADD_USER);
|
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);
|
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(
|
activity.registerReceiverAsUser(
|
||||||
mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler);
|
mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler);
|
||||||
@@ -968,9 +957,10 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
mAddUserWhenLockedPreferenceController.getPreferenceKey());
|
mAddUserWhenLockedPreferenceController.getPreferenceKey());
|
||||||
mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
|
mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
|
||||||
mMultiUserFooterPreferenceController.updateState(null /* preference */);
|
mMultiUserFooterPreferenceController.updateState(null /* preference */);
|
||||||
mAddUser.setVisible(mUserCaps.mCanAddUser && Utils.isDeviceProvisioned(context)
|
|
||||||
&& mUserCaps.mUserSwitcherEnabled);
|
|
||||||
mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
|
mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
|
||||||
|
|
||||||
|
updateAddUser(context);
|
||||||
|
|
||||||
if (!mUserCaps.mUserSwitcherEnabled) {
|
if (!mUserCaps.mUserSwitcherEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -980,10 +970,13 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
mUserListCategory.addPreference(userPreference);
|
mUserListCategory.addPreference(userPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append Add user to the end of the list
|
}
|
||||||
if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin) &&
|
|
||||||
Utils.isDeviceProvisioned(context)) {
|
private void updateAddUser(Context context) {
|
||||||
boolean moreUsers = mUserManager.canAddMoreUsers();
|
if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
|
||||||
|
&& Utils.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) {
|
||||||
|
mAddUser.setVisible(true);
|
||||||
|
final boolean moreUsers = mUserManager.canAddMoreUsers();
|
||||||
mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());
|
mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());
|
||||||
if (!moreUsers) {
|
if (!moreUsers) {
|
||||||
mAddUser.setSummary(getString(R.string.user_add_max_count, getMaxRealUsers()));
|
mAddUser.setSummary(getString(R.string.user_add_max_count, getMaxRealUsers()));
|
||||||
@@ -994,6 +987,8 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
mAddUser.setDisabledByAdmin(
|
mAddUser.setDisabledByAdmin(
|
||||||
mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
|
mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
mAddUser.setVisible(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,7 +57,6 @@ import com.android.settingslib.RestrictedPreference;
|
|||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.AdditionalMatchers;
|
import org.mockito.AdditionalMatchers;
|
||||||
@@ -101,15 +100,23 @@ public class UserSettingsTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mActivity = spy(ActivityController.of(new FragmentActivity()).get());
|
mActivity = spy(ActivityController.of(new FragmentActivity()).get());
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
|
mUserCapabilities = UserCapabilities.create(mContext);
|
||||||
|
|
||||||
mFragment = spy(new UserSettings());
|
mFragment = spy(new UserSettings());
|
||||||
ReflectionHelpers.setField(mFragment, "mAddUserWhenLockedPreferenceController",
|
ReflectionHelpers.setField(mFragment, "mAddUserWhenLockedPreferenceController",
|
||||||
mock(AddUserWhenLockedPreferenceController.class));
|
mock(AddUserWhenLockedPreferenceController.class));
|
||||||
ReflectionHelpers.setField(mFragment, "mMultiUserFooterPreferenceController",
|
ReflectionHelpers.setField(mFragment, "mMultiUserFooterPreferenceController",
|
||||||
mock(MultiUserFooterPreferenceController.class));
|
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);
|
when((Object) mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
|
||||||
doReturn(mActivity).when(mFragment).getActivity();
|
doReturn(mActivity).when(mFragment).getActivity();
|
||||||
doReturn(mContext).when(mFragment).getContext();
|
doReturn(mContext).when(mFragment).getContext();
|
||||||
|
doReturn(mMockPreferenceManager).when(mFragment).getPreferenceManager();
|
||||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
mProvisioned = Settings.Global.getInt(mContext.getContentResolver(),
|
mProvisioned = Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
Settings.Global.DEVICE_PROVISIONED, 0);
|
Settings.Global.DEVICE_PROVISIONED, 0);
|
||||||
@@ -157,10 +164,6 @@ public class UserSettingsTest {
|
|||||||
mUserCapabilities.mDisallowSwitchUser = false;
|
mUserCapabilities.mDisallowSwitchUser = false;
|
||||||
mUserCapabilities.mUserSwitcherEnabled = true;
|
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.mUserListCategory = userListCategory;
|
||||||
mFragment.mAddUser = addUser;
|
mFragment.mAddUser = addUser;
|
||||||
|
|
||||||
@@ -186,11 +189,6 @@ public class UserSettingsTest {
|
|||||||
mUserCapabilities.mDisallowAddUser = false;
|
mUserCapabilities.mDisallowAddUser = false;
|
||||||
mUserCapabilities.mUserSwitcherEnabled = 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 = userListCategory;
|
mFragment.mUserListCategory = userListCategory;
|
||||||
mFragment.mAddUser = addUser;
|
mFragment.mAddUser = addUser;
|
||||||
|
|
||||||
@@ -206,7 +204,6 @@ public class UserSettingsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
|
||||||
public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() {
|
public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(mContext.getContentResolver(),
|
||||||
Settings.Global.DEVICE_PROVISIONED, 1);
|
Settings.Global.DEVICE_PROVISIONED, 1);
|
||||||
@@ -216,11 +213,6 @@ public class UserSettingsTest {
|
|||||||
mUserCapabilities.mDisallowAddUser = true;
|
mUserCapabilities.mDisallowAddUser = true;
|
||||||
mUserCapabilities.mUserSwitcherEnabled = 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.mUserListCategory = mock(PreferenceCategory.class);
|
||||||
mFragment.mAddUser = addUser;
|
mFragment.mAddUser = addUser;
|
||||||
|
|
||||||
@@ -251,9 +243,6 @@ public class UserSettingsTest {
|
|||||||
doReturn(true).when(mUserManager).canSwitchUsers();
|
doReturn(true).when(mUserManager).canSwitchUsers();
|
||||||
mUserCapabilities.mIsAdmin = false;
|
mUserCapabilities.mIsAdmin = false;
|
||||||
|
|
||||||
ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
|
|
||||||
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
|
|
||||||
|
|
||||||
Menu menu = mock(Menu.class);
|
Menu menu = mock(Menu.class);
|
||||||
MenuItem menuItem = mock(MenuItem.class);
|
MenuItem menuItem = mock(MenuItem.class);
|
||||||
final String title = "title";
|
final String title = "title";
|
||||||
@@ -279,9 +268,6 @@ public class UserSettingsTest {
|
|||||||
doReturn(true).when(mUserManager).canSwitchUsers();
|
doReturn(true).when(mUserManager).canSwitchUsers();
|
||||||
mUserCapabilities.mIsAdmin = false;
|
mUserCapabilities.mIsAdmin = false;
|
||||||
|
|
||||||
ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
|
|
||||||
ReflectionHelpers.setField(mFragment, "mUserManager", mock(UserManager.class));
|
|
||||||
|
|
||||||
Menu menu = mock(Menu.class);
|
Menu menu = mock(Menu.class);
|
||||||
MenuItem menuItem = mock(MenuItem.class);
|
MenuItem menuItem = mock(MenuItem.class);
|
||||||
final String title = "title";
|
final String title = "title";
|
||||||
@@ -301,7 +287,6 @@ public class UserSettingsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
|
||||||
public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
|
public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(mContext.getContentResolver(),
|
||||||
Settings.Global.DEVICE_PROVISIONED, 1);
|
Settings.Global.DEVICE_PROVISIONED, 1);
|
||||||
@@ -311,13 +296,8 @@ public class UserSettingsTest {
|
|||||||
mUserCapabilities.mDisallowAddUser = false;
|
mUserCapabilities.mDisallowAddUser = false;
|
||||||
mUserCapabilities.mUserSwitcherEnabled = 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;
|
mFragment.mAddUser = addUser;
|
||||||
|
mFragment.mUserListCategory = mock(PreferenceCategory.class);
|
||||||
|
|
||||||
doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
|
doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
|
||||||
doReturn("Test summary").when(mFragment).getString(anyInt(), anyInt());
|
doReturn("Test summary").when(mFragment).getString(anyInt(), anyInt());
|
||||||
@@ -326,4 +306,26 @@ public class UserSettingsTest {
|
|||||||
|
|
||||||
verify(addUser).setVisible(true);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user