Merge "Revert "Fix win mode issues for unresizable apps"" into tm-qpr-dev

This commit is contained in:
Jerry Chang
2022-12-02 09:15:11 +00:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 59 deletions

View File

@@ -277,31 +277,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. if (launchMode == WINDOWING_MODE_PINNED) {
boolean shouldSetAsOverrideWindowingMode = false; if (DEBUG) appendLog("picture-in-picture");
if (launchMode == WINDOWING_MODE_PINNED) { } else if (!root.isResizeable()) {
if (DEBUG) appendLog("picture-in-picture"); if (shouldLaunchUnresizableAppInFreeform(root, suggestedDisplayArea, options)) {
} else if (!root.isResizeable()) { launchMode = WINDOWING_MODE_FREEFORM;
if (shouldLaunchUnresizableAppInFreeformInFreeformMode(root, suggestedDisplayArea, if (outParams.mBounds.isEmpty()) {
options)) { getTaskBounds(root, suggestedDisplayArea, layout, launchMode,
launchMode = WINDOWING_MODE_UNDEFINED; hasInitialBounds, outParams.mBounds);
if (outParams.mBounds.isEmpty()) { hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true;
getTaskBounds(root, suggestedDisplayArea, layout, launchMode, hasInitialBounds, }
outParams.mBounds); if (DEBUG) appendLog("unresizable-freeform");
hasInitialBoundsForSuggestedDisplayAreaInFreeformMode = true; } 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. // 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) {
@@ -652,7 +650,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.
@@ -665,7 +663,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

@@ -825,11 +825,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;
@@ -837,42 +836,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));
@@ -886,9 +855,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