From 57dab6fa29d28c0ff6ebdb2ee5b31b0a098ec332 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Fri, 10 Apr 2020 13:38:14 -0700 Subject: [PATCH] Let spring take over the overscroll amount when swiping to first/last page. Bug: 153747836 Change-Id: I8a883f648587b0cb4008df3b8176c9341162b8d1 --- res/values/config.xml | 4 ++-- src/com/android/launcher3/PagedView.java | 18 +++++++++++++++--- .../android/launcher3/util/OverScroller.java | 9 +++++---- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/res/values/config.xml b/res/values/config.xml index ef6761387c..0657b86a6c 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -131,8 +131,8 @@ 0.5 1500 - 0.75 - 200 + 0.8 + 400 0.75 200 diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 7474613a18..5343424dfc 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1069,16 +1069,28 @@ public abstract class PagedView extends ViewGrou } } + /** + * Returns the amount of overscroll caused by the spring in {@link OverScroller}. + */ + private int getSpringOverScroll(int amount) { + if (mScroller.isSpringing()) { + return amount < 0 + ? mScroller.getCurrPos() + : Math.max(0, mScroller.getCurrPos() - mMaxScroll); + } else { + return 0; + } + } + protected void dampedOverScroll(int amount) { - mSpringOverScroll = amount; if (amount == 0) { return; } int size = mOrientationHandler.getMeasuredSize(this); int overScrollAmount = OverScroll.dampedScroll(amount, size); - mSpringOverScroll = overScrollAmount; if (mScroller.isSpringing()) { + mSpringOverScroll = getSpringOverScroll(amount); invalidate(); return; } @@ -1090,8 +1102,8 @@ public abstract class PagedView extends ViewGrou } protected void overScroll(int amount) { - mSpringOverScroll = amount; if (mScroller.isSpringing()) { + mSpringOverScroll = getSpringOverScroll(amount); invalidate(); return; } diff --git a/src/com/android/launcher3/util/OverScroller.java b/src/com/android/launcher3/util/OverScroller.java index 34efb12e01..87e698626d 100644 --- a/src/com/android/launcher3/util/OverScroller.java +++ b/src/com/android/launcher3/util/OverScroller.java @@ -561,10 +561,11 @@ public class OverScroller { mStartTime = AnimationUtils.currentAnimationTimeMillis(); mDuration = duration; + if (mSpring != null) { + mSpring.cancel(); + } + if (mState == SPRING) { - if (mSpring != null) { - mSpring.cancel(); - } mSpring = new SpringAnimation(this, SPRING_PROPERTY); ResourceProvider rp = DynamicResource.provider(mContext); @@ -576,9 +577,9 @@ public class OverScroller { mSpring.setStartVelocity(velocity); mSpring.animateToFinalPosition(mFinal); mSpring.addEndListener((animation, canceled, value, velocity1) -> { + mSpring = null; finish(); mState = SPLINE; - mSpring = null; }); } // Unused