summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2014-07-07 15:10:54 -0700
committerAdam Powell <adamp@google.com>2014-07-07 15:29:13 -0700
commitaab726c53e761752e506471408b28673387cd10f (patch)
tree058a20b0327d55696204ed10cc40326966959d57
parent6349a33d34193269faad66aada2bbb76a6a4ef0f (diff)
downloadframeworks_base-aab726c53e761752e506471408b28673387cd10f.zip
frameworks_base-aab726c53e761752e506471408b28673387cd10f.tar.gz
frameworks_base-aab726c53e761752e506471408b28673387cd10f.tar.bz2
Fix consistency in nested pre-scroll with ScrollView for AbsListView
Keep sign consistency for nested pre-scroll dispatch in AbsListView with ScrollView. Also correctly invoke nested flings. Bug 16015770 Change-Id: Ia8a82667ea548aafda66f04e32046c3b0a5c2314
-rw-r--r--core/java/android/widget/AbsListView.java11
1 files changed, 8 insertions, 3 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 8f8876b..3a1f6ed 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -3326,8 +3326,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
if (mLastY == Integer.MIN_VALUE) {
rawDeltaY -= mMotionCorrection;
}
- if (dispatchNestedPreScroll(0, rawDeltaY, mScrollConsumed, mScrollOffset)) {
- rawDeltaY -= mScrollConsumed[1];
+ if (dispatchNestedPreScroll(0, -rawDeltaY, mScrollConsumed, mScrollOffset)) {
+ rawDeltaY += mScrollConsumed[1];
scrollOffsetCorrection -= mScrollOffset[1];
scrollConsumedCorrection -= mScrollConsumed[1];
if (vtev != null) {
@@ -3853,7 +3853,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// Since we can potentially overfling more than we can overscroll, don't
// allow the weird behavior where you can scroll to a boundary then
// fling further.
- if (Math.abs(initialVelocity) > mMinimumVelocity &&
+ boolean flingVelocity = Math.abs(initialVelocity) > mMinimumVelocity;
+ if (flingVelocity &&
!((mFirstPosition == 0 &&
firstChildTop == contentTop - mOverscrollDistance) ||
(mFirstPosition + childCount == mItemCount &&
@@ -3864,6 +3865,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
reportScrollStateChange(OnScrollListener.SCROLL_STATE_FLING);
mFlingRunnable.start(-initialVelocity);
+ dispatchNestedFling(0, -initialVelocity, true);
} else {
mTouchMode = TOUCH_MODE_REST;
reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
@@ -3873,6 +3875,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
if (mPositionScroller != null) {
mPositionScroller.stop();
}
+ if (flingVelocity) {
+ dispatchNestedFling(0, -initialVelocity, false);
+ }
}
}
} else {