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

Commit 32dd1b91 authored by Tiger Huang's avatar Tiger Huang
Browse files

Don't set extreme values of Integer to safe bounds

This is to prevent getting unexpected results while calculating the
width or height of the rectangle, due to the overflow.

This CL defines the borders of the window layout with large enough
integers, which are also the borders of the safe bounds.

Fix: 227276622
Test: atest ConfigurationScreenLayoutTest#testScreenLayout
Change-Id: Iee14e6de48f57be4999f64dbdce01815de88a9df
parent f88813c6
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -548,7 +548,8 @@ public class InsetsState implements Parcelable {
    }

    public void getDisplayCutoutSafe(Rect outBounds) {
        outBounds.set(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);
        outBounds.set(
                WindowLayout.MIN_X, WindowLayout.MIN_Y, WindowLayout.MAX_X, WindowLayout.MAX_Y);
        final DisplayCutout cutout = mDisplayCutout.get();
        final Rect displayFrame = mDisplayFrame;
        if (!cutout.isEmpty()) {
+10 −2
Original line number Diff line number Diff line
@@ -54,6 +54,12 @@ public class WindowLayout {

    public static final int UNSPECIFIED_LENGTH = -1;

    /** These coordinates are the borders of the window layout. */
    static final int MIN_X = -100000;
    static final int MIN_Y = -100000;
    static final int MAX_X = 100000;
    static final int MAX_Y = 100000;

    private final Rect mTempDisplayCutoutSafeExceptMaybeBarsRect = new Rect();
    private final Rect mTempRect = new Rect();

@@ -172,8 +178,10 @@ public class WindowLayout {
        // TYPE_SYSTEM_ERROR is above the NavigationBar so it can't be allowed to extend over it.
        // Also, we don't allow windows in multi-window mode to extend out of the screen.
        if (noLimits && type != TYPE_SYSTEM_ERROR && !inMultiWindowMode) {
            outDisplayFrame.left = outDisplayFrame.top = -10000;
            outDisplayFrame.right = outDisplayFrame.bottom = 10000;
            outDisplayFrame.left = MIN_X;
            outDisplayFrame.top = MIN_Y;
            outDisplayFrame.right = MAX_X;
            outDisplayFrame.bottom = MAX_Y;
        }

        final boolean hasCompatScale = compatScale != 1f;