Merge "Revert "Fix win mode issues for unresizable apps"" into tm-qpr-dev
diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
index 3949952..14a2d03 100644
--- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
@@ -277,31 +277,29 @@
         // is set with the suggestedDisplayArea. If it is set, but the eventual TaskDisplayArea is
         // different, we should recalcuating the bounds.
         boolean hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = false;
-        // shouldSetAsOverrideWindowingMode is set if the task needs to retain the launchMode
-        // regardless of the windowing mode of the parent.
-        boolean shouldSetAsOverrideWindowingMode = false;
-        if (launchMode == WINDOWING_MODE_PINNED) {
-            if (DEBUG) appendLog("picture-in-picture");
-        } else if (!root.isResizeable()) {
-            if (shouldLaunchUnresizableAppInFreeformInFreeformMode(root, suggestedDisplayArea,
-                    options)) {
-                launchMode = WINDOWING_MODE_UNDEFINED;
-                if (outParams.mBounds.isEmpty()) {
-                    getTaskBounds(root, suggestedDisplayArea, layout, launchMode, hasInitialBounds,
-                            outParams.mBounds);
-                    hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true;
+        if (suggestedDisplayArea.inFreeformWindowingMode()) {
+            if (launchMode == WINDOWING_MODE_PINNED) {
+                if (DEBUG) appendLog("picture-in-picture");
+            } else if (!root.isResizeable()) {
+                if (shouldLaunchUnresizableAppInFreeform(root, suggestedDisplayArea, options)) {
+                    launchMode = WINDOWING_MODE_FREEFORM;
+                    if (outParams.mBounds.isEmpty()) {
+                        getTaskBounds(root, suggestedDisplayArea, layout, launchMode,
+                                hasInitialBounds, outParams.mBounds);
+                        hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true;
+                    }
+                    if (DEBUG) appendLog("unresizable-freeform");
+                } else {
+                    launchMode = WINDOWING_MODE_FULLSCREEN;
+                    outParams.mBounds.setEmpty();
+                    if (DEBUG) appendLog("unresizable-forced-maximize");
                 }
-                if (DEBUG) appendLog("unresizable-freeform");
-            } else {
-                launchMode = WINDOWING_MODE_FULLSCREEN;
-                outParams.mBounds.setEmpty();
-                shouldSetAsOverrideWindowingMode = true;
-                if (DEBUG) appendLog("unresizable-forced-maximize");
             }
+        } else {
+            if (DEBUG) appendLog("non-freeform-task-display-area");
         }
         // If launch mode matches display windowing mode, let it inherit from display.
         outParams.mWindowingMode = launchMode == suggestedDisplayArea.getWindowingMode()
-                && !shouldSetAsOverrideWindowingMode
                 ? WINDOWING_MODE_UNDEFINED : launchMode;
 
         if (phase == PHASE_WINDOWING_MODE) {
@@ -652,7 +650,7 @@
         inOutBounds.offset(xOffset, yOffset);
     }
 
-    private boolean shouldLaunchUnresizableAppInFreeformInFreeformMode(ActivityRecord activity,
+    private boolean shouldLaunchUnresizableAppInFreeform(ActivityRecord activity,
             TaskDisplayArea displayArea, @Nullable ActivityOptions options) {
         if (options != null && options.getLaunchWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
             // Do not launch the activity in freeform if it explicitly requested fullscreen mode.
@@ -665,7 +663,8 @@
         final int displayOrientation = orientationFromBounds(displayArea.getBounds());
         final int activityOrientation = resolveOrientation(activity, displayArea,
                 displayArea.getBounds());
-        if (displayOrientation != activityOrientation) {
+        if (displayArea.getWindowingMode() == WINDOWING_MODE_FREEFORM
+                && displayOrientation != activityOrientation) {
             return true;
         }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
index 2a88eb0..1188f49 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -825,11 +825,10 @@
     }
 
     @Test
-    public void testLaunchesPortraitUnresizableOnFreeformLandscapeDisplay() {
+    public void testLaunchesPortraitUnresizableOnFreeformDisplayWithFreeformSizeCompat() {
         mAtm.mDevEnableNonResizableMultiWindow = true;
         final TestDisplayContent freeformDisplay = createNewDisplayContent(
                 WINDOWING_MODE_FREEFORM);
-        assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
         final ActivityOptions options = ActivityOptions.makeBasic();
         mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
         mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
@@ -837,42 +836,12 @@
         assertEquals(RESULT_CONTINUE,
                 new CalculateRequestBuilder().setOptions(options).calculate());
 
-        assertEquals(WINDOWING_MODE_UNDEFINED, mResult.mWindowingMode);
-    }
-
-    @Test
-    public void testLaunchesLandscapeUnresizableOnFreeformLandscapeDisplay() {
-        mAtm.mDevEnableNonResizableMultiWindow = true;
-        final TestDisplayContent freeformDisplay = createNewDisplayContent(
+        assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
-        assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
-        final ActivityOptions options = ActivityOptions.makeBasic();
-        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
-        mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
-        mActivity.info.screenOrientation = SCREEN_ORIENTATION_LANDSCAPE;
-        assertEquals(RESULT_CONTINUE,
-                new CalculateRequestBuilder().setOptions(options).calculate());
-
-        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
     }
 
     @Test
-    public void testLaunchesUndefinedUnresizableOnFreeformLandscapeDisplay() {
-        mAtm.mDevEnableNonResizableMultiWindow = true;
-        final TestDisplayContent freeformDisplay = createNewDisplayContent(
-                WINDOWING_MODE_FREEFORM);
-        assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
-        final ActivityOptions options = ActivityOptions.makeBasic();
-        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
-        mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
-        assertEquals(RESULT_CONTINUE,
-                new CalculateRequestBuilder().setOptions(options).calculate());
-
-        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
-    }
-
-    @Test
-    public void testForceMaximizingAppsOnNonFreeformDisplay() {
+    public void testSkipsForceMaximizingAppsOnNonFreeformDisplay() {
         final ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
         options.setLaunchBounds(new Rect(0, 0, 200, 100));
@@ -886,9 +855,8 @@
         assertEquals(RESULT_CONTINUE,
                 new CalculateRequestBuilder().setOptions(options).calculate());
 
-        // Non-resizable apps must be launched in fullscreen in a fullscreen display regardless of
-        // other properties.
-        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
+        assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
+                WINDOWING_MODE_FULLSCREEN);
     }
 
     @Test