Merge "Set pillar box bounds in fixed orientation display" into rvc-dev am: 541633e3d6 am: 03914e642b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11862406 Change-Id: I66e9c86aa58cccb4fa33a7bc1c7cd63d63eec258
This commit is contained in:
@@ -7724,24 +7724,25 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
outAppBounds.set(outBounds);
|
||||
}
|
||||
} else {
|
||||
outBounds.set(0, 0, mWidth, mHeight);
|
||||
getFrameByOrientation(outAppBounds, orientation);
|
||||
if (orientationRequested && !canChangeOrientation
|
||||
&& (outAppBounds.width() > outAppBounds.height()) != (mWidth > mHeight)) {
|
||||
// The orientation is mismatched but the display cannot rotate. The bounds will
|
||||
// fit to the short side of display.
|
||||
if (orientation == ORIENTATION_LANDSCAPE) {
|
||||
outAppBounds.bottom = (int) ((float) mWidth * mWidth / mHeight);
|
||||
outAppBounds.right = mWidth;
|
||||
} else {
|
||||
outAppBounds.bottom = mHeight;
|
||||
outAppBounds.right = (int) ((float) mHeight * mHeight / mWidth);
|
||||
if (orientationRequested) {
|
||||
getFrameByOrientation(outBounds, orientation);
|
||||
if ((outBounds.width() > outBounds.height()) != (mWidth > mHeight)) {
|
||||
// The orientation is mismatched but the display cannot rotate. The bounds
|
||||
// will fit to the short side of display.
|
||||
if (orientation == ORIENTATION_LANDSCAPE) {
|
||||
outBounds.bottom = (int) ((float) mWidth * mWidth / mHeight);
|
||||
outBounds.right = mWidth;
|
||||
} else {
|
||||
outBounds.bottom = mHeight;
|
||||
outBounds.right = (int) ((float) mHeight * mHeight / mWidth);
|
||||
}
|
||||
outBounds.offset(
|
||||
getHorizontalCenterOffset(mWidth, outBounds.width()), 0 /* dy */);
|
||||
}
|
||||
outAppBounds.offset(getHorizontalCenterOffset(outBounds.width(),
|
||||
outAppBounds.width()), 0 /* dy */);
|
||||
} else {
|
||||
outAppBounds.set(outBounds);
|
||||
outBounds.set(0, 0, mWidth, mHeight);
|
||||
}
|
||||
outAppBounds.set(outBounds);
|
||||
}
|
||||
|
||||
if (rotation != ROTATION_UNDEFINED) {
|
||||
|
||||
@@ -289,14 +289,29 @@ public class SizeCompatTests extends ActivityTestsBase {
|
||||
|
||||
// Move the non-resizable activity to the new display.
|
||||
mStack.reparent(newDisplay.getDefaultTaskDisplayArea(), true /* onTop */);
|
||||
// The configuration bounds should keep the same.
|
||||
// The configuration bounds [820, 0 - 1820, 2500] should keep the same.
|
||||
assertEquals(origWidth, configBounds.width());
|
||||
assertEquals(origHeight, configBounds.height());
|
||||
assertScaled();
|
||||
|
||||
final Rect newDisplayBounds = newDisplay.getWindowConfiguration().getBounds();
|
||||
// The scaled bounds should exclude notch area (1000 - 100 == 360 * 2500 / 1000 = 900).
|
||||
assertEquals(newDisplay.getBounds().height() - notchHeight,
|
||||
assertEquals(newDisplayBounds.height() - notchHeight,
|
||||
(int) ((float) mActivity.getBounds().width() * origHeight / origWidth));
|
||||
|
||||
// Recompute the natural configuration in the new display.
|
||||
mActivity.clearSizeCompatMode();
|
||||
mActivity.ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
|
||||
// Because the display cannot rotate, the portrait activity will fit the short side of
|
||||
// display with keeping portrait bounds [200, 0 - 700, 1000] in center.
|
||||
assertEquals(newDisplayBounds.height(), configBounds.height());
|
||||
assertEquals(configBounds.height() * newDisplayBounds.height() / newDisplayBounds.width(),
|
||||
configBounds.width());
|
||||
assertFitted();
|
||||
// The appBounds should be [200, 100 - 700, 1000].
|
||||
final Rect appBounds = mActivity.getWindowConfiguration().getAppBounds();
|
||||
assertEquals(configBounds.width(), appBounds.width());
|
||||
assertEquals(configBounds.height() - notchHeight, appBounds.height());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user