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

Commit 3825ffc7 authored by Himanshu Gupta's avatar Himanshu Gupta Committed by Android (Google) Code Review
Browse files

Merge "Adding single user layout for ResolverActivity" into main

parents 5878e860 a72eb16e
Loading
Loading
Loading
Loading
+24 −6
Original line number Diff line number Diff line
@@ -216,6 +216,12 @@ public class ResolverActivity extends Activity implements
    // Intent extra for connected audio devices
    public static final String EXTRA_IS_AUDIO_CAPTURE_DEVICE = "is_audio_capture_device";

    /**
     * Boolean extra to indicate if Resolver Sheet needs to be started in single user mode.
     */
    protected static final String EXTRA_RESTRICT_TO_SINGLE_USER =
            "com.android.internal.app.ResolverActivity.EXTRA_RESTRICT_TO_SINGLE_USER";

    /**
     * Integer extra to indicate which profile should be automatically selected.
     * <p>Can only be used if there is a work profile.
@@ -750,8 +756,10 @@ public class ResolverActivity extends Activity implements
    }

    protected UserHandle getPersonalProfileUserHandle() {
        if (privateSpaceEnabled() && isLaunchedAsPrivateProfile()){
            return mPrivateProfileUserHandle;
        // When launched in single user mode, only personal tab is populated, so we use
        // tabOwnerUserHandleForLaunch as personal tab's user handle.
        if (privateSpaceEnabled() && isLaunchedInSingleUserMode()) {
            return getTabOwnerUserHandleForLaunch();
        }
        return mPersonalProfileUserHandle;
    }
@@ -822,11 +830,11 @@ public class ResolverActivity extends Activity implements
        // If we are in work or private profile's process, return WorkProfile/PrivateProfile user
        // as owner, otherwise we always return PersonalProfile user as owner
        if (UserHandle.of(UserHandle.myUserId()).equals(getWorkProfileUserHandle())) {
            return getWorkProfileUserHandle();
            return mWorkProfileUserHandle;
        } else if (privateSpaceEnabled() && isLaunchedAsPrivateProfile()) {
            return getPrivateProfileUserHandle();
            return mPrivateProfileUserHandle;
        }
        return getPersonalProfileUserHandle();
        return mPersonalProfileUserHandle;
    }

    private boolean hasWorkProfile() {
@@ -847,8 +855,18 @@ public class ResolverActivity extends Activity implements
                && (UserHandle.myUserId() == getPrivateProfileUserHandle().getIdentifier());
    }

    protected final boolean isLaunchedInSingleUserMode() {
        // When launched from Private Profile, return true
        if (isLaunchedAsPrivateProfile()) {
            return true;
        }
        return getIntent()
                .getBooleanExtra(EXTRA_RESTRICT_TO_SINGLE_USER, /* defaultValue = */ false);
    }

    protected boolean shouldShowTabs() {
        if (privateSpaceEnabled() && isLaunchedAsPrivateProfile()) {
        // No Tabs are shown when launched in single user mode.
        if (privateSpaceEnabled() && isLaunchedInSingleUserMode()) {
            return false;
        }
        return hasWorkProfile() && ENABLE_TABBED_VIEW;
+50 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;

import static com.android.internal.app.MatcherUtils.first;
import static com.android.internal.app.ResolverActivity.EXTRA_RESTRICT_TO_SINGLE_USER;
import static com.android.internal.app.ResolverDataProvider.createPackageManagerMockedInfo;
import static com.android.internal.app.ResolverWrapperActivity.sOverrides;

@@ -1254,6 +1255,51 @@ public class ResolverActivityTest {
        }
    }

    @Test
    public void testTriggerFromMainProfile_inSingleUserMode_withWorkProfilePresent() {
        mSetFlagsRule.enableFlags(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE,
                android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE);
        markWorkProfileUserAvailable();
        setTabOwnerUserHandleForLaunch(PERSONAL_USER_HANDLE);
        Intent sendIntent = createSendImageIntent();
        sendIntent.putExtra(EXTRA_RESTRICT_TO_SINGLE_USER, true);
        List<ResolvedComponentInfo> personalResolvedComponentInfos =
                createResolvedComponentsForTestWithOtherProfile(3, PERSONAL_USER_HANDLE);
        List<ResolvedComponentInfo> workResolvedComponentInfos = createResolvedComponentsForTest(4,
                sOverrides.workProfileUserHandle);
        setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos);
        final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
        waitForIdle();
        assertThat(activity.getPersonalListAdapter().getCount(), is(2));
        onView(withId(R.id.tabs)).check(matches(not(isDisplayed())));
        assertEquals(activity.getMultiProfilePagerAdapterCount(), 1);
        for (ResolvedComponentInfo resolvedInfo : personalResolvedComponentInfos) {
            assertEquals(resolvedInfo.getResolveInfoAt(0).userHandle, PERSONAL_USER_HANDLE);
        }
    }

    @Test
    public void testTriggerFromWorkProfile_inSingleUserMode() {
        mSetFlagsRule.enableFlags(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE,
                android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE);
        markWorkProfileUserAvailable();
        setTabOwnerUserHandleForLaunch(sOverrides.workProfileUserHandle);
        Intent sendIntent = createSendImageIntent();
        sendIntent.putExtra(EXTRA_RESTRICT_TO_SINGLE_USER, true);
        List<ResolvedComponentInfo> personalResolvedComponentInfos =
                createResolvedComponentsForTest(3, sOverrides.workProfileUserHandle);
        setupResolverControllers(personalResolvedComponentInfos);
        final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
        waitForIdle();
        assertThat(activity.getPersonalListAdapter().getCount(), is(3));
        onView(withId(R.id.tabs)).check(matches(not(isDisplayed())));
        assertEquals(activity.getMultiProfilePagerAdapterCount(), 1);
        for (ResolvedComponentInfo resolvedInfo : personalResolvedComponentInfos) {
            assertEquals(resolvedInfo.getResolveInfoAt(0).userHandle,
                    sOverrides.workProfileUserHandle);
        }
    }

    private Intent createSendImageIntent() {
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
@@ -1339,6 +1385,10 @@ public class ResolverActivityTest {
        ResolverWrapperActivity.sOverrides.privateProfileUserHandle = UserHandle.of(12);
    }

    private void setTabOwnerUserHandleForLaunch(UserHandle tabOwnerUserHandleForLaunch) {
        sOverrides.tabOwnerUserHandleForLaunch = tabOwnerUserHandleForLaunch;
    }

    private void setupResolverControllers(
            List<ResolvedComponentInfo> personalResolvedComponentInfos,
            List<ResolvedComponentInfo> workResolvedComponentInfos) {
+4 −0
Original line number Diff line number Diff line
@@ -116,6 +116,10 @@ public class ResolverWrapperActivity extends ResolverActivity {
            when(sOverrides.resolverListController.getUserHandle()).thenReturn(UserHandle.SYSTEM);
            return sOverrides.resolverListController;
        }
        if (isLaunchedInSingleUserMode()) {
            when(sOverrides.resolverListController.getUserHandle()).thenReturn(userHandle);
            return sOverrides.resolverListController;
        }
        when(sOverrides.workResolverListController.getUserHandle()).thenReturn(userHandle);
        return sOverrides.workResolverListController;
    }