From e9c7b90a38a593a0b046cac3ce75404ae67d36a7 Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Fri, 20 May 2022 16:03:22 +0800 Subject: [PATCH] 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 --- .../com/android/server/wm/ActivityStarter.java | 5 +++++ .../android/server/wm/ActivityStarterTests.java | 17 ++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index c1e1a39dd09bf..5f264e70ab1e2 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -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; diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java index b9432753c17fb..ff0f06126ac79 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java @@ -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(); }