Consider sourceRecord when launching with adjacent flag

We should consider the sourceRecord if launching with adjacent flag,
otherwise the other split is empty. This CL ignores the flag if
there is no sourceRecord present during the launching.

Bug: 224881987
Test: atest ActivityStarterTests
Change-Id: I1f4c788538e6cfeb4fa6286423ddc049dd6c6389
This commit is contained in:
Jeff Chang
2022-05-20 16:03:22 +08:00
parent 2d0fcc46e1
commit e9c7b90a38
2 changed files with 13 additions and 9 deletions

View File

@@ -2451,6 +2451,11 @@ class ActivityStarter {
}
}
if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0 && mSourceRecord == null) {
// ignore the flag if there is no the sourceRecord
mLaunchFlags &= ~FLAG_ACTIVITY_LAUNCH_ADJACENT;
}
// We'll invoke onUserLeaving before onPause only if the launching
// activity did not explicitly state that this is an automated launch.
mSupervisor.mUserLeaving = (mLaunchFlags & FLAG_ACTIVITY_NO_USER_ACTION) == 0;

View File

@@ -1120,28 +1120,27 @@ public class ActivityStarterTests extends WindowTestsBase {
}
@Test
public void testTargetStackInSplitScreen() {
public void testTargetTaskInSplitScreen() {
final ActivityStarter starter =
prepareStarter(FLAG_ACTIVITY_LAUNCH_ADJACENT, false /* mockGetRootTask */);
final ActivityRecord top = new ActivityBuilder(mAtm).setCreateTask(true).build();
final ActivityOptions options = ActivityOptions.makeBasic();
final ActivityRecord[] outActivity = new ActivityRecord[1];
// Activity must not land on split-screen stack if currently not in split-screen mode.
// Activity must not land on split-screen task if currently not in split-screen mode.
starter.setActivityOptions(options.toBundle())
.setReason("testWindowingModeOptionsLaunchAdjacent")
.setReason("testTargetTaskInSplitScreen")
.setOutActivity(outActivity).execute();
assertThat(outActivity[0].inMultiWindowMode()).isFalse();
// Move activity to split-screen-primary stack and make sure it has the focus.
// Move activity to split-screen-primary task and make sure it has the focus.
TestSplitOrganizer splitOrg = new TestSplitOrganizer(mAtm, top.getDisplayContent());
top.getRootTask().reparent(splitOrg.mPrimary, POSITION_BOTTOM);
top.getRootTask().moveToFront("testWindowingModeOptionsLaunchAdjacent");
top.getRootTask().moveToFront("testTargetTaskInSplitScreen");
// Activity must landed on split-screen-secondary when launch adjacent.
starter.setActivityOptions(options.toBundle())
.setReason("testWindowingModeOptionsLaunchAdjacent")
.setOutActivity(outActivity).execute();
// Activity must land on split-screen-secondary when launch adjacent.
startActivityInner(starter, outActivity[0], top, options, null /* inTask */,
null /* taskFragment*/);
assertThat(outActivity[0].inMultiWindowMode()).isTrue();
}