am 7a082985: Merge "Fixes an issue that occured unexpected exception "pointerIndex out of range"."

* commit '7a0829850ee8d1ee2f436c40c8a5af2ff7d96533':
  Fixes an issue that occured unexpected exception "pointerIndex out of range".
This commit is contained in:
Jean-Baptiste Queru
2012-05-01 08:50:18 -07:00
committed by Android Git Automerger

View File

@@ -220,8 +220,10 @@ public class ScaleGestureDetector {
mActiveId1 = event.getPointerId(index1);
if (index0 < 0 || index0 == index1) {
// Probably someone sending us a broken event stream.
index0 = findNewActiveIndex(event, index0 == index1 ? -1 : mActiveId1, index0);
mActiveId0 = event.getPointerId(index0);
boolean valid = handleBrokenEventStream(event);
if (!valid) {
return false;
}
}
mActive0MostRecent = false;
@@ -377,13 +379,10 @@ public class ScaleGestureDetector {
int index0 = event.findPointerIndex(mActiveId0);
if (index0 < 0 || mActiveId0 == mActiveId1) {
// Probably someone sending us a broken event stream.
Log.e(TAG, "Got " + MotionEvent.actionToString(action) +
" with bad state while a gesture was in progress. " +
"Did you forget to pass an event to " +
"ScaleGestureDetector#onTouchEvent?");
index0 = findNewActiveIndex(event,
mActiveId0 == mActiveId1 ? -1 : mActiveId1, index0);
mActiveId0 = event.getPointerId(index0);
boolean valid = handleBrokenEventStream(event);
if (!valid) {
return false;
}
}
setContext(event);
@@ -483,6 +482,27 @@ public class ScaleGestureDetector {
return handled;
}
private boolean handleBrokenEventStream(MotionEvent event) {
Log.e(TAG, "Got " + MotionEvent.actionToString(event.getActionMasked()) +
" with bad state while a gesture was in progress. " +
"Did you forget to pass an event to " +
"ScaleGestureDetector#onTouchEvent?");
int index0 = findNewActiveIndex(event,
mActiveId0 == mActiveId1 ? -1 : mActiveId1,
event.findPointerIndex(mActiveId0));
if (index0 >= 0) {
mActiveId0 = event.getPointerId(index0);
return true;
} else {
mInvalidGesture = true;
Log.e(TAG, "Invalid MotionEvent stream detected.", new Throwable());
if (mGestureInProgress) {
mListener.onScaleEnd(this);
}
return false;
}
}
private int findNewActiveIndex(MotionEvent ev, int otherActiveId, int oldIndex) {
final int pointerCount = ev.getPointerCount();