DisplayCutout: Dispatch all non-zero safeInsets
Ensures that even if the display cutout does not overlap
a window, the safe insets are still dispatched if the window
overlaps any part of the cutout area and the safe insets
are therefore non-zero.
To do that, we need to compute the insets once against the
display size, then only shrink or expand the safe insets
accordingly.
Bug: 73533636
Test: atest DisplayCutoutTest
Change-Id: I1ea449178e29c7effdd92cac78af1a3875ca7e70
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index 63ac4af..a8556bd 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -22,6 +22,7 @@
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.DisplayCutout.fromBoundingRect;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
@@ -38,7 +39,6 @@
import android.annotation.SuppressLint;
import android.content.res.Configuration;
-import android.graphics.Path;
import android.graphics.Rect;
import android.os.SystemClock;
import android.platform.test.annotations.Presubmit;
@@ -396,7 +396,9 @@
final DisplayContent dc = createNewDisplay();
dc.mInitialDisplayWidth = 200;
dc.mInitialDisplayHeight = 400;
- final DisplayCutout cutout = createCutout(new Rect(80, 0, 120, 10));
+ Rect r = new Rect(80, 0, 120, 10);
+ final DisplayCutout cutout = fromBoundingRect(r.left, r.top, r.right, r.bottom)
+ .computeSafeInsets(200, 400);
dc.mInitialDisplayCutout = cutout;
dc.setRotation(Surface.ROTATION_0);
@@ -412,13 +414,17 @@
final DisplayContent dc = createNewDisplay();
dc.mInitialDisplayWidth = 200;
dc.mInitialDisplayHeight = 400;
- final DisplayCutout cutout = createCutout(new Rect(80, 0, 120, 10));
+ Rect r1 = new Rect(80, 0, 120, 10);
+ final DisplayCutout cutout = fromBoundingRect(r1.left, r1.top, r1.right, r1.bottom)
+ .computeSafeInsets(200, 400);
dc.mInitialDisplayCutout = cutout;
dc.setRotation(Surface.ROTATION_90);
dc.computeScreenConfiguration(new Configuration()); // recomputes dc.mDisplayInfo.
- assertEquals(createCutout(new Rect(0, 80, 10, 120)), dc.getDisplayInfo().displayCutout);
+ final Rect r = new Rect(0, 80, 10, 120);
+ assertEquals(fromBoundingRect(r.left, r.top, r.right, r.bottom)
+ .computeSafeInsets(400, 200), dc.getDisplayInfo().displayCutout);
}
}
@@ -487,10 +493,4 @@
y,
metaState);
}
-
- private DisplayCutout createCutout(Rect r) {
- Path p = new Path();
- p.addRect(r.left, r.top, r.right, r.bottom, Path.Direction.CCW);
- return DisplayCutout.fromBounds(p);
- }
}