Loading core/java/android/webkit/WebViewCore.java +13 −3 Original line number Diff line number Diff line Loading @@ -669,7 +669,7 @@ public final class WebViewCore { int x, int y); private native boolean nativeMouseClick(int nativeClass); private native boolean nativeHandleTouchEvent(int nativeClass, int action, private native int nativeHandleTouchEvent(int nativeClass, int action, int[] idArray, int[] xArray, int[] yArray, int count, int actionIndex, int metaState); Loading Loading @@ -968,6 +968,9 @@ public final class WebViewCore { static final int ACTION_LONGPRESS = 0x100; static final int ACTION_DOUBLETAP = 0x200; private static final int TOUCH_FLAG_HIT_HANDLER = 0x1; private static final int TOUCH_FLAG_PREVENT_DEFAULT = 0x2; static class TouchEventData { int mAction; int[] mIds; // Ids of the touch points Loading Loading @@ -1784,7 +1787,8 @@ public final class WebViewCore { } @Override public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags) { public boolean dispatchWebKitEvent(WebViewInputDispatcher dispatcher, MotionEvent event, int eventType, int flags) { if (mNativeClass == 0) { return false; } Loading @@ -1811,10 +1815,16 @@ public final class WebViewCore { xArray[i] = (int) event.getX(i); yArray[i] = (int) event.getY(i); } return nativeHandleTouchEvent(mNativeClass, int touchFlags = nativeHandleTouchEvent(mNativeClass, event.getActionMasked(), idArray, xArray, yArray, count, event.getActionIndex(), event.getMetaState()); if (touchFlags == 0 && event.getActionMasked() != MotionEvent.ACTION_CANCEL && (flags & WebViewInputDispatcher.FLAG_PRIVATE) == 0) { dispatcher.skipWebkitForRemainingTouchStream(); } return (touchFlags & TOUCH_FLAG_PREVENT_DEFAULT) > 0; } default: Loading core/java/android/webkit/WebViewInputDispatcher.java +10 −2 Original line number Diff line number Diff line Loading @@ -686,7 +686,7 @@ final class WebViewInputDispatcher { + ", eventType=" + eventType + ", flags=" + flags); } boolean preventDefault = mWebKitCallbacks.dispatchWebKitEvent( event, eventType, flags); this, event, eventType, flags); if (DEBUG) { Log.d(TAG, "dispatchWebKitEvent: preventDefault=" + preventDefault); } Loading @@ -710,6 +710,12 @@ final class WebViewInputDispatcher { mWebKitDispatchEventQueue.mHead = d; } // Called by WebKit when it doesn't care about the rest of the touch stream public void skipWebkitForRemainingTouchStream() { // Just treat this like a timeout handleWebKitTimeout(); } // Runs on UI thread in response to the web kit thread appearing to be unresponsive. private void handleWebKitTimeout() { synchronized (mLock) { Loading Loading @@ -1081,12 +1087,14 @@ final class WebViewInputDispatcher { /** * Dispatches an event to web kit. * @param dispatcher The WebViewInputDispatcher sending the event * @param event The event. * @param eventType The event type. * @param flags The event's dispatch flags. * @return True if web kit wants to prevent default event handling. */ public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags); public boolean dispatchWebKitEvent(WebViewInputDispatcher dispatcher, MotionEvent event, int eventType, int flags); } // Runs on UI thread. Loading Loading
core/java/android/webkit/WebViewCore.java +13 −3 Original line number Diff line number Diff line Loading @@ -669,7 +669,7 @@ public final class WebViewCore { int x, int y); private native boolean nativeMouseClick(int nativeClass); private native boolean nativeHandleTouchEvent(int nativeClass, int action, private native int nativeHandleTouchEvent(int nativeClass, int action, int[] idArray, int[] xArray, int[] yArray, int count, int actionIndex, int metaState); Loading Loading @@ -968,6 +968,9 @@ public final class WebViewCore { static final int ACTION_LONGPRESS = 0x100; static final int ACTION_DOUBLETAP = 0x200; private static final int TOUCH_FLAG_HIT_HANDLER = 0x1; private static final int TOUCH_FLAG_PREVENT_DEFAULT = 0x2; static class TouchEventData { int mAction; int[] mIds; // Ids of the touch points Loading Loading @@ -1784,7 +1787,8 @@ public final class WebViewCore { } @Override public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags) { public boolean dispatchWebKitEvent(WebViewInputDispatcher dispatcher, MotionEvent event, int eventType, int flags) { if (mNativeClass == 0) { return false; } Loading @@ -1811,10 +1815,16 @@ public final class WebViewCore { xArray[i] = (int) event.getX(i); yArray[i] = (int) event.getY(i); } return nativeHandleTouchEvent(mNativeClass, int touchFlags = nativeHandleTouchEvent(mNativeClass, event.getActionMasked(), idArray, xArray, yArray, count, event.getActionIndex(), event.getMetaState()); if (touchFlags == 0 && event.getActionMasked() != MotionEvent.ACTION_CANCEL && (flags & WebViewInputDispatcher.FLAG_PRIVATE) == 0) { dispatcher.skipWebkitForRemainingTouchStream(); } return (touchFlags & TOUCH_FLAG_PREVENT_DEFAULT) > 0; } default: Loading
core/java/android/webkit/WebViewInputDispatcher.java +10 −2 Original line number Diff line number Diff line Loading @@ -686,7 +686,7 @@ final class WebViewInputDispatcher { + ", eventType=" + eventType + ", flags=" + flags); } boolean preventDefault = mWebKitCallbacks.dispatchWebKitEvent( event, eventType, flags); this, event, eventType, flags); if (DEBUG) { Log.d(TAG, "dispatchWebKitEvent: preventDefault=" + preventDefault); } Loading @@ -710,6 +710,12 @@ final class WebViewInputDispatcher { mWebKitDispatchEventQueue.mHead = d; } // Called by WebKit when it doesn't care about the rest of the touch stream public void skipWebkitForRemainingTouchStream() { // Just treat this like a timeout handleWebKitTimeout(); } // Runs on UI thread in response to the web kit thread appearing to be unresponsive. private void handleWebKitTimeout() { synchronized (mLock) { Loading Loading @@ -1081,12 +1087,14 @@ final class WebViewInputDispatcher { /** * Dispatches an event to web kit. * @param dispatcher The WebViewInputDispatcher sending the event * @param event The event. * @param eventType The event type. * @param flags The event's dispatch flags. * @return True if web kit wants to prevent default event handling. */ public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags); public boolean dispatchWebKitEvent(WebViewInputDispatcher dispatcher, MotionEvent event, int eventType, int flags); } // Runs on UI thread. Loading