summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jerry Chang <chenghsiuchang@google.com> 2023-05-24 13:05:05 +0000
committer Jerry Chang <chenghsiuchang@google.com> 2023-06-02 12:23:23 +0000
commitc67d535eecfc17050e4994b51ae22d46c345b498 (patch)
treebc5d20d0dc83fe20869e11ff923bfc459f6e4852
parent51e65b5aac627738e3b5a7bc2a887bf2a2fafb05 (diff)
Consolidate adjacent launch while having a background split pair
Launch with launch_adjacent flag will launch the activity to the adjacent side of the source task and any of the following trampoline launches should be launched into the same side of its source task. Even if the trampoline launch reusing one of the splitting tasks in the background. This makes sure to evicts old child tasks to prevent interfering with the new split pair. Bug: 279720005 Test: atest WMShellUnitTests WMShellFlickerTests Test: having Chrome in a background split pair, click a link on Messages, it composes Chrome - Messages pair properly no matter what stage Chrome was placed in the background. Change-Id: I6a8d0cd0000dd13ffdb21a27c927aec03151aabf
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java10
1 files changed, 8 insertions, 2 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index b2526ee97a21..e7962a573149 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -1478,6 +1478,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
// If running background, we need to reparent current top visible task to main stage.
if (!isSplitScreenVisible()) {
+ // Ensure to evict old splitting tasks because the new split pair might be composed by
+ // one of the splitting tasks, evicting the task when finishing entering transition
+ // won't guarantee to put the task to the indicated new position.
+ mMainStage.evictAllChildren(wct);
mMainStage.reparentTopTask(wct);
prepareSplitLayout(wct);
}
@@ -2307,8 +2311,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
mSplitTransitions.setDismissTransition(transition, dismissTop,
EXIT_REASON_APP_FINISHED);
} else if (!isSplitScreenVisible() && isOpening) {
- // If split running backgroud and trigger task is appearing into split,
- // prepare to enter split screen.
+ // If split is running in the background and the trigger task is appearing into
+ // split, prepare to enter split screen.
+ setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, out);
prepareEnterSplitScreen(out);
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
@@ -2334,6 +2339,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
if (isOpening && getStageOfTask(triggerTask) != null) {
// One task is appearing into split, prepare to enter split screen.
out = new WindowContainerTransaction();
+ setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, out);
prepareEnterSplitScreen(out);
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);