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

Commit 6ce9c377 authored by Manish Singh's avatar Manish Singh
Browse files

Deep copy the existing Arguments

Otherwise we end up using the same bundle for all the fragments.

Bug: 304697867
Test: manual
Test: atest ProfileSelectFragmentTest
Change-Id: Ia31f2440516783c22849593922467756c8c54cb9
parent 779cda70
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -323,7 +323,7 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
            fragments.add(personalFragment);

            if (managedProfileInfoProvider.getManagedProfile(context) != null) {
                final Bundle workOnly = bundle != null ? bundle : new Bundle();
                final Bundle workOnly = bundle != null ? bundle.deepCopy() : new Bundle();
                workOnly.putInt(EXTRA_PROFILE, ProfileType.WORK);
                final Fragment workFragment =
                        workFragmentConstructor.constructAndGetFragment();
@@ -333,7 +333,7 @@ public abstract class ProfileSelectFragment extends DashboardFragment {

            if (Flags.allowPrivateProfile()
                    && !privateSpaceInfoProvider.isPrivateSpaceLocked(context)) {
                final Bundle privateOnly = bundle != null ? bundle : new Bundle();
                final Bundle privateOnly = bundle != null ? bundle.deepCopy() : new Bundle();
                privateOnly.putInt(EXTRA_PROFILE, ProfileType.PRIVATE);
                final Fragment privateFragment =
                        privateFragmentConstructor.constructAndGetFragment();
+32 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.dashboard.profileselector;

import static android.content.Intent.EXTRA_USER_ID;

import static com.android.settings.dashboard.profileselector.ProfileSelectFragment.EXTRA_PROFILE;
import static com.android.settings.dashboard.profileselector.ProfileSelectFragment.PERSONAL_TAB;
import static com.android.settings.dashboard.profileselector.ProfileSelectFragment.PRIVATE_TAB;
import static com.android.settings.dashboard.profileselector.ProfileSelectFragment.WORK_TAB;
@@ -255,6 +256,37 @@ public class ProfileSelectFragmentTest {
        assertThat(fragments).hasLength(3);
    }

    @Test
    public void testGetFragments_whenAvailableBundle_returnsFragmentsWithCorrectBundles() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE);
        Bundle bundle = new Bundle();
        Fragment[] fragments = ProfileSelectFragment.getFragments(
                mContext,
                bundle,
                TestProfileSelectFragment::new,
                TestProfileSelectFragment::new,
                TestProfileSelectFragment::new,
                new ProfileSelectFragment.PrivateSpaceInfoProvider() {
                    @Override
                    public boolean isPrivateSpaceLocked(Context context) {
                        return false;
                    }
                },
                new ProfileSelectFragment.ManagedProfileInfoProvider() {
                    @Override
                    public UserHandle getManagedProfile(Context context) {
                        return new UserHandle(123);
                    }
                });
        assertThat(fragments).hasLength(3);
        assertThat(fragments[0].getArguments().getInt(EXTRA_PROFILE))
                .isEqualTo(ProfileSelectFragment.ProfileType.PERSONAL);
        assertThat(fragments[1].getArguments().getInt(EXTRA_PROFILE))
                .isEqualTo(ProfileSelectFragment.ProfileType.WORK);
        assertThat(fragments[2].getArguments().getInt(EXTRA_PROFILE))
                .isEqualTo(ProfileSelectFragment.ProfileType.PRIVATE);
    }

    public static class TestProfileSelectFragment extends ProfileSelectFragment {

        @Override