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
This commit is contained in:
Jerry Chang
2021-03-24 22:50:52 +08:00
parent c296c46843
commit 78f17f568b

View File

@@ -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;
}
}