diff options
| author | 2023-05-24 13:05:05 +0000 | |
|---|---|---|
| committer | 2023-06-02 12:23:23 +0000 | |
| commit | c67d535eecfc17050e4994b51ae22d46c345b498 (patch) | |
| tree | bc5d20d0dc83fe20869e11ff923bfc459f6e4852 | |
| parent | 51e65b5aac627738e3b5a7bc2a887bf2a2fafb05 (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.java | 10 |
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); |