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

Commit 2eee0e62 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Fix creating unexpected letterbox surfaces

With fixed rotation, the rotated activity should compare bounds
with rotated display. Otherwise AR#isLetterboxedAppWindow will
return false and create unnecessary letterbox surfaces.

Note that fixed rotation only applies when display area matches
display bounds.

The method matchesDisplayBounds is removed because the only usage
in WS#computeFrame uses parent frame, that is computed from
configuration bounds which doesn't tie to an actual display.

Fix: 186407859
Test: DisplayContentTests#testApplyTopFixedRotationTransform
Change-Id: I8cd978844f0ba8f9739f90c5c624d0c5fc3dc339
parent 5b6127df
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1575,7 +1575,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            }
            return false;
        }
        if (!r.getParent().matchParentBounds()) {
        if (!r.getDisplayArea().matchParentBounds()) {
            // Because the fixed rotated configuration applies to activity directly, if its parent
            // has it own policy for bounds, the activity bounds based on parent is unknown.
            return false;
+7 −11
Original line number Diff line number Diff line
@@ -1265,7 +1265,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        mHaveFrame = true;

        final Task task = getTask();
        final boolean isFullscreenAndFillsDisplay = !inMultiWindowMode() && matchesDisplayBounds();
        final boolean isFullscreenAndFillsArea = !inMultiWindowMode() && matchesDisplayAreaBounds();
        final boolean windowsAreFloating = task != null && task.isFloating();
        final DisplayContent dc = getDisplayContent();
        final DisplayInfo displayInfo = getDisplayInfo();
@@ -1290,7 +1290,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
                : isImeLayeringTarget();
        final boolean isImeTarget =
                imeWin != null && imeWin.isVisibleNow() && isInputMethodAdjustTarget;
        if (isFullscreenAndFillsDisplay || layoutInParentFrame()) {
        if (isFullscreenAndFillsArea || layoutInParentFrame()) {
            // We use the parent frame as the containing frame for fullscreen and child windows
            windowFrames.mContainingFrame.set(windowFrames.mParentFrame);
            layoutDisplayFrame = windowFrames.mDisplayFrame;
@@ -2272,19 +2272,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
                && mWindowFrames.mFrame.bottom >= displayInfo.appHeight;
    }

    private boolean matchesDisplayBounds() {
        final Rect displayBounds = mToken.getFixedRotationTransformDisplayBounds();
        if (displayBounds != null) {
    boolean matchesDisplayAreaBounds() {
        final Rect rotatedDisplayBounds = mToken.getFixedRotationTransformDisplayBounds();
        if (rotatedDisplayBounds != null) {
            // If the rotated display bounds are available, the window bounds are also rotated.
            return displayBounds.equals(getBounds());
        }
        return getDisplayContent().getBounds().equals(getBounds());
            return rotatedDisplayBounds.equals(getBounds());
        }

    boolean matchesDisplayAreaBounds() {
        final DisplayArea displayArea = getDisplayArea();
        if (displayArea == null) {
            return matchesDisplayBounds();
            return getDisplayContent().getBounds().equals(getBounds());
        }
        return displayArea.getBounds().equals(getBounds());
    }
+2 −0
Original line number Diff line number Diff line
@@ -1320,6 +1320,8 @@ public class DisplayContentTests extends WindowTestsBase {
        app.setRequestedOrientation(newOrientation);

        assertTrue(app.isFixedRotationTransforming());
        assertTrue(mAppWindow.matchesDisplayAreaBounds());
        assertFalse(mAppWindow.isLetterboxedAppWindow());
        assertTrue(mDisplayContent.getDisplayRotation().shouldRotateSeamlessly(
                ROTATION_0 /* oldRotation */, ROTATION_90 /* newRotation */,
                false /* forceUpdate */));