From 6811fe8ab0a50a429609d6ea394b0c1cb59aa671 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Tue, 29 Nov 2022 12:16:04 -0800 Subject: [PATCH] Fix window x-axis movement after gesture ends. Previously we setClamp to false right after the gesture ends. So when the page settle animation gets the page offset, it would get the unclamped version which would cause the window to move in the x-axis movement even if the window didn't actually move during the gesture. Now we ensure that we setClamp to false after the page transition ends so that the scroll offset is consistent all the way until the end of the animation. Bug: 258851206 Test: 1. swipe a bit diagonally to bring up taskbar with no x-axis window movement 2. release 3. there should be no x-axis movement on window Change-Id: Ic9949d11f2e8bc7ccbd737555a3d5551f09456da --- .../src/com/android/quickstep/AbsSwipeUpHandler.java | 10 ++++++---- .../src/com/android/quickstep/views/RecentsView.java | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 19ffd2ac35..3d8ffc418a 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1204,7 +1204,6 @@ public abstract class AbsSwipeUpHandler, final GestureEndTarget endTarget = calculateEndTarget(velocity, endVelocity, isFling, isCancel); - setClampScrollOffset(false); // Set the state, but don't notify until the animation completes mGestureState.setEndTarget(endTarget, false /* isAtomic */); mAnimationFactory.setEndTarget(endTarget); @@ -1282,13 +1281,16 @@ public abstract class AbsSwipeUpHandler, // Let RecentsView handle the scrolling to the task, which we launch in startNewTask() // or resumeLastTask(). + Runnable onPageTransitionEnd = () -> { + mGestureState.setState(STATE_RECENTS_SCROLLING_FINISHED); + setClampScrollOffset(false); + }; if (mRecentsView != null) { ActiveGestureLog.INSTANCE.trackEvent(ActiveGestureErrorDetector.GestureEvent .SET_ON_PAGE_TRANSITION_END_CALLBACK); - mRecentsView.setOnPageTransitionEndCallback( - () -> mGestureState.setState(STATE_RECENTS_SCROLLING_FINISHED)); + mRecentsView.setOnPageTransitionEndCallback(onPageTransitionEnd); } else { - mGestureState.setState(STATE_RECENTS_SCROLLING_FINISHED); + onPageTransitionEnd.run(); } animateToProgress(startShift, endShift, duration, interpolator, endTarget, velocity); diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index dc1b885172..8b406ec4f7 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -5072,15 +5072,15 @@ public abstract class RecentsView