diff options
author | Adam Powell <adamp@google.com> | 2014-07-07 15:10:54 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2014-07-07 15:29:13 -0700 |
commit | aab726c53e761752e506471408b28673387cd10f (patch) | |
tree | 058a20b0327d55696204ed10cc40326966959d57 | |
parent | 6349a33d34193269faad66aada2bbb76a6a4ef0f (diff) | |
download | frameworks_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.java | 11 |
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 { |