Merge "Test aspect ratio restrictions not applied to resizeable activities in desktop" into main
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 96b11a8..07ee09a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -185,31 +185,46 @@
     }
 
     private ActivityRecord setUpApp(DisplayContent display) {
-        return setUpApp(display, null /* appBuilder */);
+        return setUpApp(display, null /* appBuilder */, null /* taskBuilder */);
     }
 
     private ActivityRecord setUpApp(DisplayContent display, ActivityBuilder appBuilder) {
+        return setUpApp(display, appBuilder, null /* taskBuilder */);
+    }
+
+    private ActivityRecord setUpApp(DisplayContent display, ActivityBuilder aBuilder,
+            TaskBuilder tBuilder) {
         // Use the real package name (com.android.frameworks.wmtests) so that
         // EnableCompatChanges/DisableCompatChanges can take effect.
         // Otherwise the fake WindowTestsBase.DEFAULT_COMPONENT_PACKAGE_NAME will make
         // PlatformCompat#isChangeEnabledByPackageName always return default value.
         final ComponentName componentName = ComponentName.createRelative(
                 mContext, SizeCompatTests.class.getName());
-        mTask = new TaskBuilder(mSupervisor).setDisplay(display).setComponent(componentName)
+        final TaskBuilder taskBuilder = tBuilder != null ? tBuilder : new TaskBuilder(mSupervisor);
+        mTask = taskBuilder.setDisplay(display).setComponent(componentName)
                 .build();
-        final ActivityBuilder builder = appBuilder != null ? appBuilder : new ActivityBuilder(mAtm);
-        mActivity = builder.setTask(mTask).setComponent(componentName).build();
+        final ActivityBuilder appBuilder = aBuilder != null ? aBuilder : new ActivityBuilder(mAtm);
+        mActivity = appBuilder.setTask(mTask).setComponent(componentName).build();
         doReturn(false).when(mActivity).isImmersiveMode(any());
         return mActivity;
     }
 
     private ActivityRecord setUpDisplaySizeWithApp(int dw, int dh) {
-        return setUpDisplaySizeWithApp(dw, dh, null /* appBuilder */);
+        return setUpDisplaySizeWithApp(dw, dh, null /* appBuilder */, null /* taskBuilder */);
     }
 
     private ActivityRecord setUpDisplaySizeWithApp(int dw, int dh, ActivityBuilder appBuilder) {
+        return setUpDisplaySizeWithApp(dw, dh, appBuilder, null /* taskBuilder */);
+    }
+
+    private ActivityRecord setUpDisplaySizeWithApp(int dw, int dh, TaskBuilder taskBuilder) {
+        return setUpDisplaySizeWithApp(dw, dh, null /* appBuilder */, taskBuilder);
+    }
+
+    private ActivityRecord setUpDisplaySizeWithApp(int dw, int dh, ActivityBuilder appBuilder,
+            TaskBuilder taskBuilder) {
         final TestDisplayContent.Builder builder = new TestDisplayContent.Builder(mAtm, dw, dh);
-        return setUpApp(builder.build(), appBuilder);
+        return setUpApp(builder.build(), appBuilder, taskBuilder);
     }
 
     private void setUpLargeScreenDisplayWithApp(int dw, int dh) {
@@ -4469,6 +4484,80 @@
         assertEquals(new Rect(0, 0, 1000, 2800), bounds);
     }
 
