From 78f17f568bb7986cf4a32e609630cebe1f06fbc6 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Wed, 24 Mar 2021 22:50:52 +0800 Subject: Fix not able to put app in split after removed task from side stage Relies on reorder operation instead of setHidden operation to control visibility of side stage. When removing task from side stage, keep side stage visible if there's task remaining on side stage. Fix: 180631194 Test: atest WMShellUnitTests Test: manual check drop to split works after removeFromSideStage Change-Id: I5a92bf33d1d447d4c4e28bb97e3e337927ffb875 --- .../src/com/android/wm/shell/splitscreen/SideStage.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'libs') diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java index e7cd38fb4bca..01a81d2ff5e0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java @@ -40,15 +40,17 @@ class SideStage extends StageTaskListener { void addTask(ActivityManager.RunningTaskInfo task, Rect rootBounds, WindowContainerTransaction wct) { final WindowContainerToken rootToken = mRootTaskInfo.token; - wct.setHidden(rootToken, false) - .setBounds(rootToken, rootBounds) + wct.setBounds(rootToken, rootBounds) .reparent(task.token, rootToken, true /* onTop*/) // Moving the root task to top after the child tasks were repareted , or the root // task cannot be visible and focused. - .reorder(rootToken, true); + .reorder(rootToken, true /* onTop */); } boolean removeAllTasks(WindowContainerTransaction wct, boolean toTop) { + // No matter if the root task is empty or not, moving the root to bottom because it no + // longer preserves visible child task. + wct.reorder(mRootTaskInfo.token, false /* onTop */); if (mChildrenTaskInfo.size() == 0) return false; wct.reparentTasks( mRootTaskInfo.token, @@ -62,10 +64,7 @@ class SideStage extends StageTaskListener { boolean removeTask(int taskId, WindowContainerToken newParent, WindowContainerTransaction wct) { final ActivityManager.RunningTaskInfo task = mChildrenTaskInfo.get(taskId); if (task == null) return false; - - wct.setHidden(mRootTaskInfo.token, true) - .reorder(mRootTaskInfo.token, false) - .reparent(task.token, newParent, false /* onTop */); + wct.reparent(task.token, newParent, false /* onTop */); return true; } } -- cgit v1.2.3-59-g8ed1b