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

Commit aa13fbed authored by Grace Kloba's avatar Grace Kloba Committed by Android (Google) Code Review
Browse files

Merge "If mPreventDrag is cancelled due to time out, remove the pending...

Merge "If mPreventDrag is cancelled due to time out, remove the pending TOUCH_EVENTS and then send an ACTION_CANCEL and skip the rest of touch events."
parents 62be8e17 93f5831e
Loading
Loading
Loading
Loading
+24 −10
Original line number Diff line number Diff line
@@ -375,6 +375,7 @@ public class WebView extends AbsoluteLayout
    private static final int PREVENT_DRAG_NO = 0;
    private static final int PREVENT_DRAG_MAYBE_YES = 1;
    private static final int PREVENT_DRAG_YES = 2;
    private static final int PREVENT_DRAG_CANCEL = 3;
    private int mPreventDrag = PREVENT_DRAG_NO;

    // by default mPreventLongPress is false. If it is true, long press event
@@ -4437,8 +4438,11 @@ public class WebView extends AbsoluteLayout
        }

        // pass the touch events from UI thread to WebCore thread
        if (mForwardTouchEvents && (action != MotionEvent.ACTION_MOVE
                || eventTime - mLastSentTouchTime > mCurrentTouchInterval)) {
        if (mForwardTouchEvents
                && (action != MotionEvent.ACTION_MOVE || eventTime
                        - mLastSentTouchTime > mCurrentTouchInterval)
                && (action == MotionEvent.ACTION_DOWN
                        || mPreventDrag != PREVENT_DRAG_CANCEL)) {
            WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
            ted.mAction = action;
            ted.mX = viewToContentX((int) x + mScrollX);
@@ -5719,12 +5723,17 @@ public class WebView extends AbsoluteLayout
                    break;
                }
                case SWITCH_TO_SHORTPRESS: {
                    // if mPreventDrag is not confirmed, treat it as no so that
                    // it won't block panning the page.
                    // if mPreventDrag is not confirmed, cancel it so that it
                    // won't block panning the page.
                    if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) {
                        mPreventDrag = PREVENT_DRAG_NO;
                        mPreventDrag = PREVENT_DRAG_CANCEL;
                        mPreventLongPress = false;
                        mPreventDoubleTap = false;
                        // remove the pending TOUCH_EVENT and send a cancel
                        mWebViewCore.removeMessages(EventHub.TOUCH_EVENT);
                        WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
                        ted.mAction = MotionEvent.ACTION_CANCEL;
                        mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
                    }
                    if (mTouchMode == TOUCH_INIT_MODE) {
                        mTouchMode = mFullScreenHolder == null
@@ -5751,7 +5760,7 @@ public class WebView extends AbsoluteLayout
                        // don't set it.
                        ted.mMetaState = 0;
                        mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
                    } else if (mPreventDrag == PREVENT_DRAG_NO) {
                    } else if (mPreventDrag != PREVENT_DRAG_YES) {
                        mTouchMode = TOUCH_DONE_MODE;
                        if (mFullScreenHolder == null) {
                            performLongClick();
@@ -5762,13 +5771,18 @@ public class WebView extends AbsoluteLayout
                }
                case RELEASE_SINGLE_TAP: {
                    if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) {
                        // if mPreventDrag is not confirmed, treat it as
                        // no so that it won't block tap.
                        mPreventDrag = PREVENT_DRAG_NO;
                        // if mPreventDrag is not confirmed, cancel it so that
                        // it won't block panning the page.
                        mPreventDrag = PREVENT_DRAG_CANCEL;
                        mPreventLongPress = false;
                        mPreventDoubleTap = false;
                        // remove the pending TOUCH_EVENT and send a cancel
                        mWebViewCore.removeMessages(EventHub.TOUCH_EVENT);
                        WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
                        ted.mAction = MotionEvent.ACTION_CANCEL;
                        mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
                    }
                    if (mPreventDrag == PREVENT_DRAG_NO) {
                    if (mPreventDrag != PREVENT_DRAG_YES) {
                        mTouchMode = TOUCH_DONE_MODE;
                        doShortPress();
                    }