Loading aconfig/settings_desktop_flag_declarations.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -10,3 +10,10 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "hide_user_list_for_non_admins" namespace: "desktop_users_and_accounts" description: "Controls whether to hide the user list in Settings for non-admins." bug: "406686772" } No newline at end of file src/com/android/settings/users/UserSettings.java +12 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.users; import static com.android.settings.flags.Flags.hideUserListForNonAdmins; import static com.android.settingslib.Utils.getColorAttrDefaultColor; import android.Manifest; Loading Loading @@ -1304,12 +1305,23 @@ public class UserSettings extends SettingsPreferenceFragment boolean canOpenUserDetails = isCurrentUserAdmin() || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser); boolean shouldShowOnlySelf = hideUserListForNonAdmins() && !isCurrentUserAdmin() && getPrefContext() .getResources() .getBoolean( com.android.internal.R.bool .config_userSwitchingMustGoThroughLoginScreen); for (UserInfo user : users) { if (user.isGuest()) { // Guest user is added to guest category via updateGuestCategory // and not to user list so skip guest here continue; } if (shouldShowOnlySelf && user.id != UserHandle.myUserId()) { continue; } UserPreference pref; if (user.id == UserHandle.myUserId()) { pref = mMePreference; Loading tests/robotests/src/com/android/settings/users/UserSettingsTest.java +83 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.os.UserManager.SWITCHABILITY_STATUS_OK; import static android.os.UserManager.SWITCHABILITY_STATUS_USER_IN_CALL; import static android.os.UserManager.SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED; import static com.android.settings.flags.Flags.FLAG_HIDE_USER_LIST_FOR_NON_ADMINS; import static com.android.settings.users.UserSettings.DIALOG_CONFIRM_REMOVE; import static com.android.settings.users.UserSettings.REQUEST_DELETE_USER; Loading Loading @@ -57,10 +58,13 @@ import android.os.Bundle; import android.os.Looper; import android.os.UserHandle; import android.os.UserManager; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.text.SpannableStringBuilder; import android.view.Menu; Loading Loading @@ -163,6 +167,8 @@ public class UserSettingsTest { @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Before public void setUp() { MockitoAnnotations.initMocks(this); Loading Loading @@ -991,6 +997,83 @@ public class UserSettingsTest { verify(mUserManager, times(2)).getAliveUsers(); } @Test @EnableFlags(FLAG_HIDE_USER_LIST_FOR_NON_ADMINS) public void updateUserList_nonAdminUsersWithSwitchingDisabledAndFeatureEnabled_userListIsHidden() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen, Boolean.TRUE); mUserCapabilities.mIsAdmin = false; givenUsers(getAdminUser(false), getSecondaryUser(true)); mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(1)).addPreference(captor.capture()); UserPreference secondaryPref = captor.getAllValues().get(0); assertThat(secondaryPref).isSameInstanceAs(mMePreference); } @Test @EnableFlags(FLAG_HIDE_USER_LIST_FOR_NON_ADMINS) public void updateUserList_adminUsersWithSwitchingDisabledAndFeatureEnabled_userListIsShown() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen, Boolean.TRUE); mUserCapabilities.mIsAdmin = true; givenUsers(getAdminUser(true), getSecondaryUser(false)); mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(2)).addPreference(captor.capture()); List<UserPreference> userPrefs = captor.getAllValues(); UserPreference adminPref = userPrefs.get(0); UserPreference secondaryPref = userPrefs.get(1); assertThat(userPrefs.size()).isEqualTo(2); assertThat(adminPref).isSameInstanceAs(mMePreference); assertThat(secondaryPref.getUserId()).isEqualTo(INACTIVE_SECONDARY_USER_ID); assertThat(secondaryPref.getTitle()).isEqualTo(SECONDARY_USER_NAME); assertThat(secondaryPref.getIcon()).isNotNull(); assertThat(secondaryPref.getKey()).isEqualTo("id=" + INACTIVE_SECONDARY_USER_ID); assertThat(secondaryPref.isEnabled()).isEqualTo(true); assertThat(secondaryPref.isSelectable()).isEqualTo(true); assertThat(secondaryPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment); } @Test @DisableFlags(FLAG_HIDE_USER_LIST_FOR_NON_ADMINS) public void updateUserList_nonAdminUsersWithSwitchingDisabledAndFeatureDisabled_userListIsShown() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen, Boolean.TRUE); mUserCapabilities.mIsAdmin = false; givenUsers(getAdminUser(false), getSecondaryUser(true)); mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(2)).addPreference(captor.capture()); List<UserPreference> userPrefs = captor.getAllValues(); UserPreference secondaryPref = userPrefs.get(0); UserPreference adminPref = userPrefs.get(1); assertThat(secondaryPref).isSameInstanceAs(mMePreference); assertThat(adminPref.getUserId()).isEqualTo(INACTIVE_ADMIN_USER_ID); assertThat(adminPref.getTitle()).isEqualTo(ADMIN_USER_NAME); assertThat(adminPref.getIcon()).isNotNull(); assertThat(adminPref.getKey()).isEqualTo("id=" + INACTIVE_ADMIN_USER_ID); assertThat(adminPref.isEnabled()).isEqualTo(true); assertThat(adminPref.isSelectable()).isEqualTo(true); assertThat(adminPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment); } @Test public void onPreferenceClick_addGuestClicked_createGuestAndOpenDetails() { UserInfo createdGuest = getGuest(false); Loading Loading
aconfig/settings_desktop_flag_declarations.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -10,3 +10,10 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "hide_user_list_for_non_admins" namespace: "desktop_users_and_accounts" description: "Controls whether to hide the user list in Settings for non-admins." bug: "406686772" } No newline at end of file
src/com/android/settings/users/UserSettings.java +12 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.users; import static com.android.settings.flags.Flags.hideUserListForNonAdmins; import static com.android.settingslib.Utils.getColorAttrDefaultColor; import android.Manifest; Loading Loading @@ -1304,12 +1305,23 @@ public class UserSettings extends SettingsPreferenceFragment boolean canOpenUserDetails = isCurrentUserAdmin() || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser); boolean shouldShowOnlySelf = hideUserListForNonAdmins() && !isCurrentUserAdmin() && getPrefContext() .getResources() .getBoolean( com.android.internal.R.bool .config_userSwitchingMustGoThroughLoginScreen); for (UserInfo user : users) { if (user.isGuest()) { // Guest user is added to guest category via updateGuestCategory // and not to user list so skip guest here continue; } if (shouldShowOnlySelf && user.id != UserHandle.myUserId()) { continue; } UserPreference pref; if (user.id == UserHandle.myUserId()) { pref = mMePreference; Loading
tests/robotests/src/com/android/settings/users/UserSettingsTest.java +83 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.os.UserManager.SWITCHABILITY_STATUS_OK; import static android.os.UserManager.SWITCHABILITY_STATUS_USER_IN_CALL; import static android.os.UserManager.SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED; import static com.android.settings.flags.Flags.FLAG_HIDE_USER_LIST_FOR_NON_ADMINS; import static com.android.settings.users.UserSettings.DIALOG_CONFIRM_REMOVE; import static com.android.settings.users.UserSettings.REQUEST_DELETE_USER; Loading Loading @@ -57,10 +58,13 @@ import android.os.Bundle; import android.os.Looper; import android.os.UserHandle; import android.os.UserManager; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.text.SpannableStringBuilder; import android.view.Menu; Loading Loading @@ -163,6 +167,8 @@ public class UserSettingsTest { @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Before public void setUp() { MockitoAnnotations.initMocks(this); Loading Loading @@ -991,6 +997,83 @@ public class UserSettingsTest { verify(mUserManager, times(2)).getAliveUsers(); } @Test @EnableFlags(FLAG_HIDE_USER_LIST_FOR_NON_ADMINS) public void updateUserList_nonAdminUsersWithSwitchingDisabledAndFeatureEnabled_userListIsHidden() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen, Boolean.TRUE); mUserCapabilities.mIsAdmin = false; givenUsers(getAdminUser(false), getSecondaryUser(true)); mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(1)).addPreference(captor.capture()); UserPreference secondaryPref = captor.getAllValues().get(0); assertThat(secondaryPref).isSameInstanceAs(mMePreference); } @Test @EnableFlags(FLAG_HIDE_USER_LIST_FOR_NON_ADMINS) public void updateUserList_adminUsersWithSwitchingDisabledAndFeatureEnabled_userListIsShown() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen, Boolean.TRUE); mUserCapabilities.mIsAdmin = true; givenUsers(getAdminUser(true), getSecondaryUser(false)); mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(2)).addPreference(captor.capture()); List<UserPreference> userPrefs = captor.getAllValues(); UserPreference adminPref = userPrefs.get(0); UserPreference secondaryPref = userPrefs.get(1); assertThat(userPrefs.size()).isEqualTo(2); assertThat(adminPref).isSameInstanceAs(mMePreference); assertThat(secondaryPref.getUserId()).isEqualTo(INACTIVE_SECONDARY_USER_ID); assertThat(secondaryPref.getTitle()).isEqualTo(SECONDARY_USER_NAME); assertThat(secondaryPref.getIcon()).isNotNull(); assertThat(secondaryPref.getKey()).isEqualTo("id=" + INACTIVE_SECONDARY_USER_ID); assertThat(secondaryPref.isEnabled()).isEqualTo(true); assertThat(secondaryPref.isSelectable()).isEqualTo(true); assertThat(secondaryPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment); } @Test @DisableFlags(FLAG_HIDE_USER_LIST_FOR_NON_ADMINS) public void updateUserList_nonAdminUsersWithSwitchingDisabledAndFeatureDisabled_userListIsShown() { SettingsShadowResources.overrideResource( com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen, Boolean.TRUE); mUserCapabilities.mIsAdmin = false; givenUsers(getAdminUser(false), getSecondaryUser(true)); mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(2)).addPreference(captor.capture()); List<UserPreference> userPrefs = captor.getAllValues(); UserPreference secondaryPref = userPrefs.get(0); UserPreference adminPref = userPrefs.get(1); assertThat(secondaryPref).isSameInstanceAs(mMePreference); assertThat(adminPref.getUserId()).isEqualTo(INACTIVE_ADMIN_USER_ID); assertThat(adminPref.getTitle()).isEqualTo(ADMIN_USER_NAME); assertThat(adminPref.getIcon()).isNotNull(); assertThat(adminPref.getKey()).isEqualTo("id=" + INACTIVE_ADMIN_USER_ID); assertThat(adminPref.isEnabled()).isEqualTo(true); assertThat(adminPref.isSelectable()).isEqualTo(true); assertThat(adminPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment); } @Test public void onPreferenceClick_addGuestClicked_createGuestAndOpenDetails() { UserInfo createdGuest = getGuest(false); Loading