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

Commit 9d4a077d authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Use size compat bounds for window layout

When an app is in size compat mode, the configuration bounds
and layout bounds are not the same such as the app keeps
a larger configuration bounds and needs to be scaled when
drawing on screen. The size compat bounds are the scaled
bounds in screen coordinates so it should be used if available.

Fix: 194820928
Test: SizeCompatTests#testFixedScreenBoundsWhenDisplaySizeChanged
Change-Id: Ib97038560e65699f5275d6f5dc4b8e5881024e57
parent 23ba83b7
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1441,6 +1441,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        }
    }

    @Override
    public Rect getBounds() {
        // The window bounds are used for layout in screen coordinates. If the token has bounds for
        // size compatibility mode, its configuration bounds are app based coordinates which should
        // not be used for layout.
        return mToken.hasSizeCompatBounds() ? mToken.getBounds() : super.getBounds();
    }

    /** Retrieves the current frame of the window that the application sees. */
    Rect getFrame() {
        return mWindowFrames.mFrame;
+5 −0
Original line number Diff line number Diff line
@@ -320,6 +320,11 @@ public class SizeCompatTests extends WindowTestsBase {
        assertScaled();
        // Activity is sandboxed due to size compat mode.
        assertActivityMaxBoundsSandboxed();

        final WindowState appWindow = addWindowToActivity(mActivity);
        assertTrue(mActivity.hasSizeCompatBounds());
        assertEquals("App window must use size compat bounds for layout in screen space",
                mActivity.getBounds(), appWindow.getBounds());
    }

    @Test