summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-02-16 02:01:46 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-02-16 02:01:46 +0000
commit9c590fd3b3bd617f9c6212a0ea5db5a85951af6e (patch)
treeb648347f1b2f3a99199641c5ee9ab4bcb4592298
parent95c516ed4a6059c2f16c19814ffcb05bf36ae9b9 (diff)
parent50f097403b610e8f0a700e71fa3af67fe561d212 (diff)
downloadbase-9c590fd3b3bd617f9c6212a0ea5db5a85951af6e.tar.gz
Merge cherrypicks of ['googleplex-android-review.googlesource.com/21408529'] into tm-d2-release.
Change-Id: I0bbe24b4b62213d6da951631c7461761cdcd0d34
-rw-r--r--services/core/java/com/android/server/wm/LetterboxUiController.java19
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java59
2 files changed, 68 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index 9681789347cf..8f9c8d606930 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -641,10 +641,9 @@ final class LetterboxUiController {
if (mLetterbox != null) {
outBounds.set(mLetterbox.getInnerFrame());
final WindowState w = mActivityRecord.findMainWindow();
- if (w == null) {
- return;
+ if (w != null) {
+ adjustBoundsForTaskbar(w, outBounds);
}
- adjustBoundsIfNeeded(w, outBounds);
} else {
outBounds.setEmpty();
}
@@ -1079,7 +1078,12 @@ final class LetterboxUiController {
// It is important to call {@link #adjustBoundsIfNeeded} before {@link cropBounds.offsetTo}
// because taskbar bounds used in {@link #adjustBoundsIfNeeded}
// are in screen coordinates
- adjustBoundsIfNeeded(mainWindow, cropBounds);
+ adjustBoundsForTaskbar(mainWindow, cropBounds);
+
+ final float scale = mainWindow.mInvGlobalScale;
+ if (scale != 1f && scale > 0f) {
+ cropBounds.scale(scale);
+ }
// ActivityRecord bounds are in screen coordinates while (0,0) for activity's surface
// control is in the top left corner of an app window so offsetting bounds
@@ -1132,7 +1136,7 @@ final class LetterboxUiController {
return null;
}
- private void adjustBoundsIfNeeded(final WindowState mainWindow, final Rect bounds) {
+ private void adjustBoundsForTaskbar(final WindowState mainWindow, final Rect bounds) {
// Rounded corners should be displayed above the taskbar. When taskbar is hidden,
// an insets frame is equal to a navigation bar which shouldn't affect position of
// rounded corners since apps are expected to handle navigation bar inset.
@@ -1146,11 +1150,6 @@ final class LetterboxUiController {
// Rounded corners should be displayed above the expanded taskbar.
bounds.bottom = Math.min(bounds.bottom, expandedTaskbarOrNull.getFrame().top);
}
-
- final float scale = mainWindow.mInvGlobalScale;
- if (scale != 1f && scale > 0f) {
- bounds.scale(scale);
- }
}
private int getInsetsStateCornerRadius(
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index fb5fda16408e..9f6120658dd2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -1389,6 +1389,65 @@ public class SizeCompatTests extends WindowTestsBase {
}
@Test
+ public void testGetLetterboxInnerBounds_noScalingApplied() {
+ // Set up a display in portrait and ignoring orientation request.
+ final int dw = 1400;
+ final int dh = 2800;
+ setUpDisplaySizeWithApp(dw, dh);
+ mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+
+ // Rotate display to landscape.
+ rotateDisplay(mActivity.mDisplayContent, ROTATION_90);
+
+ // Portrait fixed app without max aspect.
+ prepareUnresizable(mActivity, 0, SCREEN_ORIENTATION_LANDSCAPE);
+
+ // Need a window to call adjustBoundsForTaskbar with.
+ addWindowToActivity(mActivity);
+
+ // App should launch in fullscreen.
+ assertFalse(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
+ assertFalse(mActivity.inSizeCompatMode());
+
+ // Activity inherits max bounds from TaskDisplayArea.
+ assertMaxBoundsInheritDisplayAreaBounds();
+
+ // Rotate display to portrait.
+ rotateDisplay(mActivity.mDisplayContent, ROTATION_0);
+
+ final Rect rotatedDisplayBounds = new Rect(mActivity.mDisplayContent.getBounds());
+ final Rect rotatedActivityBounds = new Rect(mActivity.getBounds());
+ assertTrue(rotatedDisplayBounds.width() < rotatedDisplayBounds.height());
+
+ // App should be in size compat.
+ assertFalse(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
+ assertScaled();
+ assertThat(mActivity.inSizeCompatMode()).isTrue();
+ assertActivityMaxBoundsSandboxed();
+
+
+ final int scale = dh / dw;
+
+ // App bounds should be dh / scale x dw / scale
+ assertEquals(dw, rotatedDisplayBounds.width());
+ assertEquals(dh, rotatedDisplayBounds.height());
+
+ assertEquals(dh / scale, rotatedActivityBounds.width());
+ assertEquals(dw / scale, rotatedActivityBounds.height());
+
+ // Compute the frames of the window and invoke {@link ActivityRecord#layoutLetterbox}.
+ mActivity.mRootWindowContainer.performSurfacePlacement();
+
+ LetterboxDetails letterboxDetails = mActivity.mLetterboxUiController.getLetterboxDetails();
+
+ assertEquals(dh / scale, letterboxDetails.getLetterboxInnerBounds().width());
+ assertEquals(dw / scale, letterboxDetails.getLetterboxInnerBounds().height());
+
+ assertEquals(dw, letterboxDetails.getLetterboxFullBounds().width());
+ assertEquals(dh, letterboxDetails.getLetterboxFullBounds().height());
+ }
+
+ @Test
public void testLaunchWithFixedRotationTransform() {
final int dw = 1000;
final int dh = 2500;