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,