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

Commit 241d7a1c authored by Eghosa Ewansiha-Vlachavas's avatar Eghosa Ewansiha-Vlachavas Committed by Android (Google) Code Review
Browse files

Merge "Handle incompatible activity given null task in DMLPM" into main

parents 03f75258 4597b277
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -110,6 +110,17 @@ class DesktopModeLaunchParamsModifier implements LaunchParamsModifier {
        if (ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS.isTrue() && task == null
                && (isRequestingFreeformWindowMode(null, options, currentParams)
                || inDesktopMode)) {
            if (DesktopExperienceFlags.HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS.isTrue()
                    && activity != null) {
                if (mDesktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(
                        activity.mActivityComponent, activity.isNoDisplay(),
                        !activity.occludesParent(), /* numActivities */ 1, activity.mUserId,
                        activity.info)) {
                    appendLog("activity exempt from desktop, launching in fullscreen");
                    outParams.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
                    return RESULT_DONE;
                }
            }
            if (options != null) {
                final int windowingMode = options.getLaunchWindowingMode();
                if (windowingMode == WINDOWING_MODE_FREEFORM) {
+90 −0
Original line number Diff line number Diff line
@@ -196,6 +196,28 @@ public class DesktopModeLaunchParamsModifierTests extends
                new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
    }

    @Test
    @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
    public void testHomeActivitiesForcedToFullscreenWithoutTask() {
        setupDesktopModeLaunchParamsModifier();

        final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);

        final ActivityOptions options = ActivityOptions.makeBasic();
        options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
        options.setLaunchDisplayId(display.mDisplayId);
        final Task task = new TaskBuilder(mSupervisor).build();
        final ActivityRecord activity = createActivity(display, SCREEN_ORIENTATION_PORTRAIT,
                task, /* ignoreOrientationRequest */ true, /* isResizeable */ false,
                HOME_ACTIVITIES);

        assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options)
                .setActivity(activity).calculate());
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS)
    public void testHomeActivitiesForcedToFullscreen() {
@@ -213,6 +235,30 @@ public class DesktopModeLaunchParamsModifierTests extends
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
    public void testSystemUIActivitiesForcedToFullscreenWithoutTask() {
        setupDesktopModeLaunchParamsModifier();

        final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);

        final ActivityOptions options = ActivityOptions.makeBasic();
        options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
        options.setLaunchDisplayId(display.mDisplayId);
        final Task task = new TaskBuilder(mSupervisor).build();
        final ComponentName sysUiComponent = new ComponentName(
                mContext.getResources().getString(R.string.config_systemUi), "");
        final ActivityRecord activity = createActivity(display, SCREEN_ORIENTATION_PORTRAIT,
                task, /* ignoreOrientationRequest */ true, /* isResizeable */ false,
                sysUiComponent);

        assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null)
                .setOptions(options).setActivity(activity).calculate());
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS)
    public void testSystemUIActivitiesForcedToFullscreen() {
@@ -232,6 +278,28 @@ public class DesktopModeLaunchParamsModifierTests extends
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
    public void testTransparentActivitiesWithPlatformSignatureForcedToFullscreenWithoutTask() {
        setupDesktopModeLaunchParamsModifier();

        final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);

        final ActivityOptions options = ActivityOptions.makeBasic();
        options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
        options.setLaunchDisplayId(display.mDisplayId);
        mActivity.setOccludesParent(false);
        mActivity.info.applicationInfo = new ApplicationInfo();
        mActivity.info.applicationInfo.privateFlags =
                ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY;

        assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options)
                .calculate());
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS)
    public void testTransparentActivitiesWithPlatformSignatureForcedToFullscreen() {
@@ -249,6 +317,28 @@ public class DesktopModeLaunchParamsModifierTests extends
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
    public void testTransparentActivitiesWithPermissionForcedToFullscreenWithoutTask()
            throws PackageManager.NameNotFoundException {
        setupDesktopModeLaunchParamsModifier();

        final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);

        final ActivityOptions options = ActivityOptions.makeBasic();
        options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
        options.setLaunchDisplayId(display.mDisplayId);
        mActivity.setOccludesParent(false);
        allowOverlayPermissionForAllUsers(
                new String[]{android.Manifest.permission.SYSTEM_ALERT_WINDOW});

        assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options)
                .calculate());
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS)
    public void testTransparentActivitiesWithPermissionForcedToFullscreen()