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

Commit 4cfc1e60 authored by Kazuki Takise's avatar Kazuki Takise
Browse files

Update windowing mode with acitivity option in freeform mode

Currently relaunching with freeform activity option is a no-op for
a fullscreen app in feeform mode, because even if freeform is
specified in activity option, it's resolved as W_M_UNDEFINED in
TaskLPM because the windowing mode of the display is freeform.

However, in this specific case, we need to make sure to update the
windowing mode of the fullscreen task.

Bug: 321113764
Test: WindowMetricsActivityTests#testMetricsMatchesLayoutOnFreeformActivity
Change-Id: Ie17526ed47942356b8e60ba9eede0c3df689a745
parent 703fd3da
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -303,8 +303,15 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
        } else {
            if (DEBUG) appendLog("non-freeform-task-display-area");
        }
        final boolean isUpdatingExistingTaskWindowingMode = task != null
                && task.getRequestedOverrideWindowingMode() != WINDOWING_MODE_UNDEFINED
                && launchMode != task.getRequestedOverrideWindowingMode();
        if (DEBUG && isUpdatingExistingTaskWindowingMode) {
            appendLog("updating-existing-task-windowing-mode");
        }
        // If launch mode matches display windowing mode, let it inherit from display.
        outParams.mWindowingMode = launchMode == suggestedDisplayArea.getWindowingMode()
                && !isUpdatingExistingTaskWindowingMode
                ? WINDOWING_MODE_UNDEFINED : launchMode;

        if (phase == PHASE_WINDOWING_MODE) {
+21 −0
Original line number Diff line number Diff line
@@ -627,6 +627,27 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
                WINDOWING_MODE_FREEFORM);
    }

    @Test
    public void testLaunchWindowingModeUpdatesExistingTask() {
        final TestDisplayContent freeformDisplay = createNewDisplayContent(
                WINDOWING_MODE_FREEFORM);

        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
        ActivityRecord activity = createSourceActivity(freeformDisplay);
        final Task task = activity.getTask();
        task.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
        final ActivityOptions options = ActivityOptions.makeBasic();
        options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);

        assertEquals(RESULT_CONTINUE,
                new CalculateRequestBuilder()
                        .setTask(task)
                        .setOptions(options)
                        .calculate());

        assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode);
    }

    @Test
    public void testBoundsInOptionsInfersFreeformWithResizeableActivity() {
        final ActivityOptions options = ActivityOptions.makeBasic();