Loading core/java/android/widget/ScrollView.java +70 −21 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.StrictMode; import android.util.AttributeSet; import android.view.FocusFinder; import android.view.KeyEvent; Loading Loading @@ -129,6 +130,15 @@ public class ScrollView extends FrameLayout { */ private int mActivePointerId = INVALID_POINTER; /** * The StrictMode "critical time span" objects to catch animation * stutters. Non-null when a time-sensitive animation is * in-flight. Must call finish() on them when done animating. * These are no-ops on user builds. */ private StrictMode.Span mScrollStrictSpan = null; // aka "drag" private StrictMode.Span mFlingStrictSpan = null; /** * Sentinel value for no current active pointer. * Used by {@link #mActivePointerId}. Loading Loading @@ -437,6 +447,9 @@ public class ScrollView extends FrameLayout { if (yDiff > mTouchSlop) { mIsBeingDragged = true; mLastMotionY = y; if (mScrollStrictSpan == null) { mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll"); } } break; } Loading @@ -461,6 +474,9 @@ public class ScrollView extends FrameLayout { * being flinged. */ mIsBeingDragged = !mScroller.isFinished(); if (mIsBeingDragged && mScrollStrictSpan == null) { mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll"); } break; } Loading Loading @@ -512,6 +528,10 @@ public class ScrollView extends FrameLayout { */ if (!mScroller.isFinished()) { mScroller.abortAnimation(); if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } // Remember where the motion event started Loading Loading @@ -577,16 +597,7 @@ public class ScrollView extends FrameLayout { } mActivePointerId = INVALID_POINTER; mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } if (mEdgeGlowTop != null) { mEdgeGlowTop.onRelease(); mEdgeGlowBottom.onRelease(); } endDrag(); } break; case MotionEvent.ACTION_CANCEL: Loading @@ -595,15 +606,7 @@ public class ScrollView extends FrameLayout { invalidate(); } mActivePointerId = INVALID_POINTER; mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } if (mEdgeGlowTop != null) { mEdgeGlowTop.onRelease(); mEdgeGlowBottom.onRelease(); } endDrag(); } break; case MotionEvent.ACTION_POINTER_UP: Loading Loading @@ -1004,6 +1007,10 @@ public class ScrollView extends FrameLayout { } else { if (!mScroller.isFinished()) { mScroller.abortAnimation(); if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } scrollBy(dx, dy); } Loading Loading @@ -1122,6 +1129,11 @@ public class ScrollView extends FrameLayout { // Keep on drawing until the animation has finished. postInvalidate(); } else { if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } } Loading Loading @@ -1295,6 +1307,20 @@ public class ScrollView extends FrameLayout { super.requestLayout(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mScrollStrictSpan != null) { mScrollStrictSpan.finish(); mScrollStrictSpan = null; } if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); Loading Loading @@ -1369,10 +1395,33 @@ public class ScrollView extends FrameLayout { mScrollViewMovedFocus = false; } if (mFlingStrictSpan == null) { mFlingStrictSpan = StrictMode.enterCriticalSpan("ScrollView-fling"); } invalidate(); } } private void endDrag() { mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } if (mEdgeGlowTop != null) { mEdgeGlowTop.onRelease(); mEdgeGlowBottom.onRelease(); } if (mScrollStrictSpan != null) { mScrollStrictSpan.finish(); mScrollStrictSpan = null; } } /** * {@inheritDoc} * Loading Loading
core/java/android/widget/ScrollView.java +70 −21 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.StrictMode; import android.util.AttributeSet; import android.view.FocusFinder; import android.view.KeyEvent; Loading Loading @@ -129,6 +130,15 @@ public class ScrollView extends FrameLayout { */ private int mActivePointerId = INVALID_POINTER; /** * The StrictMode "critical time span" objects to catch animation * stutters. Non-null when a time-sensitive animation is * in-flight. Must call finish() on them when done animating. * These are no-ops on user builds. */ private StrictMode.Span mScrollStrictSpan = null; // aka "drag" private StrictMode.Span mFlingStrictSpan = null; /** * Sentinel value for no current active pointer. * Used by {@link #mActivePointerId}. Loading Loading @@ -437,6 +447,9 @@ public class ScrollView extends FrameLayout { if (yDiff > mTouchSlop) { mIsBeingDragged = true; mLastMotionY = y; if (mScrollStrictSpan == null) { mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll"); } } break; } Loading @@ -461,6 +474,9 @@ public class ScrollView extends FrameLayout { * being flinged. */ mIsBeingDragged = !mScroller.isFinished(); if (mIsBeingDragged && mScrollStrictSpan == null) { mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll"); } break; } Loading Loading @@ -512,6 +528,10 @@ public class ScrollView extends FrameLayout { */ if (!mScroller.isFinished()) { mScroller.abortAnimation(); if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } // Remember where the motion event started Loading Loading @@ -577,16 +597,7 @@ public class ScrollView extends FrameLayout { } mActivePointerId = INVALID_POINTER; mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } if (mEdgeGlowTop != null) { mEdgeGlowTop.onRelease(); mEdgeGlowBottom.onRelease(); } endDrag(); } break; case MotionEvent.ACTION_CANCEL: Loading @@ -595,15 +606,7 @@ public class ScrollView extends FrameLayout { invalidate(); } mActivePointerId = INVALID_POINTER; mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } if (mEdgeGlowTop != null) { mEdgeGlowTop.onRelease(); mEdgeGlowBottom.onRelease(); } endDrag(); } break; case MotionEvent.ACTION_POINTER_UP: Loading Loading @@ -1004,6 +1007,10 @@ public class ScrollView extends FrameLayout { } else { if (!mScroller.isFinished()) { mScroller.abortAnimation(); if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } scrollBy(dx, dy); } Loading Loading @@ -1122,6 +1129,11 @@ public class ScrollView extends FrameLayout { // Keep on drawing until the animation has finished. postInvalidate(); } else { if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } } Loading Loading @@ -1295,6 +1307,20 @@ public class ScrollView extends FrameLayout { super.requestLayout(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mScrollStrictSpan != null) { mScrollStrictSpan.finish(); mScrollStrictSpan = null; } if (mFlingStrictSpan != null) { mFlingStrictSpan.finish(); mFlingStrictSpan = null; } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); Loading Loading @@ -1369,10 +1395,33 @@ public class ScrollView extends FrameLayout { mScrollViewMovedFocus = false; } if (mFlingStrictSpan == null) { mFlingStrictSpan = StrictMode.enterCriticalSpan("ScrollView-fling"); } invalidate(); } } private void endDrag() { mIsBeingDragged = false; if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } if (mEdgeGlowTop != null) { mEdgeGlowTop.onRelease(); mEdgeGlowBottom.onRelease(); } if (mScrollStrictSpan != null) { mScrollStrictSpan.finish(); mScrollStrictSpan = null; } } /** * {@inheritDoc} * Loading