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

Commit f6bd0ba6 authored by Grace Kloba's avatar Grace Kloba
Browse files

Don't send ACTION_MOVE to webkit until the distance

is confirmed to be a drag.

Always send touch events to webkit if a subview, plugin,
is in full screen mode.

Fix http://b/issue?id=2478701
parent c833119c
Loading
Loading
Loading
Loading
+35 −6
Original line number Diff line number Diff line
@@ -4494,12 +4494,12 @@ public class WebView extends AbsoluteLayout
            y = getViewHeightWithTitle() - 1;
        }

        // pass the touch events from UI thread to WebCore thread
        if (mForwardTouchEvents
                && (action != MotionEvent.ACTION_MOVE || eventTime
                        - mLastSentTouchTime > mCurrentTouchInterval)
                && (action == MotionEvent.ACTION_DOWN
                        || mPreventDrag != PREVENT_DRAG_CANCEL)) {
        // pass the touch events, except ACTION_MOVE which will be handled
        // later, from UI thread to WebCore thread
        if (mFullScreenHolder != null || (mForwardTouchEvents
                && action != MotionEvent.ACTION_MOVE
                && (action == MotionEvent.ACTION_DOWN || mPreventDrag
                        != PREVENT_DRAG_CANCEL))) {
            WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
            ted.mAction = action;
            ted.mX = viewToContentX((int) x + mScrollX);
@@ -4590,6 +4590,21 @@ public class WebView extends AbsoluteLayout
                    if ((deltaX * deltaX + deltaY * deltaY) < mTouchSlopSquare) {
                        break;
                    }

                    // pass the first ACTION_MOVE from UI thread to WebCore
                    // thread after the distance is confirmed that it is a drag
                    if (mFullScreenHolder == null && mForwardTouchEvents
                            && mPreventDrag != PREVENT_DRAG_CANCEL) {
                        WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
                        ted.mAction = action;
                        ted.mX = viewToContentX((int) x + mScrollX);
                        ted.mY = viewToContentY((int) y + mScrollY);
                        ted.mEventTime = eventTime;
                        ted.mMetaState = ev.getMetaState();
                        mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
                        mLastSentTouchTime = eventTime;
                    }

                    if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) {
                        // track mLastTouchTime as we may need to do fling at
                        // ACTION_UP
@@ -4646,6 +4661,20 @@ public class WebView extends AbsoluteLayout
                                    Toast.LENGTH_LONG).show();
                        }
                    }
                } else {
                    // pass the touch events from UI thread to WebCore thread
                    if (mFullScreenHolder == null && mForwardTouchEvents
                            && eventTime - mLastSentTouchTime > mCurrentTouchInterval
                            && mPreventDrag != PREVENT_DRAG_CANCEL) {
                        WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
                        ted.mAction = action;
                        ted.mX = viewToContentX((int) x + mScrollX);
                        ted.mY = viewToContentY((int) y + mScrollY);
                        ted.mEventTime = eventTime;
                        ted.mMetaState = ev.getMetaState();
                        mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
                        mLastSentTouchTime = eventTime;
                    }
                }

                // do pan