From a9283beebc0755bbbc4b40d38530c2fdc33e2532 Mon Sep 17 00:00:00 2001 From: Vadim Tryshev Date: Tue, 1 May 2018 19:22:37 -0700 Subject: [PATCH] Settling scrolls over clear-all button. Per UX feedback, we divide the "overscroll area" 50/50 and settle to the closest of the most recent task position and the fully scrolled position. Bug: 72222505 Test: Manual Change-Id: Ic98fa5ae2f14f274f6a425ac687f13f7b3a4332e --- src/com/android/launcher3/PagedView.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 8311ab9a76..87ee076f36 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1171,11 +1171,19 @@ public abstract class PagedView extends ViewGrou mNextPage = getPageNearestToCenterOfScreen(unscaledScrollX); int firstPageScroll = getScrollForPage(!mIsRtl ? 0 : getPageCount() - 1); int lastPageScroll = getScrollForPage(!mIsRtl ? getPageCount() - 1 : 0); - if (mSettleOnPageInFreeScroll && unscaledScrollX > firstPageScroll - && unscaledScrollX < lastPageScroll) { - // Make sure we land directly on a page. If flinging past one of the ends, - // don't change the velocity as it will get stopped at the end anyway. - mScroller.setFinalX((int) (getScrollForPage(mNextPage) * getScaleX())); + if (mSettleOnPageInFreeScroll && unscaledScrollX > 0 + && unscaledScrollX < mMaxScrollX) { + // If scrolling ends in the half of the added space that is closer to the + // end, settle to the end. Otherwise snap to the nearest page. + // If flinging past one of the ends, don't change the velocity as it will + // get stopped at the end anyway. + final int finalX = unscaledScrollX < firstPageScroll / 2 ? + 0 : + unscaledScrollX > (lastPageScroll + mMaxScrollX) / 2 ? + mMaxScrollX : + getScrollForPage(mNextPage); + + mScroller.setFinalX((int) (finalX * getScaleX())); // Ensure the scroll/snap doesn't happen too fast; int extraScrollDuration = OVERSCROLL_PAGE_SNAP_ANIMATION_DURATION - mScroller.getDuration();