Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a47e6a6 authored by Tony Huang's avatar Tony Huang
Browse files

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
parent b89627e9
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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)) {
+12 −4
Original line number Diff line number Diff line
@@ -220,12 +220,20 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
                mCallbacks.onNoLongerSupportMultiWindow();
                return;
            }
            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