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

Commit ac3dd218 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Merge closing transition when recents is running

If the incoming transition clears all pausing task, the handler
only needs to consume it because the task is either already
disappearing by swipe-up animation or is kept showing on recents.
Otherwise it may go DefaultTransitionHandler and apply a weird
animation depends on the change info.

Bug: 279142303
Test: When swipe-to-home animation is running, the current task
      finishes itself. There should be no additional animation.
Change-Id: Id671e0cc3ddb3736e1e33f14138dacbe05631c9c
parent f0a75620
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -549,6 +549,14 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler {
                // are in mOpening.
                for (int i = 0; i < closingTasks.size(); ++i) {
                    final TransitionInfo.Change change = closingTasks.get(i);
                    final int pausingIdx = TaskState.indexOf(mPausingTasks, change);
                    if (pausingIdx >= 0) {
                        mPausingTasks.remove(pausingIdx);
                        didMergeThings = true;
                        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
                                "  closing pausing taskId=%d", change.getTaskInfo().taskId);
                        continue;
                    }
                    int openingIdx = TaskState.indexOf(mOpeningTasks, change);
                    if (openingIdx < 0) {
                        Slog.w(TAG, "Closing a task that wasn't opening, this may be split or"
@@ -601,6 +609,11 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler {
                didMergeThings = true;
                mState = STATE_NEW_TASK;
            }
            if (mPausingTasks.isEmpty()) {
                // The pausing tasks may be removed by the incoming closing tasks.
                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
                        "[%d] RecentsController.merge: empty pausing tasks", mInstanceId);
            }
            if (!hasTaskChange) {
                // Activity only transition, so consume the merge as it doesn't affect the rest of
                // recents.