Skip to content
This repository has been archived by the owner on Nov 8, 2023. It is now read-only.

Commit

Permalink
Protect against errant bad touch inputs
Browse files Browse the repository at this point in the history
Fixes b/18261828 IllegalArgumentException in android.support.v4.widget.SwipeRefreshLayout

Change-Id: I4ea7869f3a6e9555f7afcd9b0c3ad7a68af6e753
  • Loading branch information
Mindy Pereira committed Sep 8, 2015
1 parent 21bae67 commit a8ba557
Showing 1 changed file with 15 additions and 10 deletions.
25 changes: 15 additions & 10 deletions v4/java/android/support/v4/widget/SwipeRefreshLayout.java
Expand Up @@ -946,6 +946,7 @@ public void onAnimationRepeat(Animation animation) {
@Override
public boolean onTouchEvent(MotionEvent ev) {
final int action = MotionEventCompat.getActionMasked(ev);
int pointerIndex = -1;

if (mReturningToStart && action == MotionEvent.ACTION_DOWN) {
mReturningToStart = false;
Expand All @@ -963,7 +964,7 @@ public boolean onTouchEvent(MotionEvent ev) {
break;

case MotionEvent.ACTION_MOVE: {
final int pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
if (pointerIndex < 0) {
Log.e(LOG_TAG, "Got ACTION_MOVE event but have an invalid active pointer id.");
return false;
Expand All @@ -981,31 +982,35 @@ public boolean onTouchEvent(MotionEvent ev) {
break;
}
case MotionEventCompat.ACTION_POINTER_DOWN: {
final int index = MotionEventCompat.getActionIndex(ev);
mActivePointerId = MotionEventCompat.getPointerId(ev, index);
pointerIndex = MotionEventCompat.getActionIndex(ev);
if (pointerIndex < 0) {
Log.e(LOG_TAG, "Got ACTION_POINTER_DOWN event but have an invalid action index.");
return false;
}
mActivePointerId = MotionEventCompat.getPointerId(ev, pointerIndex);
break;
}

case MotionEventCompat.ACTION_POINTER_UP:
onSecondaryPointerUp(ev);
break;

case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
if (mActivePointerId == INVALID_POINTER) {
if (action == MotionEvent.ACTION_UP) {
Log.e(LOG_TAG, "Got ACTION_UP event but don't have an active pointer id.");
}
case MotionEvent.ACTION_UP: {
pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
if (pointerIndex < 0) {
Log.e(LOG_TAG, "Got ACTION_UP event but don't have an active pointer id.");
return false;
}
final int pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);

final float y = MotionEventCompat.getY(ev, pointerIndex);
final float overscrollTop = (y - mInitialMotionY) * DRAG_RATE;
mIsBeingDragged = false;
finishSpinner(overscrollTop);
mActivePointerId = INVALID_POINTER;
return false;
}
case MotionEvent.ACTION_CANCEL:
return false;
}

return true;
Expand Down

0 comments on commit a8ba557

Please sign in to comment.