Add UI for multiple admins on Headless

In a series of CLs under topic add_ui_for_hsum_admins UI and functionality for allowing multiple admins on HSUM build is added. In User settings and User switcher when creating a new user there is a new dialog prompting to choose admin status of the user to be created. In User details view there is a toggle that is visible to admin users that allows to modify admin status of existing users. This toggle is only applicable to full users that are not supervised, guests or a main device user.

Bug: 252790451
Test: croot && make RunSettingsRoboTests -j40 ROBOTEST_FILTER="com.android.settings.users.UserDetailsSettingsTest"
Change-Id: I447dc168be30aa614aeb3f8b71ad14a7223fd7c1
This commit is contained in:
Tetiana Meronyk
2022-11-24 16:04:16 +00:00
parent ecbb3a2933
commit e5acef9034
7 changed files with 170 additions and 11 deletions

View File

@@ -22,6 +22,7 @@ import static android.os.UserManager.SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
@@ -84,6 +85,7 @@ import java.util.List;
})
public class UserDetailsSettingsTest {
private static final String KEY_GRANT_ADMIN = "user_grant_admin";
private static final String KEY_SWITCH_USER = "switch_user";
private static final String KEY_ENABLE_TELEPHONY = "enable_calling";
private static final String KEY_REMOVE_USER = "remove_user";
@@ -103,6 +105,8 @@ public class UserDetailsSettingsTest {
@Mock
private SwitchPreference mPhonePref;
@Mock
private SwitchPreference mGrantAdminPref;
@Mock
private Preference mRemoveUserPref;
@Mock
private Preference mAppAndContentAccessPref;
@@ -144,6 +148,7 @@ public class UserDetailsSettingsTest {
doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
doReturn(mSwitchUserPref).when(mFragment).findPreference(KEY_SWITCH_USER);
doReturn(mGrantAdminPref).when(mFragment).findPreference(KEY_GRANT_ADMIN);
doReturn(mPhonePref).when(mFragment).findPreference(KEY_ENABLE_TELEPHONY);
doReturn(mRemoveUserPref).when(mFragment).findPreference(KEY_REMOVE_USER);
doReturn(mAppAndContentAccessPref)
@@ -678,6 +683,38 @@ public class UserDetailsSettingsTest {
assertThat(result).isFalse();
}
@Test
public void initialize_userSelected_shouldShowGrantAdminPref_HSUM() {
setupSelectedUser();
ShadowUserManager.setIsHeadlessSystemUserMode(true);
mFragment.initialize(mActivity, mArguments);
assertTrue(UserManager.isHeadlessSystemUserMode());
verify(mFragment, never()).removePreference(KEY_GRANT_ADMIN);
}
@Test
public void initialize_userSelected_shouldNotShowGrantAdminPref() {
setupSelectedUser();
mFragment.initialize(mActivity, mArguments);
verify(mFragment).removePreference(KEY_GRANT_ADMIN);
}
@Test
public void initialize_mainUserSelected_shouldShowGrantAdminPref_HSUM() {
setupSelectedMainUser();
ShadowUserManager.setIsHeadlessSystemUserMode(true);
mFragment.initialize(mActivity, mArguments);
verify(mFragment).removePreference(KEY_GRANT_ADMIN);
}
@Test
public void initialize_guestSelected_shouldNotShowGrantAdminPref_HSUM() {
setupSelectedGuest();
ShadowUserManager.setIsHeadlessSystemUserMode(true);
mFragment.initialize(mActivity, mArguments);
verify(mFragment).removePreference(KEY_GRANT_ADMIN);
}
private void setupSelectedUser() {
mArguments.putInt("user_id", 1);
mUserInfo = new UserInfo(1, "Tom", null,