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

Commit c502685f authored by Kazuki Takise's avatar Kazuki Takise Committed by Android (Google) Code Review
Browse files

Merge "Fix win mode issues for unresizable apps" into tm-qpr-dev

parents 6303152e 383b0006
Loading
Loading
Loading
Loading
+22 −21
Original line number Diff line number Diff line
@@ -277,29 +277,31 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
        // is set with the suggestedDisplayArea. If it is set, but the eventual TaskDisplayArea is
        // different, we should recalcuating the bounds.
        boolean hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = false;
        if (suggestedDisplayArea.inFreeformWindowingMode()) {
        // shouldSetAsOverrideWindowingMode is set if the task needs to retain the launchMode
        // regardless of the windowing mode of the parent.
        boolean shouldSetAsOverrideWindowingMode = false;
        if (launchMode == WINDOWING_MODE_PINNED) {
            if (DEBUG) appendLog("picture-in-picture");
        } else if (!root.isResizeable()) {
                if (shouldLaunchUnresizableAppInFreeform(root, suggestedDisplayArea, options)) {
                    launchMode = WINDOWING_MODE_FREEFORM;
            if (shouldLaunchUnresizableAppInFreeformInFreeformMode(root, suggestedDisplayArea,
                    options)) {
                launchMode = WINDOWING_MODE_UNDEFINED;
                if (outParams.mBounds.isEmpty()) {
                        getTaskBounds(root, suggestedDisplayArea, layout, launchMode,
                                hasInitialBounds, outParams.mBounds);
                    getTaskBounds(root, suggestedDisplayArea, layout, launchMode, hasInitialBounds,
                            outParams.mBounds);
                    hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true;
                }
                if (DEBUG) appendLog("unresizable-freeform");
            } else {
                launchMode = WINDOWING_MODE_FULLSCREEN;
                outParams.mBounds.setEmpty();
                shouldSetAsOverrideWindowingMode = true;
                if (DEBUG) appendLog("unresizable-forced-maximize");
            }
        }
        } else {
            if (DEBUG) appendLog("non-freeform-task-display-area");
        }
        // If launch mode matches display windowing mode, let it inherit from display.
        outParams.mWindowingMode = launchMode == suggestedDisplayArea.getWindowingMode()
                && !shouldSetAsOverrideWindowingMode
                ? WINDOWING_MODE_UNDEFINED : launchMode;

        if (phase == PHASE_WINDOWING_MODE) {
@@ -650,7 +652,7 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
        inOutBounds.offset(xOffset, yOffset);
    }

    private boolean shouldLaunchUnresizableAppInFreeform(ActivityRecord activity,
    private boolean shouldLaunchUnresizableAppInFreeformInFreeformMode(ActivityRecord activity,
            TaskDisplayArea displayArea, @Nullable ActivityOptions options) {
        if (options != null && options.getLaunchWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
            // Do not launch the activity in freeform if it explicitly requested fullscreen mode.
@@ -663,8 +665,7 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
        final int displayOrientation = orientationFromBounds(displayArea.getBounds());
        final int activityOrientation = resolveOrientation(activity, displayArea,
                displayArea.getBounds());
        if (displayArea.getWindowingMode() == WINDOWING_MODE_FREEFORM
                && displayOrientation != activityOrientation) {
        if (displayOrientation != activityOrientation) {
            return true;
        }

+37 −5
Original line number Diff line number Diff line
@@ -825,10 +825,11 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
    }

    @Test
    public void testLaunchesPortraitUnresizableOnFreeformDisplayWithFreeformSizeCompat() {
    public void testLaunchesPortraitUnresizableOnFreeformLandscapeDisplay() {
        mAtm.mDevEnableNonResizableMultiWindow = true;
        final TestDisplayContent freeformDisplay = createNewDisplayContent(
                WINDOWING_MODE_FREEFORM);
        assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
        final ActivityOptions options = ActivityOptions.makeBasic();
        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
        mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
@@ -836,12 +837,42 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
        assertEquals(RESULT_CONTINUE,
                new CalculateRequestBuilder().setOptions(options).calculate());

        assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
        assertEquals(WINDOWING_MODE_UNDEFINED, mResult.mWindowingMode);
    }

    @Test
    public void testLaunchesLandscapeUnresizableOnFreeformLandscapeDisplay() {
        mAtm.mDevEnableNonResizableMultiWindow = true;
        final TestDisplayContent freeformDisplay = createNewDisplayContent(
                WINDOWING_MODE_FREEFORM);
        assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
        final ActivityOptions options = ActivityOptions.makeBasic();
        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
        mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
        mActivity.info.screenOrientation = SCREEN_ORIENTATION_LANDSCAPE;
        assertEquals(RESULT_CONTINUE,
                new CalculateRequestBuilder().setOptions(options).calculate());

        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    public void testSkipsForceMaximizingAppsOnNonFreeformDisplay() {
    public void testLaunchesUndefinedUnresizableOnFreeformLandscapeDisplay() {
        mAtm.mDevEnableNonResizableMultiWindow = true;
        final TestDisplayContent freeformDisplay = createNewDisplayContent(
                WINDOWING_MODE_FREEFORM);
        assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
        final ActivityOptions options = ActivityOptions.makeBasic();
        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
        mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
        assertEquals(RESULT_CONTINUE,
                new CalculateRequestBuilder().setOptions(options).calculate());

        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    public void testForceMaximizingAppsOnNonFreeformDisplay() {
        final ActivityOptions options = ActivityOptions.makeBasic();
        options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
        options.setLaunchBounds(new Rect(0, 0, 200, 100));
@@ -855,8 +886,9 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
        assertEquals(RESULT_CONTINUE,
                new CalculateRequestBuilder().setOptions(options).calculate());

        assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                WINDOWING_MODE_FULLSCREEN);
        // Non-resizable apps must be launched in fullscreen in a fullscreen display regardless of
        // other properties.
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test