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
This commit is contained in:
Tracy Zhou
2019-11-01 12:37:08 -07:00
parent de6770a2ec
commit e62eaa16b3

View File

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