diff options
| author | 2010-09-03 13:58:37 -0700 | |
|---|---|---|
| committer | 2010-09-03 13:58:37 -0700 | |
| commit | e7c02ef40a10c599b13684a6f99a91eabd0f258f (patch) | |
| tree | 3ae3b101ff6ed6f79859856cfdace8a1c9715eab | |
| parent | cc4a38c60f52082f3c1970c7eda6756949c6e5d5 (diff) | |
| parent | e6ffce9f65a1a8f498eb51a993a8cbf5f13a109e (diff) | |
Merge "Fix bug 2973252 - Make overscroll glow respect ifContentScrolls" into gingerbread
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 31 | ||||
| -rw-r--r-- | core/java/android/widget/HorizontalScrollView.java | 26 | ||||
| -rw-r--r-- | core/java/android/widget/ScrollView.java | 26 |
3 files changed, 60 insertions, 23 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index fe2a43b7abe2..8f5c35ea7425 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -659,6 +659,18 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } /** + * @return true if all list content currently fits within the view boundaries + */ + private boolean contentFits() { + final int childCount = getChildCount(); + if (childCount != mItemCount) { + return false; + } + + return getChildAt(0).getTop() >= 0 && getChildAt(childCount - 1).getBottom() <= mBottom; + } + + /** * Enables fast scrolling by letting the user quickly scroll through lists by * dragging the fast scroll thumb. The adapter attached to the list may want * to implement {@link SectionIndexer} if it wishes to display alphabet preview and @@ -2221,8 +2233,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te // Don't allow overfling if we're at the edge. mVelocityTracker.clear(); } - mTouchMode = TOUCH_MODE_OVERSCROLL; - if (mEdgeGlowTop != null) { + + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && + !contentFits())) { + mTouchMode = TOUCH_MODE_OVERSCROLL; if (rawDeltaY > 0) { mEdgeGlowTop.onPull((float) overscroll / getHeight()); } else if (rawDeltaY < 0) { @@ -2275,7 +2291,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } else { overscrollBy(0, -incrementalDeltaY, 0, mScrollY, 0, 0, 0, mOverscrollDistance, true); - if (mEdgeGlowTop != null) { + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && + !contentFits())) { if (rawDeltaY > 0) { mEdgeGlowTop.onPull((float) -incrementalDeltaY / getHeight()); } else if (rawDeltaY < 0) { @@ -2757,8 +2776,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te void edgeReached(int delta) { mScroller.notifyVerticalEdgeReached(mScrollY, 0, mOverflingDistance); - mTouchMode = TOUCH_MODE_OVERFLING; - if (mEdgeGlowTop != null) { + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && !contentFits())) { + mTouchMode = TOUCH_MODE_OVERFLING; final int vel = (int) mScroller.getCurrVelocity(); if (delta > 0) { mEdgeGlowTop.onAbsorb(vel); diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 129ad8ac64ed..0bb97dd359af 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -538,11 +538,15 @@ public class HorizontalScrollView extends FrameLayout { } onScrollChanged(mScrollX, mScrollY, oldX, oldY); - final int pulledToX = oldX + deltaX; - if (pulledToX < 0) { - mEdgeGlowLeft.onPull((float) deltaX / getWidth()); - } else if (pulledToX > range) { - mEdgeGlowRight.onPull((float) deltaX / getWidth()); + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && range > 0)) { + final int pulledToX = oldX + deltaX; + if (pulledToX < 0) { + mEdgeGlowLeft.onPull((float) deltaX / getWidth()); + } else if (pulledToX > range) { + mEdgeGlowRight.onPull((float) deltaX / getWidth()); + } } } break; @@ -1091,10 +1095,14 @@ public class HorizontalScrollView extends FrameLayout { onScrollChanged(mScrollX, mScrollY, oldX, oldY); final int range = getScrollRange(); - if (x < 0 && oldX >= 0) { - mEdgeGlowLeft.onAbsorb((int) mScroller.getCurrVelocity()); - } else if (x > range && oldX <= range) { - mEdgeGlowRight.onAbsorb((int) mScroller.getCurrVelocity()); + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && range > 0)) { + if (x < 0 && oldX >= 0) { + mEdgeGlowLeft.onAbsorb((int) mScroller.getCurrVelocity()); + } else if (x > range && oldX <= range) { + mEdgeGlowRight.onAbsorb((int) mScroller.getCurrVelocity()); + } } } awakenScrollBars(); diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 7b5e4125eca8..2ba1c4791705 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -533,11 +533,15 @@ public class ScrollView extends FrameLayout { } onScrollChanged(mScrollX, mScrollY, oldX, oldY); - final int pulledToY = oldY + deltaY; - if (pulledToY < 0) { - mEdgeGlowTop.onPull((float) deltaY / getHeight()); - } else if (pulledToY > range) { - mEdgeGlowBottom.onPull((float) deltaY / getHeight()); + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && range > 0)) { + final int pulledToY = oldY + deltaY; + if (pulledToY < 0) { + mEdgeGlowTop.onPull((float) deltaY / getHeight()); + } else if (pulledToY > range) { + mEdgeGlowBottom.onPull((float) deltaY / getHeight()); + } } } break; @@ -1090,10 +1094,14 @@ public class ScrollView extends FrameLayout { onScrollChanged(mScrollX, mScrollY, oldX, oldY); final int range = getScrollRange(); - if (y < 0 && oldY >= 0) { - mEdgeGlowTop.onAbsorb((int) mScroller.getCurrVelocity()); - } else if (y > range && oldY <= range) { - mEdgeGlowBottom.onAbsorb((int) mScroller.getCurrVelocity()); + final int overscrollMode = getOverscrollMode(); + if (overscrollMode == OVERSCROLL_ALWAYS || + (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && range > 0)) { + if (y < 0 && oldY >= 0) { + mEdgeGlowTop.onAbsorb((int) mScroller.getCurrVelocity()); + } else if (y > range && oldY <= range) { + mEdgeGlowBottom.onAbsorb((int) mScroller.getCurrVelocity()); + } } } awakenScrollBars(); |