summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java24
-rw-r--r--services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java9
-rw-r--r--services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java33
4 files changed, 60 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index f8e8ca477496..2332000cc571 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -3174,14 +3174,23 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return getWindowConfiguration().canReceiveKeys() && !mWaitForEnteringPinnedMode;
}
- boolean isResizeable() {
- return isResizeable(/* checkPictureInPictureSupport */ true);
+ /**
+ * Returns {@code true} if the fixed orientation, aspect ratio, resizability of this activity
+ * will be ignored.
+ */
+ boolean isUniversalResizeable() {
+ return mWmService.mConstants.mIgnoreActivityOrientationRequest
+ && info.applicationInfo.category != ApplicationInfo.CATEGORY_GAME
+ // If the user preference respects aspect ratio, then it becomes non-resizable.
+ && !mAppCompatController.getAppCompatOverrides().getAppCompatAspectRatioOverrides()
+ .shouldApplyUserMinAspectRatioOverride();
}
- boolean isResizeable(boolean checkPictureInPictureSupport) {
+ boolean isResizeable() {
return mAtmService.mForceResizableActivities
|| ActivityInfo.isResizeableMode(info.resizeMode)
- || (info.supportsPictureInPicture() && checkPictureInPictureSupport)
+ || info.supportsPictureInPicture()
+ || isUniversalResizeable()
// If the activity can be embedded, it should inherit the bounds of task fragment.
|| isEmbedded();
}
@@ -8165,11 +8174,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
@Override
@ActivityInfo.ScreenOrientation
protected int getOverrideOrientation() {
- final int candidateOrientation;
- if (!mWmService.mConstants.mIgnoreActivityOrientationRequest
- || info.applicationInfo.category == ApplicationInfo.CATEGORY_GAME) {
- candidateOrientation = super.getOverrideOrientation();
- } else {
+ int candidateOrientation = super.getOverrideOrientation();
+ if (isUniversalResizeable() && ActivityInfo.isFixedOrientation(candidateOrientation)) {
candidateOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
}
return mAppCompatController.getOrientationPolicy()
diff --git a/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java b/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java
index 51ef87dcab1b..6946b6a71fab 100644
--- a/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java
+++ b/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java
@@ -114,9 +114,6 @@ class AppCompatAspectRatioPolicy {
return mTransparentPolicy.getInheritedMinAspectRatio();
}
final ActivityInfo info = mActivityRecord.info;
- if (info.applicationInfo == null) {
- return info.getMinAspectRatio();
- }
final AppCompatAspectRatioOverrides aspectRatioOverrides =
mAppCompatOverrides.getAppCompatAspectRatioOverrides();
if (aspectRatioOverrides.shouldApplyUserMinAspectRatioOverride()) {
@@ -128,6 +125,9 @@ class AppCompatAspectRatioPolicy {
mActivityRecord);
if (!aspectRatioOverrides.shouldOverrideMinAspectRatio()
&& !shouldOverrideMinAspectRatioForCamera) {
+ if (mActivityRecord.isUniversalResizeable()) {
+ return 0;
+ }
return info.getMinAspectRatio();
}
@@ -170,6 +170,9 @@ class AppCompatAspectRatioPolicy {
if (mTransparentPolicy.isRunning()) {
return mTransparentPolicy.getInheritedMaxAspectRatio();
}
+ if (mActivityRecord.isUniversalResizeable()) {
+ return 0;
+ }
return mActivityRecord.info.getMaxAspectRatio();
}
diff --git a/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java b/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java
index 192469183a54..6e6f76aaa48c 100644
--- a/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java
+++ b/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java
@@ -188,10 +188,6 @@ public class DesktopAppCompatAspectRatioPolicy {
}
final ActivityInfo info = mActivityRecord.info;
- if (info.applicationInfo == null) {
- return info.getMinAspectRatio();
- }
-
final AppCompatAspectRatioOverrides aspectRatioOverrides =
mAppCompatOverrides.getAppCompatAspectRatioOverrides();
if (shouldApplyUserMinAspectRatioOverride(task)) {
@@ -203,6 +199,9 @@ public class DesktopAppCompatAspectRatioPolicy {
&& dc.mAppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord);
if (!aspectRatioOverrides.shouldOverrideMinAspectRatio()
&& !shouldOverrideMinAspectRatioForCamera) {
+ if (mActivityRecord.isUniversalResizeable()) {
+ return 0;
+ }
return info.getMinAspectRatio();
}
@@ -246,6 +245,9 @@ public class DesktopAppCompatAspectRatioPolicy {
if (mTransparentPolicy.isRunning()) {
return mTransparentPolicy.getInheritedMaxAspectRatio();
}
+ if (mActivityRecord.isUniversalResizeable()) {
+ return 0;
+ }
return mActivityRecord.info.getMaxAspectRatio();
}
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 8fa4667c3b24..adc969c40e35 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -4849,6 +4849,39 @@ public class SizeCompatTests extends WindowTestsBase {
}
@Test
+ public void testUniversalResizeable() {
+ mWm.mConstants.mIgnoreActivityOrientationRequest = true;
+ setUpApp(mDisplayContent);
+ final float maxAspect = 1.8f;
+ final float minAspect = 1.5f;
+ prepareLimitedBounds(mActivity, maxAspect, minAspect,
+ ActivityInfo.SCREEN_ORIENTATION_LOCKED, true /* isUnresizable */);
+
+ assertTrue(mActivity.isUniversalResizeable());
+ assertTrue(mActivity.isResizeable());
+ assertFalse(mActivity.shouldCreateAppCompatDisplayInsets());
+ assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, mActivity.getOverrideOrientation());
+ assertEquals(mActivity.getTask().getBounds(), mActivity.getBounds());
+ final AppCompatAspectRatioPolicy aspectRatioPolicy = mActivity.mAppCompatController
+ .getAppCompatAspectRatioPolicy();
+ assertEquals(0, aspectRatioPolicy.getMaxAspectRatio(), 0 /* delta */);
+ assertEquals(0, aspectRatioPolicy.getMinAspectRatio(), 0 /* delta */);
+
+ // Compat override can still take effect.
+ final AppCompatAspectRatioOverrides aspectRatioOverrides =
+ mActivity.mAppCompatController.getAppCompatAspectRatioOverrides();
+ spyOn(aspectRatioOverrides);
+ doReturn(true).when(aspectRatioOverrides).shouldOverrideMinAspectRatio();
+ assertEquals(minAspect, aspectRatioPolicy.getMinAspectRatio(), 0 /* delta */);
+
+ // User override can still take effect.
+ doReturn(true).when(aspectRatioOverrides).shouldApplyUserMinAspectRatioOverride();
+ assertFalse(mActivity.isResizeable());
+ assertEquals(maxAspect, aspectRatioPolicy.getMaxAspectRatio(), 0 /* delta */);
+ assertNotEquals(SCREEN_ORIENTATION_UNSPECIFIED, mActivity.getOverrideOrientation());
+ }
+
+ @Test
public void testClearSizeCompat_resetOverrideConfig() {
final int origDensity = 480;
final int newDensity = 520;