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

Commit 5ec35c17 authored by Adam Powell's avatar Adam Powell Committed by Android (Google) Code Review
Browse files

Merge "Fix bug 4082512 IAE "pointerIndex out of range" while zooming over...

Merge "Fix bug 4082512 IAE "pointerIndex out of range" while zooming over flashplayer in browser" into honeycomb-mr1
parents dacf0d02 8f626a19
Loading
Loading
Loading
Loading
+28 −28
Original line number Diff line number Diff line
@@ -5969,10 +5969,9 @@ public class WebView extends AbsoluteLayout
        mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
        cancelLongPress();
        mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS);
        mPreventDefault = PREVENT_DEFAULT_IGNORE;
    }

    private void handleMultiTouchInWebView(MotionEvent ev) {
    void handleMultiTouchInWebView(MotionEvent ev) {
        if (DebugFlags.WEB_VIEW) {
            Log.v(LOGTAG, "multi-touch: " + ev + " at " + ev.getEventTime()
                + " mTouchMode=" + mTouchMode
@@ -5990,6 +5989,7 @@ public class WebView extends AbsoluteLayout
        float x = ev.getX();
        float y = ev.getY();

        if (mPreventDefault != PREVENT_DEFAULT_YES) {
            detector.onTouchEvent(ev);

            if (detector.isInProgress()) {
@@ -6010,6 +6010,7 @@ public class WebView extends AbsoluteLayout
                    mVelocityTracker = VelocityTracker.obtain();
                }
            }
        }

        int action = ev.getActionMasked();
        if (action == MotionEvent.ACTION_POINTER_DOWN) {
@@ -7306,12 +7307,14 @@ public class WebView extends AbsoluteLayout
        }

        private void dropStaleGestures(MotionEvent ev, long sequence) {
            if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN &&
                    mTouchEventQueue != null) {
            if (mTouchEventQueue == null) return;

            MotionEvent nextQueueEvent = mTouchEventQueue.mTed != null ?
                    mTouchEventQueue.mTed.mMotionEvent : mTouchEventQueue.mEvent;

            if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN && nextQueueEvent != null) {
                long eventTime = ev.getEventTime();
                long nextQueueTime = mTouchEventQueue.mTed != null ?
                        mTouchEventQueue.mTed.mMotionEvent.getEventTime() :
                        mTouchEventQueue.mEvent.getEventTime();
                long nextQueueTime = nextQueueEvent.getEventTime();
                if (eventTime > nextQueueTime + QUEUED_GESTURE_TIMEOUT) {
                    Log.w(LOGTAG, "Got ACTION_DOWN but still waiting on stale event. " +
                            "Ignoring previous queued events.");
@@ -7354,7 +7357,7 @@ public class WebView extends AbsoluteLayout
                handleMultiTouchInWebView(ev);
            } else {
                final ScaleGestureDetector detector = mZoomManager.getMultiTouchGestureDetector();
                if (detector != null) {
                if (detector != null && mPreventDefault != PREVENT_DEFAULT_YES) {
                    // ScaleGestureDetector needs a consistent event stream to operate properly.
                    // It won't take any action with fewer than two pointers, but it needs to
                    // update internal bookkeeping state.
@@ -7387,10 +7390,7 @@ public class WebView extends AbsoluteLayout
                }
            } else {
                if (ted.mPoints.length > 1) {  // multi-touch
                    if (ted.mAction == MotionEvent.ACTION_POINTER_UP &&
                            ted.mMotionEvent.getPointerCount() == 2) {
                    }
                    if (!ted.mNativeResult) {
                    if (!ted.mNativeResult && mPreventDefault != PREVENT_DEFAULT_YES) {
                        mPreventDefault = PREVENT_DEFAULT_NO;
                        handleMultiTouchInWebView(ted.mMotionEvent);
                    } else {