Improve exit transition for task close case
We got task vanished callback after its transition animation finished, and it lead to cause animation not smooth due to the delay. When task go to close, we will get a task info changed callback first and the top activity is null in this callback task info. We could use it to remove children task info early to reduce the delay to dismiss split. Fix: 263320869 Test: manual Test: pass existing tests Change-Id: I48486e46e539fe4647fc82a82b530d4637e3a544
This commit is contained in:
@@ -727,6 +727,10 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
||||
getRefBounds2(mTempRect);
|
||||
t.setPosition(leash2, mTempRect.left, mTempRect.top)
|
||||
.setWindowCrop(leash2, mTempRect.width(), mTempRect.height());
|
||||
// Make right or bottom side surface always higher than left or top side to avoid weird
|
||||
// animation when dismiss split. e.g. App surface fling above on decor surface.
|
||||
t.setLayer(leash1, 1);
|
||||
t.setLayer(leash2, 2);
|
||||
|
||||
if (mImePositionProcessor.adjustSurfaceLayoutForIme(
|
||||
t, dividerLeash, leash1, leash2, dimLayer1, dimLayer2)) {
|
||||
|
||||
@@ -220,12 +220,20 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
|
||||
mCallbacks.onNoLongerSupportMultiWindow();
|
||||
return;
|
||||
}
|
||||
mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);
|
||||
if (taskInfo.topActivity == null && mChildrenTaskInfo.contains(taskInfo.taskId)
|
||||
&& mChildrenTaskInfo.get(taskInfo.taskId).topActivity != null) {
|
||||
// If top activity become null, it means the task is about to vanish, we use this
|
||||
// signal to remove it from children list earlier for smooth dismiss transition.
|
||||
mChildrenTaskInfo.remove(taskInfo.taskId);
|
||||
mChildrenLeashes.remove(taskInfo.taskId);
|
||||
} else {
|
||||
mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);
|
||||
}
|
||||
mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */,
|
||||
taskInfo.isVisible);
|
||||
if (!ENABLE_SHELL_TRANSITIONS) {
|
||||
updateChildTaskSurface(
|
||||
taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */);
|
||||
if (!ENABLE_SHELL_TRANSITIONS && mChildrenLeashes.contains(taskInfo.taskId)) {
|
||||
updateChildTaskSurface(taskInfo, mChildrenLeashes.get(taskInfo.taskId),
|
||||
false /* firstAppeared */);
|
||||
}
|
||||
} else {
|
||||
throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo
|
||||
|
||||
Reference in New Issue
Block a user