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

Commit e62eaa16 authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Finish recents animation when launching another task in Overview

App open animation gets cancelled because of screenshot cleanup (launcher is stopped). We need window manager support to allow them to go parallel (b/143774568). As a workaround, we can either (1) delay launching the next task until recents animation is properly cancelled (2) finish the recents animation before launching the next task. Performance is the same, so go with (2) since it's a cleaner solution

Fixes: 143773683
Test: Swipe up to Overview from app, launch another task in Overview. See everything animate smoothly.
Change-Id: Iafd3f6f529fba32c1113b766c033e5932f19f4f3
parent de6770a2
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -287,11 +287,19 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
    public void launchTask(boolean animate, boolean freezeTaskList, Consumer<Boolean> resultCallback,
            Handler resultCallbackHandler) {
        if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
            RecentsView recentsView = getRecentsView();
            if (isRunningTask()) {
                getRecentsView().finishRecentsAnimation(false /* toRecents */,
                recentsView.finishRecentsAnimation(false /* toRecents */,
                        () -> resultCallbackHandler.post(() -> resultCallback.accept(true)));
            } else {
                launchTaskInternal(animate, freezeTaskList, resultCallback, resultCallbackHandler);
                // This is a workaround against the WM issue that app open is not correctly animated
                // when recents animation is being cleaned up (b/143774568). When that's possible,
                // we should rely on the framework side to cancel the recents animation, and we will
                // clean up the screenshot on the launcher side while we launch the next task.
                recentsView.switchToScreenshot(null,
                        () -> recentsView.finishRecentsAnimation(true /* toRecents */,
                                () -> launchTaskInternal(animate, freezeTaskList, resultCallback,
                                        resultCallbackHandler)));
            }
        } else {
            launchTaskInternal(animate, freezeTaskList, resultCallback, resultCallbackHandler);