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
This commit is contained in:
Jon Miranda
2022-11-29 12:16:04 -08:00
parent b0ed7dae63
commit 6811fe8ab0
2 changed files with 11 additions and 9 deletions
@@ -1204,7 +1204,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
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<T extends StatefulActivity<S>,
// 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);