From 38f92cf9aa43963b40df91dc4b6434ee9c4e8433 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 29 Feb 2016 15:15:03 -0800 Subject: [PATCH] Fixing scrollTo getting called even though the gesture was handled by an overlay Change-Id: Ia46c4ef3db8a3ae4fa615625b7b983d7e461c797 (cherry picked from commit 061380a04d067d06adf41c72b4a6892827777acc) --- src/com/android/launcher3/PagedView.java | 2 +- src/com/android/launcher3/Workspace.java | 30 ++++++++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index ee400f6bc4..56a76134f7 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -156,7 +156,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc protected boolean mIsPageMoving = false; - private boolean mWasInOverscroll = false; + protected boolean mWasInOverscroll = false; // Page Indicator @Thunk int mPageIndicatorViewId; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index e67a2da092..f94199613b 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1261,16 +1261,36 @@ public class Workspace extends PagedView @Override protected int getUnboundedScrollX() { - if (mLauncherOverlay != null) { - if ((mIsRtl && mUnboundedScrollX > mMaxScrollX) || - (!mIsRtl && mUnboundedScrollX < 0)) { - return mUnboundedScrollX; - } + if (isScrollingOverlay()) { + return mUnboundedScrollX; } return super.getUnboundedScrollX(); } + private boolean isScrollingOverlay() { + return mLauncherOverlay != null && + ((mIsRtl && mUnboundedScrollX > mMaxScrollX) || (!mIsRtl && mUnboundedScrollX < 0)); + } + + @Override + protected void snapToDestination() { + // If we're overscrolling the overlay, we make sure to immediately reset the PagedView + // to it's baseline position instead of letting the overscroll settle. The overlay handles + // it's own settling, and every gesture to the overlay should be self-contained and start + // from 0, so we zero it out here. + if (isScrollingOverlay()) { + int finalScroll = mIsRtl ? mMaxScrollX : 0; + + // We reset mWasInOverscroll so that PagedView doesn't zero out the overscroll + // interaction when we call scrollTo. + mWasInOverscroll = false; + scrollTo(finalScroll, getScrollY()); + } else { + super.snapToDestination(); + } + } + @Override public void scrollTo(int x, int y) { mUnboundedScrollX = x;