diff options
4 files changed, 20 insertions, 30 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index c92e48fd5f1a..afcf9f98caa2 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1606,8 +1606,8 @@ class ActivityStarter { mLaunchParams.reset(); - mSupervisor.getLaunchParamsController().calculate(inTask, null /*layout*/, r, sourceRecord, - options, mLaunchParams); + mSupervisor.getLaunchParamsController().calculate(inTask, r.info.windowLayout, r, + sourceRecord, options, mLaunchParams); if (mLaunchParams.hasPreferredDisplay()) { mPreferredDisplayId = mLaunchParams.mPreferredDisplayId; diff --git a/services/core/java/com/android/server/am/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/am/TaskLaunchParamsModifier.java index 7bd84e23af81..eae28127a67f 100644 --- a/services/core/java/com/android/server/am/TaskLaunchParamsModifier.java +++ b/services/core/java/com/android/server/am/TaskLaunchParamsModifier.java @@ -131,16 +131,16 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier { } // STEP 2: Resolve launch windowing mode. // STEP 2.1: Determine if any parameter has specified initial bounds. That might be the - // launch bounds from activity options, or size/gravity passed in layout. It also treat the + // launch bounds from activity options, or size/gravity passed in layout. It also treats the // launch windowing mode in options as a suggestion for future resolution. int launchMode = options != null ? options.getLaunchWindowingMode() : WINDOWING_MODE_UNDEFINED; // hasInitialBounds is set if either activity options or layout has specified bounds. If // that's set we'll skip some adjustments later to avoid overriding the initial bounds. boolean hasInitialBounds = false; - final boolean canApplyFreeformPolicy = - canApplyFreeformWindowPolicy(display, root, launchMode); - if (mSupervisor.canUseActivityOptionsLaunchBounds(options) && canApplyFreeformPolicy) { + final boolean canApplyFreeformPolicy = canApplyFreeformWindowPolicy(display, launchMode); + if (mSupervisor.canUseActivityOptionsLaunchBounds(options) + && (canApplyFreeformPolicy || canApplyPipWindowPolicy(launchMode))) { hasInitialBounds = true; launchMode = launchMode == WINDOWING_MODE_UNDEFINED ? WINDOWING_MODE_FREEFORM @@ -279,10 +279,14 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier { return displayId; } - private boolean canApplyFreeformWindowPolicy(@NonNull ActivityDisplay display, - @NonNull ActivityRecord root, int launchMode) { - return display.inFreeformWindowingMode() || launchMode == WINDOWING_MODE_FREEFORM - || root.isResizeable(); + private boolean canApplyFreeformWindowPolicy(@NonNull ActivityDisplay display, int launchMode) { + return mSupervisor.mService.mSupportsFreeformWindowManagement + && (display.inFreeformWindowingMode() || launchMode == WINDOWING_MODE_FREEFORM); + } + + private boolean canApplyPipWindowPolicy(int launchMode) { + return mSupervisor.mService.mSupportsPictureInPicture + && launchMode == WINDOWING_MODE_PINNED; } private void getLayoutBounds(@NonNull ActivityDisplay display, @NonNull ActivityRecord root, diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java index f143e3541cc0..062c044ac3e3 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java @@ -411,8 +411,9 @@ public class ActivityStarterTests extends ActivityTestsBase { .setActivityOptions(new SafeActivityOptions(options)) .execute(); - // verify that values are passed to the modifier. - verify(modifier, times(1)).onCalculate(any(), eq(windowLayout), any(), any(), eq(options), + // verify that values are passed to the modifier. Values are passed twice -- once for + // setting initial state, another when task is created. + verify(modifier, times(2)).onCalculate(any(), eq(windowLayout), any(), any(), eq(options), any(), any()); } diff --git a/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java b/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java index 0d1302f78316..ea1320ce3b83 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java @@ -189,7 +189,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null, mActivity, /* source */ null, options, mCurrent, mResult)); - assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode, + assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode, WINDOWING_MODE_FULLSCREEN); } @@ -277,7 +277,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { } @Test - public void testNonEmptyLayoutInfersFreeformWithResizeableActivity() { + public void testNonEmptyLayoutUsesFullscreenWithResizeableActivity() { final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder() .setWidth(120).setHeight(80).build(); @@ -286,7 +286,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity, /* source */ null, /* options */ null, mCurrent, mResult)); - assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode, + assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode, WINDOWING_MODE_FULLSCREEN); } @@ -713,21 +713,6 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { } @Test - public void testNonEmptyLayoutBoundsWithResizeableActivity() { - final ActivityDisplay display = mSupervisor.getActivityDisplay(DEFAULT_DISPLAY); - display.setBounds(new Rect(0, 0, 1920, 1080)); - final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder() - .setWidth(120).setHeight(80).build(); - - mCurrent.mPreferredDisplayId = DEFAULT_DISPLAY; - - assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity, - /* source */ null, /* options */ null, mCurrent, mResult)); - - assertEquals(new Rect(900, 500, 1020, 580), mResult.mBounds); - } - - @Test public void testRespectBoundsFromFullyResolvedCurrentParam_NonEmptyBounds() { final TestActivityDisplay freeformDisplay = createNewActivityDisplay( WINDOWING_MODE_FREEFORM); |