Merge "Revert "Fix win mode issues for unresizable apps"" into tm-qpr-dev am: 4476d91918

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20584998

Change-Id: I24b9b77696eb590430f2fc6f62fc1f76baac44d1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jerry Chang
2022-12-02 10:06:00 +00:00
committed by Automerger Merge Worker
2 changed files with 26 additions and 59 deletions

View File

@@ -278,31 +278,29 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
// is set with the suggestedDisplayArea. If it is set, but the eventual TaskDisplayArea is // is set with the suggestedDisplayArea. If it is set, but the eventual TaskDisplayArea is
// different, we should recalcuating the bounds. // different, we should recalcuating the bounds.
boolean hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = false; boolean hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = false;
// shouldSetAsOverrideWindowingMode is set if the task needs to retain the launchMode if (suggestedDisplayArea.inFreeformWindowingMode()) {
// regardless of the windowing mode of the parent.
boolean shouldSetAsOverrideWindowingMode = false;
if (launchMode == WINDOWING_MODE_PINNED) { if (launchMode == WINDOWING_MODE_PINNED) {
if (DEBUG) appendLog("picture-in-picture"); if (DEBUG) appendLog("picture-in-picture");
} else if (!root.isResizeable()) { } else if (!root.isResizeable()) {
if (shouldLaunchUnresizableAppInFreeformInFreeformMode(root, suggestedDisplayArea, if (shouldLaunchUnresizableAppInFreeform(root, suggestedDisplayArea, options)) {
options)) { launchMode = WINDOWING_MODE_FREEFORM;
launchMode = WINDOWING_MODE_UNDEFINED;
if (outParams.mBounds.isEmpty()) { if (outParams.mBounds.isEmpty()) {
getTaskBounds(root, suggestedDisplayArea, layout, launchMode, hasInitialBounds, getTaskBounds(root, suggestedDisplayArea, layout, launchMode,
outParams.mBounds); hasInitialBounds, outParams.mBounds);
hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true; hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true;
} }
if (DEBUG) appendLog("unresizable-freeform"); if (DEBUG) appendLog("unresizable-freeform");
} else { } else {
launchMode = WINDOWING_MODE_FULLSCREEN; launchMode = WINDOWING_MODE_FULLSCREEN;
outParams.mBounds.setEmpty(); outParams.mBounds.setEmpty();
shouldSetAsOverrideWindowingMode = true;
if (DEBUG) appendLog("unresizable-forced-maximize"); 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. // If launch mode matches display windowing mode, let it inherit from display.
outParams.mWindowingMode = launchMode == suggestedDisplayArea.getWindowingMode() outParams.mWindowingMode = launchMode == suggestedDisplayArea.getWindowingMode()
&& !shouldSetAsOverrideWindowingMode
? WINDOWING_MODE_UNDEFINED : launchMode; ? WINDOWING_MODE_UNDEFINED : launchMode;
if (phase == PHASE_WINDOWING_MODE) { if (phase == PHASE_WINDOWING_MODE) {
@@ -669,7 +667,7 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
inOutBounds.offset(xOffset, yOffset); inOutBounds.offset(xOffset, yOffset);
} }
private boolean shouldLaunchUnresizableAppInFreeformInFreeformMode(ActivityRecord activity, private boolean shouldLaunchUnresizableAppInFreeform(ActivityRecord activity,
TaskDisplayArea displayArea, @Nullable ActivityOptions options) { TaskDisplayArea displayArea, @Nullable ActivityOptions options) {
if (options != null && options.getLaunchWindowingMode() == WINDOWING_MODE_FULLSCREEN) { if (options != null && options.getLaunchWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
// Do not launch the activity in freeform if it explicitly requested fullscreen mode. // Do not launch the activity in freeform if it explicitly requested fullscreen mode.
@@ -682,7 +680,8 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
final int displayOrientation = orientationFromBounds(displayArea.getBounds()); final int displayOrientation = orientationFromBounds(displayArea.getBounds());
final int activityOrientation = resolveOrientation(activity, displayArea, final int activityOrientation = resolveOrientation(activity, displayArea,
displayArea.getBounds()); displayArea.getBounds());
if (displayOrientation != activityOrientation) { if (displayArea.getWindowingMode() == WINDOWING_MODE_FREEFORM
&& displayOrientation != activityOrientation) {
return true; return true;
} }

View File

@@ -893,11 +893,10 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
} }
@Test @Test
public void testLaunchesPortraitUnresizableOnFreeformLandscapeDisplay() { public void testLaunchesPortraitUnresizableOnFreeformDisplayWithFreeformSizeCompat() {
mAtm.mDevEnableNonResizableMultiWindow = true; mAtm.mDevEnableNonResizableMultiWindow = true;
final TestDisplayContent freeformDisplay = createNewDisplayContent( final TestDisplayContent freeformDisplay = createNewDisplayContent(
WINDOWING_MODE_FREEFORM); WINDOWING_MODE_FREEFORM);
assertTrue(freeformDisplay.getBounds().width() > freeformDisplay.getBounds().height());
final ActivityOptions options = ActivityOptions.makeBasic(); final ActivityOptions options = ActivityOptions.makeBasic();
mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea(); mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE; mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
@@ -905,42 +904,12 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
assertEquals(RESULT_CONTINUE, assertEquals(RESULT_CONTINUE,
new CalculateRequestBuilder().setOptions(options).calculate()); new CalculateRequestBuilder().setOptions(options).calculate());
assertEquals(WINDOWING_MODE_UNDEFINED, mResult.mWindowingMode); assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
}
@Test
public void testLaunchesLandscapeUnresizableOnFreeformLandscapeDisplay() {
mAtm.mDevEnableNonResizableMultiWindow = true;
final TestDisplayContent freeformDisplay = createNewDisplayContent(
WINDOWING_MODE_FREEFORM); 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 @Test
public void testLaunchesUndefinedUnresizableOnFreeformLandscapeDisplay() { public void testSkipsForceMaximizingAppsOnNonFreeformDisplay() {
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() {
final ActivityOptions options = ActivityOptions.makeBasic(); final ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
options.setLaunchBounds(new Rect(0, 0, 200, 100)); options.setLaunchBounds(new Rect(0, 0, 200, 100));
@@ -954,9 +923,8 @@ public class TaskLaunchParamsModifierTests extends WindowTestsBase {
assertEquals(RESULT_CONTINUE, assertEquals(RESULT_CONTINUE,
new CalculateRequestBuilder().setOptions(options).calculate()); new CalculateRequestBuilder().setOptions(options).calculate());
// Non-resizable apps must be launched in fullscreen in a fullscreen display regardless of assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
// other properties. WINDOWING_MODE_FULLSCREEN);
assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
} }
@Test @Test