Merge "Pass in window layout when setting initial state."

This commit is contained in:
TreeHugger Robot
2018-10-16 20:24:49 +00:00
committed by Android (Google) Code Review
4 changed files with 20 additions and 30 deletions

View File

@@ -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;

View File

@@ -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,

View File

@@ -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());
}

View File

@@ -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);
}
@@ -712,21 +712,6 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase {
assertEquals(new Rect(900, 486, 1020, 594), mResult.mBounds);
}
@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(