From b5f473ed01329e6dd301fe84e049acc3a716a883 Mon Sep 17 00:00:00 2001 From: George Mount Date: Fri, 14 Apr 2023 10:23:00 -0700 Subject: [PATCH] VelocityTracker should not be cleared until pointer up Fixes: 266736911 VelocityTracker was being cleared when it hit the end of the View, but stretch overscroll can be flung. Test: ScrollViewTest Change-Id: Iadeca98360dc5a5462bcefbdd266bca92c0b6d5a --- core/java/android/widget/ScrollView.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index a5e708642c9f0..b65c1a17e26b8 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -845,11 +845,7 @@ public class ScrollView extends FrameLayout { // Calling overScrollBy will call onOverScrolled, which // calls onScrollChanged if applicable. - if (overScrollBy(0, deltaY, 0, mScrollY, 0, range, 0, mOverscrollDistance, true) - && !hasNestedScrollingParent()) { - // Break our velocity if we hit a scroll barrier. - mVelocityTracker.clear(); - } + overScrollBy(0, deltaY, 0, mScrollY, 0, range, 0, mOverscrollDistance, true); final int scrolledDeltaY = mScrollY - oldY; final int unconsumedY = deltaY - scrolledDeltaY; @@ -894,6 +890,7 @@ public class ScrollView extends FrameLayout { mActivePointerId = INVALID_POINTER; endDrag(); + velocityTracker.clear(); } break; case MotionEvent.ACTION_CANCEL: