From 72f2d8303b4cd6d97a36c2f8d54605308cbaf9f0 Mon Sep 17 00:00:00 2001 From: Tony Huang Date: Fri, 21 Jul 2023 07:20:36 +0000 Subject: [PATCH] Clear pair in recents if exit by other components Split could exit by other components, but in such situation split will not handle the transition, so we could clear pair in recents when the founction called. Fix: 292184502 Test: manual Test: pass existing tests Change-Id: I20d8d55c3f3f28d01407398b6de3cc7828e0caca --- .../Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java | 3 ++- .../android/wm/shell/splitscreen/SplitScreenController.java | 3 ++- .../src/com/android/wm/shell/splitscreen/StageCoordinator.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index 08da4857a0b0a..8ededb1a918b9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -590,7 +590,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, SplitScreenController split = mSplitScreenOptional.get(); if (split.isTaskInSplitScreen(mTaskInfo.lastParentTaskIdBeforePip)) { split.prepareExitSplitScreen(wct, split.getStageOfTask( - mTaskInfo.lastParentTaskIdBeforePip)); + mTaskInfo.lastParentTaskIdBeforePip), + SplitScreenController.EXIT_REASON_APP_FINISHED); } } mPipTransitionController.startExitTransition(TRANSIT_EXIT_PIP, wct, destinationBounds); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java index 7699b4bfd13a6..5fa26542ee075 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java @@ -423,8 +423,9 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, * transition. */ public void prepareExitSplitScreen(WindowContainerTransaction wct, - @StageType int stageToTop) { + @StageType int stageToTop, @ExitReason int reason) { mStageCoordinator.prepareExitSplitScreen(stageToTop, wct); + mStageCoordinator.clearSplitPairedInRecents(reason); } public void enterSplitScreen(int taskId, boolean leftOrTop) { 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 7d62f58014f00..7d148224c2920 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 @@ -1494,7 +1494,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, } } - private void clearSplitPairedInRecents(@ExitReason int exitReason) { + void clearSplitPairedInRecents(@ExitReason int exitReason) { if (!shouldBreakPairedTaskInRecents(exitReason) || !mShouldUpdateRecents) return; mRecentTasks.ifPresent(recentTasks -> {