From a8c08584a7bb295a2f14eafd2923a2688d3e3626 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 16 Jul 2020 17:32:29 -0700 Subject: [PATCH] Fix bug where double swipe gets us stuck in Hint state while in Overview. With the second swipe, we never complete the swipe to Overview NoButtonNavbarToOverviewTouchController#maybeSwipeInteractionToOverviewComplete - mReachedOverview = true - mDetector.isSettlingState = false And then the second swipe starts the state transition to Hint but then it never gets completed because: 1. The animation starts 2. Gets cancelled 3. Starts again 4. Finishes, but is not marked as success since the cancel in #2 was never set back to false Bug: 160759508 Change-Id: I8c3972e6209c3d5a4a0bdd9f9b7683de18105d57 --- .../src/com/android/quickstep/BaseSwipeUpHandlerV2.java | 1 + .../src/com/android/quickstep/SwipeUpAnimationLogic.java | 1 + .../src/com/android/quickstep/views/TaskMenuView.java | 1 + src/com/android/launcher3/anim/AlphaUpdateListener.java | 3 ++- .../android/launcher3/anim/AnimationSuccessListener.java | 8 ++++++++ .../launcher3/anim/AnimatorPlaybackController.java | 1 + src/com/android/launcher3/statemanager/StateManager.java | 1 + 7 files changed, 15 insertions(+), 1 deletion(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java index a3f1dd4c5f..e084de1acb 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java @@ -1090,6 +1090,7 @@ public abstract class BaseSwipeUpHandlerV2, Q exte anim.addAnimatorListener(new AnimationSuccessListener() { @Override public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); if (mActivity != null) { removeLiveTileOverlay(); } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeUpAnimationLogic.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeUpAnimationLogic.java index e54a21c073..07faab7aeb 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeUpAnimationLogic.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeUpAnimationLogic.java @@ -287,6 +287,7 @@ public abstract class SwipeUpAnimationLogic { @Override public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); mHomeAnim.dispatchOnStart(); } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskMenuView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskMenuView.java index 8b49f2c212..9b2048e4ac 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskMenuView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskMenuView.java @@ -282,6 +282,7 @@ public class TaskMenuView extends AbstractFloatingView { mOpenCloseAnimator.addListener(new AnimationSuccessListener() { @Override public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); setVisibility(VISIBLE); } diff --git a/src/com/android/launcher3/anim/AlphaUpdateListener.java b/src/com/android/launcher3/anim/AlphaUpdateListener.java index eabd283699..69716eabf1 100644 --- a/src/com/android/launcher3/anim/AlphaUpdateListener.java +++ b/src/com/android/launcher3/anim/AlphaUpdateListener.java @@ -46,7 +46,8 @@ public class AlphaUpdateListener extends AnimationSuccessListener } @Override - public void onAnimationStart(Animator arg0) { + public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); // We want the views to be visible for animation, so fade-in/out is visible mView.setVisibility(View.VISIBLE); } diff --git a/src/com/android/launcher3/anim/AnimationSuccessListener.java b/src/com/android/launcher3/anim/AnimationSuccessListener.java index 9905e81638..b83417c2eb 100644 --- a/src/com/android/launcher3/anim/AnimationSuccessListener.java +++ b/src/com/android/launcher3/anim/AnimationSuccessListener.java @@ -19,6 +19,8 @@ package com.android.launcher3.anim; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import androidx.annotation.CallSuper; + /** * Extension of {@link AnimatorListenerAdapter} for listening for non-cancelled animations */ @@ -26,6 +28,12 @@ public abstract class AnimationSuccessListener extends AnimatorListenerAdapter { protected boolean mCancelled = false; + @Override + @CallSuper + public void onAnimationStart(Animator animation) { + mCancelled = false; + } + @Override public void onAnimationCancel(Animator animation) { mCancelled = true; diff --git a/src/com/android/launcher3/anim/AnimatorPlaybackController.java b/src/com/android/launcher3/anim/AnimatorPlaybackController.java index ea0ff8b687..31e0418571 100644 --- a/src/com/android/launcher3/anim/AnimatorPlaybackController.java +++ b/src/com/android/launcher3/anim/AnimatorPlaybackController.java @@ -335,6 +335,7 @@ public class AnimatorPlaybackController implements ValueAnimator.AnimatorUpdateL @Override public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); mCancelled = false; mDispatched = false; } diff --git a/src/com/android/launcher3/statemanager/StateManager.java b/src/com/android/launcher3/statemanager/StateManager.java index 60b87d984b..f1e7f166e5 100644 --- a/src/com/android/launcher3/statemanager/StateManager.java +++ b/src/com/android/launcher3/statemanager/StateManager.java @@ -315,6 +315,7 @@ public class StateManager> { @Override public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); // Change the internal state only when the transition actually starts onStateTransitionStart(state); }