+    @Test
+    @EnableFlags(Flags.FLAG_IGNORE_ASPECT_RATIO_RESTRICTIONS_FOR_RESIZEABLE_FREEFORM_ACTIVITIES)
+    public void testUserAspectRatioOverridesNotAppliedToResizeableFreeformActivity() {
+        final TaskBuilder taskBuilder =
+                new TaskBuilder(mSupervisor).setWindowingMode(WINDOWING_MODE_FREEFORM);
+        setUpDisplaySizeWithApp(2500, 1600, taskBuilder);
+
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+        spyOn(mActivity.mWmService.mAppCompatConfiguration);
+        doReturn(true).when(mActivity.mWmService.mAppCompatConfiguration)
+                .isUserAppAspectRatioSettingsEnabled();
+        final AppCompatController appCompatController = mActivity.mAppCompatController;
+        final AppCompatAspectRatioOverrides aspectRatioOverrides =
+                appCompatController.getAppCompatAspectRatioOverrides();
+        spyOn(aspectRatioOverrides);
+        // Set user aspect ratio override.
+        doReturn(USER_MIN_ASPECT_RATIO_16_9).when(aspectRatioOverrides)
+                .getUserMinAspectRatioOverrideCode();
+
+        prepareLimitedBounds(mActivity, SCREEN_ORIENTATION_PORTRAIT, /* isUnresizable= */ false);
+        assertFalse(appCompatController.getAppCompatAspectRatioPolicy().isAspectRatioApplied());
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_IGNORE_ASPECT_RATIO_RESTRICTIONS_FOR_RESIZEABLE_FREEFORM_ACTIVITIES)
+    public void testUserAspectRatioOverridesAppliedToNonResizeableFreeformActivity() {
+        final TaskBuilder taskBuilder =
+                new TaskBuilder(mSupervisor).setWindowingMode(WINDOWING_MODE_FREEFORM);
+        setUpDisplaySizeWithApp(2500, 1600, taskBuilder);
+
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+        spyOn(mActivity.mWmService.mAppCompatConfiguration);
+        doReturn(true).when(mActivity.mWmService.mAppCompatConfiguration)
+                .isUserAppAspectRatioSettingsEnabled();
+        final AppCompatController appCompatController = mActivity.mAppCompatController;
+        final AppCompatAspectRatioOverrides aspectRatioOverrides =
+                appCompatController.getAppCompatAspectRatioOverrides();
+        spyOn(aspectRatioOverrides);
+        // Set user aspect ratio override.
+        doReturn(USER_MIN_ASPECT_RATIO_16_9).when(aspectRatioOverrides)
+                .getUserMinAspectRatioOverrideCode();
+
+        prepareLimitedBounds(mActivity, SCREEN_ORIENTATION_PORTRAIT, /* isUnresizable= */ true);
+        assertTrue(appCompatController.getAppCompatAspectRatioPolicy().isAspectRatioApplied());
+    }
+
+    @Test
+    @EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
+            ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
+    @EnableFlags(Flags.FLAG_IGNORE_ASPECT_RATIO_RESTRICTIONS_FOR_RESIZEABLE_FREEFORM_ACTIVITIES)
+    public void testSystemAspectRatioOverridesNotAppliedToResizeableFreeformActivity() {
+        final TaskBuilder taskBuilder =
+                new TaskBuilder(mSupervisor).setWindowingMode(WINDOWING_MODE_FREEFORM);
+        setUpDisplaySizeWithApp(2500, 1600, taskBuilder);
+        prepareLimitedBounds(mActivity, SCREEN_ORIENTATION_PORTRAIT, /* isUnresizable= */ false);
+
+        assertFalse(mActivity.mAppCompatController.getAppCompatAspectRatioPolicy()
+                .isAspectRatioApplied());
+    }
+
+    @Test
+    @EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
+            ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
+    @EnableFlags(Flags.FLAG_IGNORE_ASPECT_RATIO_RESTRICTIONS_FOR_RESIZEABLE_FREEFORM_ACTIVITIES)
+    public void testSystemAspectRatioOverridesAppliedToNonResizeableFreeformActivity() {
+        final TaskBuilder taskBuilder =
+                new TaskBuilder(mSupervisor).setWindowingMode(WINDOWING_MODE_FREEFORM);
+        setUpDisplaySizeWithApp(2500, 1600, taskBuilder);
+        prepareLimitedBounds(mActivity, SCREEN_ORIENTATION_PORTRAIT, /* isUnresizable= */ true);
+
+        assertTrue(mActivity.mAppCompatController.getAppCompatAspectRatioPolicy()
+                .isAspectRatioApplied());
+    }
+
     private void assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
             float letterboxVerticalPositionMultiplier, Rect fixedOrientationLetterbox,
             Rect sizeCompatUnscaled, Rect sizeCompatScaled) {