Loading src/com/android/settings/users/UserSettings.java +13 −12 Original line number Diff line number Diff line Loading @@ -1196,11 +1196,19 @@ public class UserSettings extends SettingsPreferenceFragment if (context == null) { return; } final List<UserInfo> users = mUserManager.getAliveUsers() List<UserInfo> users; if (mUserCaps.mUserSwitcherEnabled) { // Only users that can be switched to should show up here. // e.g. Managed profiles appear under Accounts Settings instead .stream().filter(UserInfo::supportsSwitchToByUser) users = mUserManager.getAliveUsers().stream() .filter(UserInfo::supportsSwitchToByUser) .collect(Collectors.toList()); } else { // Only current user will be displayed in case of multi-user switch is disabled users = List.of(mUserManager.getUserInfo(context.getUserId())); } final ArrayList<Integer> missingIcons = new ArrayList<>(); final ArrayList<UserPreference> userPreferences = new ArrayList<>(); Loading Loading @@ -1276,7 +1284,6 @@ public class UserSettings extends SettingsPreferenceFragment userPreferences.add(pref); } // Sort list of users by serialNum Collections.sort(userPreferences, UserPreference.SERIAL_NUMBER_COMPARATOR); Loading @@ -1299,7 +1306,6 @@ public class UserSettings extends SettingsPreferenceFragment // Remove everything from mUserListCategory and add new users. mUserListCategory.removeAll(); // If multi-user is disabled, just show top info and return. final Preference addUserOnLockScreen = getPreferenceScreen().findPreference( mAddUserWhenLockedPreferenceController.getPreferenceKey()); mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen); Loading @@ -1311,16 +1317,11 @@ public class UserSettings extends SettingsPreferenceFragment final Preference multiUserTopIntroPreference = getPreferenceScreen().findPreference( mMultiUserTopIntroPreferenceController.getPreferenceKey()); mMultiUserTopIntroPreferenceController.updateState(multiUserTopIntroPreference); mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled); updateGuestPreferences(); updateGuestCategory(context, users); updateAddUser(context); updateAddSupervisedUser(context); if (!mUserCaps.mUserSwitcherEnabled) { return; } for (UserPreference userPreference : userPreferences) { userPreference.setOrder(Preference.DEFAULT_ORDER); mUserListCategory.addPreference(userPreference); Loading tests/robotests/src/com/android/settings/users/UserSettingsTest.java +46 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,7 @@ public class UserSettingsTest { doReturn(prefs).when(mMockPreferenceManager).getSharedPreferences(); doReturn(mContext).when(mMockPreferenceManager).getContext(); doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen(); doReturn(ACTIVE_USER_ID).when(mContext).getUserId(); mFragment.mMePreference = mMePreference; mFragment.mAddUser = mAddUserPreference; Loading Loading @@ -443,6 +444,7 @@ public class UserSettingsTest { @Test public void updateUserList_userSwitcherDisabled_shouldNotShowAddUser() { givenUsers(getAdminUser(true)); mUserCapabilities.mCanAddUser = true; mUserCapabilities.mUserSwitcherEnabled = false; Loading @@ -453,6 +455,7 @@ public class UserSettingsTest { @Test public void updateUserList_userSwitcherDisabled_shouldNotShowAddGuest() { givenUsers(getAdminUser(true)); mUserCapabilities.mCanAddGuest = true; mUserCapabilities.mUserSwitcherEnabled = false; Loading Loading @@ -511,6 +514,47 @@ public class UserSettingsTest { assertThat(userPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment); } @Test public void updateUserList_existingSecondaryUser_shouldAddOnlyCurrUser_MultiUserIsDisabled() { givenUsers(getAdminUser(true), getSecondaryUser(false)); mUserCapabilities.mUserSwitcherEnabled = false; mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(1)) .addPreference(captor.capture()); List<UserPreference> userPrefs = captor.getAllValues(); assertThat(userPrefs.size()).isEqualTo(1); assertThat(userPrefs.get(0)).isSameInstanceAs(mMePreference); } @Test public void updateUserList_existingSecondaryUser_shouldAddSecondaryUser_MultiUserIsEnabled() { 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 public void updateUserList_existingRestrictedUser_shouldAddRestrictedUserPreference() { givenUsers(getAdminUser(true), getRestrictedUser(false)); Loading Loading @@ -800,6 +844,8 @@ public class UserSettingsTest { List<UserInfo> users = Arrays.asList(userInfo); doReturn(users).when(mUserManager).getUsers(); doReturn(users).when(mUserManager).getAliveUsers(); users.forEach(user -> doReturn(user).when(mUserManager).getUserInfo(user.id)); } private static void removeFlag(UserInfo userInfo, int flag) { Loading Loading
src/com/android/settings/users/UserSettings.java +13 −12 Original line number Diff line number Diff line Loading @@ -1196,11 +1196,19 @@ public class UserSettings extends SettingsPreferenceFragment if (context == null) { return; } final List<UserInfo> users = mUserManager.getAliveUsers() List<UserInfo> users; if (mUserCaps.mUserSwitcherEnabled) { // Only users that can be switched to should show up here. // e.g. Managed profiles appear under Accounts Settings instead .stream().filter(UserInfo::supportsSwitchToByUser) users = mUserManager.getAliveUsers().stream() .filter(UserInfo::supportsSwitchToByUser) .collect(Collectors.toList()); } else { // Only current user will be displayed in case of multi-user switch is disabled users = List.of(mUserManager.getUserInfo(context.getUserId())); } final ArrayList<Integer> missingIcons = new ArrayList<>(); final ArrayList<UserPreference> userPreferences = new ArrayList<>(); Loading Loading @@ -1276,7 +1284,6 @@ public class UserSettings extends SettingsPreferenceFragment userPreferences.add(pref); } // Sort list of users by serialNum Collections.sort(userPreferences, UserPreference.SERIAL_NUMBER_COMPARATOR); Loading @@ -1299,7 +1306,6 @@ public class UserSettings extends SettingsPreferenceFragment // Remove everything from mUserListCategory and add new users. mUserListCategory.removeAll(); // If multi-user is disabled, just show top info and return. final Preference addUserOnLockScreen = getPreferenceScreen().findPreference( mAddUserWhenLockedPreferenceController.getPreferenceKey()); mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen); Loading @@ -1311,16 +1317,11 @@ public class UserSettings extends SettingsPreferenceFragment final Preference multiUserTopIntroPreference = getPreferenceScreen().findPreference( mMultiUserTopIntroPreferenceController.getPreferenceKey()); mMultiUserTopIntroPreferenceController.updateState(multiUserTopIntroPreference); mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled); updateGuestPreferences(); updateGuestCategory(context, users); updateAddUser(context); updateAddSupervisedUser(context); if (!mUserCaps.mUserSwitcherEnabled) { return; } for (UserPreference userPreference : userPreferences) { userPreference.setOrder(Preference.DEFAULT_ORDER); mUserListCategory.addPreference(userPreference); Loading
tests/robotests/src/com/android/settings/users/UserSettingsTest.java +46 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,7 @@ public class UserSettingsTest { doReturn(prefs).when(mMockPreferenceManager).getSharedPreferences(); doReturn(mContext).when(mMockPreferenceManager).getContext(); doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen(); doReturn(ACTIVE_USER_ID).when(mContext).getUserId(); mFragment.mMePreference = mMePreference; mFragment.mAddUser = mAddUserPreference; Loading Loading @@ -443,6 +444,7 @@ public class UserSettingsTest { @Test public void updateUserList_userSwitcherDisabled_shouldNotShowAddUser() { givenUsers(getAdminUser(true)); mUserCapabilities.mCanAddUser = true; mUserCapabilities.mUserSwitcherEnabled = false; Loading @@ -453,6 +455,7 @@ public class UserSettingsTest { @Test public void updateUserList_userSwitcherDisabled_shouldNotShowAddGuest() { givenUsers(getAdminUser(true)); mUserCapabilities.mCanAddGuest = true; mUserCapabilities.mUserSwitcherEnabled = false; Loading Loading @@ -511,6 +514,47 @@ public class UserSettingsTest { assertThat(userPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment); } @Test public void updateUserList_existingSecondaryUser_shouldAddOnlyCurrUser_MultiUserIsDisabled() { givenUsers(getAdminUser(true), getSecondaryUser(false)); mUserCapabilities.mUserSwitcherEnabled = false; mFragment.updateUserList(); ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class); verify(mFragment.mUserListCategory, times(1)) .addPreference(captor.capture()); List<UserPreference> userPrefs = captor.getAllValues(); assertThat(userPrefs.size()).isEqualTo(1); assertThat(userPrefs.get(0)).isSameInstanceAs(mMePreference); } @Test public void updateUserList_existingSecondaryUser_shouldAddSecondaryUser_MultiUserIsEnabled() { 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 public void updateUserList_existingRestrictedUser_shouldAddRestrictedUserPreference() { givenUsers(getAdminUser(true), getRestrictedUser(false)); Loading Loading @@ -800,6 +844,8 @@ public class UserSettingsTest { List<UserInfo> users = Arrays.asList(userInfo); doReturn(users).when(mUserManager).getUsers(); doReturn(users).when(mUserManager).getAliveUsers(); users.forEach(user -> doReturn(user).when(mUserManager).getUserInfo(user.id)); } private static void removeFlag(UserInfo userInfo, int flag) { Loading