Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0661a764 authored by Nikhil Kumar's avatar Nikhil Kumar
Browse files

Enable Name and Avatar change without turning on multi-user

Primary user will be displayed in user list even when the
multi-user settings is disabled.
This will allow users to change the name and avatar of
primary user without enabling the multi-user feature.

Test: croot && make RunSettingsRoboTests -j40
ROBOTEST_FILTER="com.android.settings.users.UserSettingsTest"

Bug: 246732754
Change-Id: I4eb5aaf97630135960410bea7cdddc52b5848a1e
parent 535667b5
Loading
Loading
Loading
Loading
+13 −12
Original line number Diff line number Diff line
@@ -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<>();

@@ -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);

@@ -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);
@@ -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);
+46 −0
Original line number Diff line number Diff line
@@ -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;
@@ -443,6 +444,7 @@ public class UserSettingsTest {

    @Test
    public void updateUserList_userSwitcherDisabled_shouldNotShowAddUser() {
        givenUsers(getAdminUser(true));
        mUserCapabilities.mCanAddUser = true;
        mUserCapabilities.mUserSwitcherEnabled = false;

@@ -453,6 +455,7 @@ public class UserSettingsTest {

    @Test
    public void updateUserList_userSwitcherDisabled_shouldNotShowAddGuest() {
        givenUsers(getAdminUser(true));
        mUserCapabilities.mCanAddGuest = true;
        mUserCapabilities.mUserSwitcherEnabled = false;

@@ -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));
@@ -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) {