From 32dd1b916a2658ce4ef96a2d2537cdeeded10979 Mon Sep 17 00:00:00 2001 From: Tiger Huang Date: Mon, 6 Jun 2022 20:32:46 +0800 Subject: [PATCH] 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 --- core/java/android/view/InsetsState.java | 3 ++- core/java/android/view/WindowLayout.java | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java index 9d6b982c35710..f6e4f6e7ef2b6 100644 --- a/core/java/android/view/InsetsState.java +++ b/core/java/android/view/InsetsState.java @@ -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()) { diff --git a/core/java/android/view/WindowLayout.java b/core/java/android/view/WindowLayout.java index b7b71f123dad9..c320b262ebd7e 100644 --- a/core/java/android/view/WindowLayout.java +++ b/core/java/android/view/WindowLayout.java @@ -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;