Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a082985 authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru Committed by android code review
Browse files

Merge "Fixes an issue that occured unexpected exception "pointerIndex out of range"."

parents 4426961e d8a3663a
Loading
Loading
Loading
Loading
+29 −9
Original line number Diff line number Diff line
@@ -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();