From b61949c841a1bb489f1e1b94295d704fd65a1e3e Mon Sep 17 00:00:00 2001 From: Nikhil Kumar Date: Thu, 24 Nov 2022 19:16:55 +0000 Subject: [PATCH] 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 --- .../settings/users/UserDetailsSettings.java | 8 +++-- .../users/UserDetailsSettingsTest.java | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java index dc6fbd4a50b..44b41d09c1a 100644 --- a/src/com/android/settings/users/UserDetailsSettings.java +++ b/src/com/android/settings/users/UserDetailsSettings.java @@ -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; } diff --git a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java index fad30aa01d4..ff57ebca443 100644 --- a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java @@ -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,