Merge "Do not scale Letterbox Inner bounds" into tm-qpr-dev am: 35a96232ca
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21408529 Change-Id: I7b0b65e06289f4675d8a21b0da0247e6eb14de5c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -648,10 +648,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();
|
||||
}
|
||||
@@ -1086,7 +1085,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
|
||||
@@ -1139,7 +1143,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.
|
||||
@@ -1153,11 +1157,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(
|
||||
|
||||
@@ -1433,6 +1433,65 @@ public class SizeCompatTests extends WindowTestsBase {
|
||||
activity.getBounds().width(), 0.5);
|
||||
}
|
||||
|
||||
@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;
|
||||
|
||||
Reference in New Issue
Block a user