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

Commit 7a59c5ae authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Always do a HIT_TEST" into jb-dev

parents 2faa075e 41f73bdf
Loading
Loading
Loading
Loading
+4 −22
Original line number Diff line number Diff line
@@ -1716,6 +1716,10 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        mZoomManager.updateDefaultZoomDensity(density);
    }

    /* package */ int getScaledNavSlop() {
        return viewToContentDimension(mNavSlop);
    }

    /* package */ boolean onSavePassword(String schemePlusHost, String username,
            String password, final Message resumeMsg) {
        boolean rVal = false;
@@ -4338,10 +4342,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
    }

    private void removeTouchHighlight() {
        if (mWebViewCore != null) {
            mWebViewCore.removeMessages(EventHub.HIT_TEST);
        }
        mPrivateHandler.removeMessages(HIT_TEST_RESULT);
        setTouchHighlightRects(null);
    }

@@ -5816,7 +5816,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        switch (action) {
            case MotionEvent.ACTION_DOWN: {
                mConfirmMove = false;
                mInitialHitTestResult = null;
                if (!mEditTextScroller.isFinished()) {
                    mEditTextScroller.abortAnimation();
                }
@@ -5838,23 +5837,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                    }
                } else { // the normal case
                    mTouchMode = TOUCH_INIT_MODE;
                    // TODO: Have WebViewInputDispatch handle this
                    TouchHighlightData data = new TouchHighlightData();
                    data.mX = contentX;
                    data.mY = contentY;
                    data.mNativeLayerRect = new Rect();
                    if (mNativeClass != 0) {
                        data.mNativeLayer = nativeScrollableLayer(mNativeClass,
                                contentX, contentY, data.mNativeLayerRect, null);
                    } else {
                        data.mNativeLayer = 0;
                    }
                    data.mSlop = viewToContentDimension(mNavSlop);
                    removeTouchHighlight();
                    if (!mBlockWebkitViewMessages && mWebViewCore != null) {
                        mWebViewCore.sendMessageAtFrontOfQueue(
                                EventHub.HIT_TEST, data);
                    }
                    if (mLogEvent && eventTime - mLastTouchUpTime < 1000) {
                        EventLog.writeEvent(EventLogTags.BROWSER_DOUBLE_TAP_DURATION,
                                (eventTime - mLastTouchUpTime), eventTime);
+9 −14
Original line number Diff line number Diff line
@@ -1143,8 +1143,6 @@ public final class WebViewCore {
        static final int ADD_PACKAGE_NAME = 185;
        static final int REMOVE_PACKAGE_NAME = 186;

        static final int HIT_TEST = 187;

        // accessibility support
        static final int MODIFY_SELECTION = 190;

@@ -1648,18 +1646,6 @@ public final class WebViewCore {
                                    (Set<String>) msg.obj);
                            break;

                        case HIT_TEST:
                            TouchHighlightData d = (TouchHighlightData) msg.obj;
                            if (d.mNativeLayer != 0) {
                                nativeScrollLayer(mNativeClass,
                                        d.mNativeLayer, d.mNativeLayerRect);
                            }
                            WebKitHitTest hit = performHitTest(d.mX, d.mY, d.mSlop, true);
                            mWebViewClassic.mPrivateHandler.obtainMessage(
                                    WebViewClassic.HIT_TEST_RESULT, hit)
                                    .sendToTarget();
                            break;

                        case SET_USE_MOCK_DEVICE_ORIENTATION:
                            setUseMockDeviceOrientation();
                            break;
@@ -1792,6 +1778,15 @@ public final class WebViewCore {
                return false;
            }
            switch (eventType) {
                case WebViewInputDispatcher.EVENT_TYPE_HIT_TEST:
                    int x = Math.round(event.getX());
                    int y = Math.round(event.getY());
                    WebKitHitTest hit = performHitTest(x, y,
                            mWebViewClassic.getScaledNavSlop(), true);
                    mWebViewClassic.mPrivateHandler.obtainMessage(
                            WebViewClassic.HIT_TEST_RESULT, hit).sendToTarget();
                    return false;

                case WebViewInputDispatcher.EVENT_TYPE_CLICK:
                    return nativeMouseClick(mNativeClass);

+14 −3
Original line number Diff line number Diff line
@@ -203,6 +203,11 @@ final class WebViewInputDispatcher {
     */
    public static final int EVENT_TYPE_DOUBLE_TAP = 5;

    /**
     * Event type: Indicates that a hit test should be performed
     */
    public static final int EVENT_TYPE_HIT_TEST = 6;

    /**
     * Flag: This event is private to this queue.  Do not forward it.
     */
@@ -499,13 +504,17 @@ final class WebViewInputDispatcher {
    }

    private void enqueueDoubleTapLocked(MotionEvent event) {
        unscheduleClickLocked();
        hideTapCandidateLocked();
        MotionEvent eventToEnqueue = MotionEvent.obtainNoHistory(event);
        DispatchEvent d = obtainDispatchEventLocked(eventToEnqueue, EVENT_TYPE_DOUBLE_TAP, 0,
                mPostLastWebKitXOffset, mPostLastWebKitYOffset, mPostLastWebKitScale);
        enqueueEventLocked(d);
        mIsDoubleTapCandidate = false;
    }

    private void enqueueHitTestLocked(MotionEvent event) {
        MotionEvent eventToEnqueue = MotionEvent.obtainNoHistory(event);
        DispatchEvent d = obtainDispatchEventLocked(eventToEnqueue, EVENT_TYPE_HIT_TEST, 0,
                mPostLastWebKitXOffset, mPostLastWebKitYOffset, mPostLastWebKitScale);
        enqueueEventLocked(d);
    }

    private void checkForSlopLocked(MotionEvent event) {
@@ -545,6 +554,7 @@ final class WebViewInputDispatcher {
            mInitialDownX = event.getX();
            mInitialDownY = event.getY();
            scheduleShowTapHighlightLocked();
            enqueueHitTestLocked(event);
        } else if (action == MotionEvent.ACTION_UP) {
            unscheduleLongPressLocked();
            if (isClickCandidateLocked(event)) {
@@ -824,6 +834,7 @@ final class WebViewInputDispatcher {
            case EVENT_TYPE_CLICK:
            case EVENT_TYPE_HOVER:
            case EVENT_TYPE_SCROLL:
            case EVENT_TYPE_HIT_TEST:
                return false;
            case EVENT_TYPE_TOUCH:
                return !mPostSendTouchEventsToWebKit