summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java13
2 files changed, 15 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index b5b82d39b921..5a6e0a1ff9c3 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -6535,14 +6535,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final Configuration resolvedConfig = getResolvedOverrideConfiguration();
final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds();
final int requestedOrientation = getRequestedConfigurationOrientation();
- final boolean orientationRequested = requestedOrientation != ORIENTATION_UNDEFINED;
+ final boolean orientationRequested = requestedOrientation != ORIENTATION_UNDEFINED
+ && !mDisplayContent.ignoreRotationForApps();
final int orientation = orientationRequested
? requestedOrientation
: newParentConfiguration.orientation;
int rotation = newParentConfiguration.windowConfiguration.getRotation();
final boolean canChangeOrientation = handlesOrientationChangeFromDescendant();
- if (canChangeOrientation && mCompatDisplayInsets.mIsRotatable
- && !mCompatDisplayInsets.mIsFloating) {
+ if (canChangeOrientation && !mCompatDisplayInsets.mIsFloating) {
// Use parent rotation because the original display can rotate by requested orientation.
resolvedConfig.windowConfiguration.setRotation(rotation);
} else {
@@ -7628,7 +7628,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
private final int mWidth;
private final int mHeight;
final boolean mIsFloating;
- final boolean mIsRotatable;
/**
* The nonDecorInsets for each rotation. Includes the navigation bar and cutout insets. It
@@ -7645,7 +7644,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
/** Constructs the environment to simulate the bounds behavior of the given container. */
CompatDisplayInsets(DisplayContent display, WindowContainer container) {
mIsFloating = container.getWindowConfiguration().tasksAreFloating();
- mIsRotatable = !mIsFloating && !display.ignoreRotationForApps();
if (mIsFloating) {
final Rect containerBounds = container.getWindowConfiguration().getBounds();
mWidth = containerBounds.width();
@@ -7702,7 +7700,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return;
}
- if (mIsRotatable && canChangeOrientation) {
+ if (canChangeOrientation) {
getBoundsByRotation(outBounds, rotation);
if (orientationRequested) {
getFrameByOrientation(outAppBounds, orientation);
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 e47792f4920c..68bc58493f13 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -138,7 +138,7 @@ public class SizeCompatTests extends ActivityTestsBase {
// Rotation is ignored so because the display size is close to square (700/600<1.333).
assertTrue(mActivity.mDisplayContent.ignoreRotationForApps());
- final Rect displayBounds = mActivity.mDisplayContent.getBounds();
+ final Rect displayBounds = mActivity.mDisplayContent.getWindowConfiguration().getBounds();
final float aspectRatio = 1.2f;
mActivity.info.minAspectRatio = mActivity.info.maxAspectRatio = aspectRatio;
prepareUnresizable(-1f, SCREEN_ORIENTATION_UNSPECIFIED);
@@ -160,13 +160,22 @@ public class SizeCompatTests extends ActivityTestsBase {
assertFitted();
// After the orientation of activity is changed, even display is not rotated, the aspect
- // ratio should be the same (bounds=[0, 0 - 600, 600], appBounds=[0, 100 - 600, 600]).
+ // ratio should be the same (appBounds=[9, 100 - 592, 800], x-offset=round((600-583)/2)=9).
assertEquals(appBounds.width(), appBounds.height() * aspectRatio, 0.5f /* delta */);
// The notch is still on top.
assertEquals(mActivity.getBounds().height(), appBounds.height() + notchHeight);
mActivity.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT);
assertFitted();
+
+ // Close-to-square display can rotate without being restricted by the requested orientation.
+ // The notch becomes on the left side. The activity is horizontal centered in 100 ~ 800.
+ // So the bounds and appBounds will be [200, 0 - 700, 600] (500x600) that is still fitted.
+ // Left = 100 + (800 - 100 - 500) / 2 = 200.
+ rotateDisplay(mActivity.mDisplayContent, ROTATION_90);
+ assertFitted();
+ assertEquals(appBounds.left,
+ notchHeight + (displayBounds.width() - notchHeight - appBounds.width()) / 2);
}
@Test