From ee24e46a61869cae17ed1181eece3b0635f1186a Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 5 Oct 2021 17:55:22 -0700 Subject: [PATCH] Fix issues with starting new recents animation before previous onRecentsAnimationStart - Fix logic for canceling animation for continued quick switch, so that this case (starting a new gesture before onRecentsAnimationStart() of the previous gesture) instead goes to the STATE_FINISH_WITH_NO_END flow. - Update the end target so that we go to that state instead of always overview state if swipe was past the halfway threshold when we call endLauncherTransitionController(). This is specifically so we don't use OverviewInputConsumer on the second gesture, given the first one was canceled and didn't actually go to overview. - GestureState#isRecentsAnimationRunning() now checks for STATE_RECENTS_ANIMATION_STARTED rather than _INITIALIZED, to be consistent with its javadoc and TaskAnimationManager#isRecentsAnimationRunning(). This also ensures we can correctly calculate continued quick switch (see above). - Call cleanUpRecentsAnimation() before creating a new one in TaskAnimationManager. This ensures that the previous listener doesn't immediately cleanup the new gesture when it gets onRecentsAnimationCanceled() due to the new recents animation starting. Test: swipe to home twice from the app, locally ignoring the onRecentsAnimationStart() from the first one, and ensure the second one responds normally Bug: 193851085 Change-Id: I76e27c96b54293805546c0d6c82e77f975c69d7a Merged-In: I76e27c96b54293805546c0d6c82e77f975c69d7a (cherry picked from commit 66ed0ff23ec92f3871c536d477877ab15116aaa7) --- .../com/android/quickstep/AbsSwipeUpHandler.java | 5 ++++- .../android/quickstep/BaseActivityInterface.java | 16 +++++++++++++--- .../src/com/android/quickstep/GestureState.java | 4 ++-- .../android/quickstep/TaskAnimationManager.java | 7 +++++++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index ac1772c300..6887d7ffbb 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -976,6 +976,7 @@ public abstract class AbsSwipeUpHandler, isFling, isCancel); // Set the state, but don't notify until the animation completes mGestureState.setEndTarget(endTarget, false /* isAtomic */); + mAnimationFactory.setEndTarget(endTarget); float endShift = endTarget.isLauncher ? 1 : 0; final float startShift; @@ -1360,7 +1361,9 @@ public abstract class AbsSwipeUpHandler, mActivity.clearRunOnceOnStartCallback(); resetLauncherListeners(); } - if (mGestureState.getEndTarget() != null && !mGestureState.isRunningAnimationToLauncher()) { + if (mGestureState.isRecentsAnimationRunning() && mGestureState.getEndTarget() != null + && !mGestureState.getEndTarget().isLauncher) { + // Continued quick switch. cancelCurrentAnimation(); } else { mStateCallback.setStateOnUiThread(STATE_FINISH_WITH_NO_END); diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index fac4d52826..923a959986 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -77,12 +77,14 @@ public abstract class BaseActivityInterface mActivity.getStateManager().goToState( - controller.getInterpolatedProgress() > 0.5 ? mOverviewState : mBackgroundState, + controller.getInterpolatedProgress() > 0.5 ? mTargetState : mBackgroundState, false)); RecentsView recentsView = mActivity.getOverviewPanel(); @@ -490,6 +495,11 @@ public abstract class BaseActivityInterface