Hide remove user option for main user in multi user settings
Added isMain() user check in UserDetailsSettings.initialize and UserDetailsSettings.canDeleteUser to hide and restrict delete user option for main user in multi user settings. Added unit tests for the same. Bug: 260200162 Test: Manual test on headless to check remove user option is not visible for the main user. Test: Run robo tests with this command: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.users.UserDetailsSettingsTest" Change-Id: Ia455611a3d0b1e0945f61f00658425b7bf6c2dae
This commit is contained in:
@@ -317,8 +317,12 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
||||
mRemoveUserPref.setTitle(R.string.user_remove_user);
|
||||
removePreference(KEY_APP_COPYING);
|
||||
}
|
||||
|
||||
// Remove preference KEY_REMOVE_USER if DISALLOW_REMOVE_USER restriction is set
|
||||
// on the current user or the user selected in user details settings is a main user.
|
||||
if (RestrictedLockUtilsInternal.hasBaseUserRestriction(context,
|
||||
UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId())) {
|
||||
UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId())
|
||||
|| mUserInfo.isMain()) {
|
||||
removePreference(KEY_REMOVE_USER);
|
||||
}
|
||||
|
||||
@@ -331,7 +335,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
||||
|
||||
@VisibleForTesting
|
||||
boolean canDeleteUser() {
|
||||
if (!mUserManager.isAdminUser()) {
|
||||
if (!mUserManager.isAdminUser() || mUserInfo.isMain()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -387,6 +387,16 @@ public class UserDetailsSettingsTest {
|
||||
verify(mFragment).removePreference(KEY_REMOVE_USER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void initialize_onMainUser_shouldNotShowRemovePreference() {
|
||||
setupSelectedMainUser();
|
||||
mUserManager.setIsAdminUser(true);
|
||||
|
||||
mFragment.initialize(mActivity, mArguments);
|
||||
|
||||
verify(mFragment).removePreference(KEY_REMOVE_USER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void initialize_disallowRemoveUserRestriction_shouldNotShowRemovePreference() {
|
||||
setupSelectedUser();
|
||||
@@ -571,10 +581,22 @@ public class UserDetailsSettingsTest {
|
||||
assertThat(result).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canDeleteUser_onMainUser_shouldReturnFalse() {
|
||||
setupSelectedMainUser();
|
||||
mUserManager.setIsAdminUser(true);
|
||||
mFragment.mUserInfo = mUserInfo;
|
||||
|
||||
boolean result = mFragment.canDeleteUser();
|
||||
|
||||
assertThat(result).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canDeleteUser_adminSelectsUser_noRestrictions_shouldReturnTrue() {
|
||||
setupSelectedUser();
|
||||
mUserManager.setIsAdminUser(true);
|
||||
mFragment.mUserInfo = mUserInfo;
|
||||
|
||||
boolean result = mFragment.canDeleteUser();
|
||||
|
||||
@@ -585,6 +607,7 @@ public class UserDetailsSettingsTest {
|
||||
public void canDeleteUser_adminSelectsUser_hasRemoveRestriction_shouldReturnFalse() {
|
||||
setupSelectedUser();
|
||||
mUserManager.setIsAdminUser(true);
|
||||
mFragment.mUserInfo = mUserInfo;
|
||||
ComponentName componentName = new ComponentName("test", "test");
|
||||
ShadowDevicePolicyManager.getShadow().setDeviceOwnerComponentOnAnyUser(componentName);
|
||||
ShadowDevicePolicyManager.getShadow().setDeviceOwnerUserId(UserHandle.myUserId());
|
||||
@@ -611,6 +634,15 @@ public class UserDetailsSettingsTest {
|
||||
mUserManager.addProfile(mUserInfo);
|
||||
}
|
||||
|
||||
private void setupSelectedMainUser() {
|
||||
mArguments.putInt("user_id", 11);
|
||||
mUserInfo = new UserInfo(11, "Jerry", null,
|
||||
UserInfo.FLAG_FULL | UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_MAIN,
|
||||
UserManager.USER_TYPE_FULL_SECONDARY);
|
||||
|
||||
mUserManager.addProfile(mUserInfo);
|
||||
}
|
||||
|
||||
private void setupSelectedGuest() {
|
||||
mArguments.putInt("user_id", 23);
|
||||
mUserInfo = new UserInfo(23, "Guest", null,
|
||||
|
Reference in New Issue
Block a user