From e6c4747276cd4e7f0243bcd8ea50ad3e66609fef Mon Sep 17 00:00:00 2001 From: Mindy Pereira Date: Fri, 1 Oct 2010 16:37:06 -0700 Subject: DO NOT MERGE. Fix logic for switching between overscroll and scroll modes. The issue here was originally that webview was showing twice as intense of an effect for edge glow as lists. The root cause was that abslistview was calling onPull half as often as webview. This occurred because every time an action_move came into the touch handler for abslistview when it was in overscroll, the mode was ALWAYS changed back to scroll mode. Therefore, half the action_move events were essentially being eating by the abslistview state machine. After fixing that issue, needed to decrease the intensity of the effect for webview and abslistview by halving the PULL_DISTANCE_GLOW_FACTOR. Change-Id: I5dbdf4f1219f3bb157a71d4fccf8fa42e2abe047 --- core/java/android/widget/AbsListView.java | 15 +++++++++++++-- core/java/android/widget/EdgeGlow.java | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'core') diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 8f5c35e..4558854 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -521,6 +521,11 @@ public abstract class AbsListView extends AdapterView implements Te private int mLastPositionDistanceGuess; /** + * Used for determining when to cancel out of overscroll. + */ + private int mDirection = 0; + + /** * Interface definition for a callback to be invoked when the list or grid * has been scrolled. */ @@ -2238,6 +2243,7 @@ public abstract class AbsListView extends AdapterView implements Te if (overscrollMode == OVERSCROLL_ALWAYS || (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && !contentFits())) { + mDirection = 0; // Reset when entering overscroll. mTouchMode = TOUCH_MODE_OVERSCROLL; if (rawDeltaY > 0) { mEdgeGlowTop.onPull((float) overscroll / getHeight()); @@ -2261,9 +2267,13 @@ public abstract class AbsListView extends AdapterView implements Te final int oldScroll = mScrollY; final int newScroll = oldScroll - incrementalDeltaY; + int newDirection = y > mLastY ? 1 : -1; + + if (mDirection == 0) { + mDirection = newDirection; + } - if ((oldScroll >= 0 && newScroll <= 0) || - (oldScroll <= 0 && newScroll >= 0)) { + if (mDirection != newDirection) { // Coming back to 'real' list scrolling incrementalDeltaY = -newScroll; mScrollY = 0; @@ -2308,6 +2318,7 @@ public abstract class AbsListView extends AdapterView implements Te } } mLastY = y; + mDirection = newDirection; } break; } diff --git a/core/java/android/widget/EdgeGlow.java b/core/java/android/widget/EdgeGlow.java index e24f495..1f7daab 100644 --- a/core/java/android/widget/EdgeGlow.java +++ b/core/java/android/widget/EdgeGlow.java @@ -90,7 +90,7 @@ public class EdgeGlow { // How much dragging should effect the height of the glow image. // Number determined by user testing. - private static final int PULL_DISTANCE_GLOW_FACTOR = 10; + private static final int PULL_DISTANCE_GLOW_FACTOR = 5; private static final int VELOCITY_EDGE_FACTOR = 8; private static final int VELOCITY_GLOW_FACTOR = 16; -- cgit v1.1