@@ -220,8 +220,10 @@ public boolean onTouchEvent(MotionEvent event) {
220220 mActiveId1 = event .getPointerId (index1 );
221221 if (index0 < 0 || index0 == index1 ) {
222222 // Probably someone sending us a broken event stream.
223- index0 = findNewActiveIndex (event , index0 == index1 ? -1 : mActiveId1 , index0 );
224- mActiveId0 = event .getPointerId (index0 );
223+ boolean valid = handleBrokenEventStream (event );
224+ if (!valid ) {
225+ return false ;
226+ }
225227 }
226228 mActive0MostRecent = false ;
227229
@@ -377,13 +379,10 @@ public boolean onTouchEvent(MotionEvent event) {
377379 int index0 = event .findPointerIndex (mActiveId0 );
378380 if (index0 < 0 || mActiveId0 == mActiveId1 ) {
379381 // Probably someone sending us a broken event stream.
380- Log .e (TAG , "Got " + MotionEvent .actionToString (action ) +
381- " with bad state while a gesture was in progress. " +
382- "Did you forget to pass an event to " +
383- "ScaleGestureDetector#onTouchEvent?" );
384- index0 = findNewActiveIndex (event ,
385- mActiveId0 == mActiveId1 ? -1 : mActiveId1 , index0 );
386- mActiveId0 = event .getPointerId (index0 );
382+ boolean valid = handleBrokenEventStream (event );
383+ if (!valid ) {
384+ return false ;
385+ }
387386 }
388387
389388 setContext (event );
@@ -483,6 +482,27 @@ public boolean onTouchEvent(MotionEvent event) {
483482 return handled ;
484483 }
485484
485+ private boolean handleBrokenEventStream (MotionEvent event ) {
486+ Log .e (TAG , "Got " + MotionEvent .actionToString (event .getActionMasked ()) +
487+ " with bad state while a gesture was in progress. " +
488+ "Did you forget to pass an event to " +
489+ "ScaleGestureDetector#onTouchEvent?" );
490+ int index0 = findNewActiveIndex (event ,
491+ mActiveId0 == mActiveId1 ? -1 : mActiveId1 ,
492+ event .findPointerIndex (mActiveId0 ));
493+ if (index0 >= 0 ) {
494+ mActiveId0 = event .getPointerId (index0 );
495+ return true ;
496+ } else {
497+ mInvalidGesture = true ;
498+ Log .e (TAG , "Invalid MotionEvent stream detected." , new Throwable ());
499+ if (mGestureInProgress ) {
500+ mListener .onScaleEnd (this );
501+ }
502+ return false ;
503+ }
504+ }
505+
486506 private int findNewActiveIndex (MotionEvent ev , int otherActiveId , int oldIndex ) {
487507 final int pointerCount = ev .getPointerCount ();
488508
0 commit comments