From e838a427786f136155b618962bd18781be8e012d Mon Sep 17 00:00:00 2001 From: Huahui Wu Date: Thu, 13 Jan 2011 16:03:43 -0800 Subject: b/3133123 Pass touch point ids to WebKit. This is the CL in framework side and it needs the WebKit part CL: https://android-git.corp.google.com/g/#change,89627 Change-Id: I11d4ffa29fa106d918332e6983090b06726ebd36 --- core/java/android/view/MotionEvent.java | 3 +++ core/java/android/webkit/WebView.java | 14 ++++++++++++++ core/java/android/webkit/WebViewCore.java | 9 +++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index e81aa982f167..db2cd5056252 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -1550,6 +1550,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { @Override public String toString() { return "MotionEvent{" + Integer.toHexString(System.identityHashCode(this)) + + " pointerId=" + getPointerId(0) + " action=" + actionToString(mAction) + " x=" + getX() + " y=" + getY() @@ -1567,6 +1568,8 @@ public final class MotionEvent extends InputEvent implements Parcelable { + " edgeFlags=0x" + Integer.toHexString(mEdgeFlags) + " device=" + mDeviceId + " source=0x" + Integer.toHexString(mSource) + + (getPointerCount() > 1 ? + " pointerId2=" + getPointerId(1) + " x2=" + getX(2) + " y2=" + getY(2) : "") + "}"; } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 4addb08a761c..8beca071f78e 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -5455,6 +5455,8 @@ public class WebView extends AbsoluteLayout if (shouldForwardTouchEvent()) { TouchEventData ted = new TouchEventData(); ted.mAction = action; + ted.mIds = new int[1]; + ted.mIds[0] = ev.getPointerId(0); ted.mPoints = new Point[1]; ted.mPoints[0] = new Point(contentX, contentY); ted.mMetaState = ev.getMetaState(); @@ -5497,6 +5499,8 @@ public class WebView extends AbsoluteLayout || eventTime - mLastSentTouchTime > mCurrentTouchInterval)) { TouchEventData ted = new TouchEventData(); ted.mAction = action; + ted.mIds = new int[1]; + ted.mIds[0] = ev.getPointerId(0); ted.mPoints = new Point[1]; ted.mPoints[0] = new Point(contentX, contentY); ted.mMetaState = ev.getMetaState(); @@ -5666,6 +5670,8 @@ public class WebView extends AbsoluteLayout // pass the touch events from UI thread to WebCore thread if (shouldForwardTouchEvent()) { TouchEventData ted = new TouchEventData(); + ted.mIds = new int[1]; + ted.mIds[0] = ev.getPointerId(0); ted.mAction = action; ted.mPoints = new Point[1]; ted.mPoints[0] = new Point(contentX, contentY); @@ -5683,6 +5689,8 @@ public class WebView extends AbsoluteLayout mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); if (inFullScreenMode() || mDeferTouchProcess) { TouchEventData ted = new TouchEventData(); + ted.mIds = new int[1]; + ted.mIds[0] = ev.getPointerId(0); ted.mAction = WebViewCore.ACTION_DOUBLETAP; ted.mPoints = new Point[1]; ted.mPoints[0] = new Point(contentX, contentY); @@ -5816,8 +5824,10 @@ public class WebView extends AbsoluteLayout TouchEventData ted = new TouchEventData(); ted.mAction = ev.getAction() & MotionEvent.ACTION_MASK; final int count = ev.getPointerCount(); + ted.mIds = new int[count]; ted.mPoints = new Point[count]; for (int c = 0; c < count; c++) { + ted.mIds[c] = ev.getPointerId(c); int x = viewToContentX((int) ev.getX(c) + mScrollX); int y = viewToContentY((int) ev.getY(c) + mScrollY); ted.mPoints[c] = new Point(x, y); @@ -5911,6 +5921,8 @@ public class WebView extends AbsoluteLayout mWebViewCore.removeMessages(EventHub.TOUCH_EVENT); } TouchEventData ted = new TouchEventData(); + ted.mIds = new int[1]; + ted.mIds[0] = 0; ted.mPoints = new Point[1]; ted.mPoints[0] = new Point(x, y); ted.mAction = MotionEvent.ACTION_CANCEL; @@ -7038,6 +7050,8 @@ public class WebView extends AbsoluteLayout if (inFullScreenMode() || mDeferTouchProcess) { TouchEventData ted = new TouchEventData(); ted.mAction = WebViewCore.ACTION_LONGPRESS; + ted.mIds = new int[1]; + ted.mIds[0] = 0; ted.mPoints = new Point[1]; ted.mPoints[0] = new Point(viewToContentX((int) mLastTouchX + mScrollX), viewToContentY((int) mLastTouchY + mScrollY)); diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index c874160ffaf6..0abf7d4f4322 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -562,8 +562,8 @@ final class WebViewCore { private native void nativeTouchUp(int touchGeneration, int framePtr, int nodePtr, int x, int y); - private native boolean nativeHandleTouchEvent(int action, int[] x, int[] y, - int count, int metaState); + private native boolean nativeHandleTouchEvent(int action, int[] idArray, + int[] xArray, int[] yArray, int count, int metaState); private native void nativeUpdateFrameCache(); @@ -828,6 +828,7 @@ final class WebViewCore { static class TouchEventData { int mAction; + int[] mIds; // Ids of the touch points Point[] mPoints; int mMetaState; boolean mReprocess; @@ -1331,8 +1332,8 @@ final class WebViewCore { mWebView.mPrivateHandler, WebView.PREVENT_TOUCH_ID, ted.mAction, - nativeHandleTouchEvent(ted.mAction, xArray, - yArray, count, ted.mMetaState) ? 1 : 0, + nativeHandleTouchEvent(ted.mAction, ted.mIds, + xArray, yArray, count, ted.mMetaState) ? 1 : 0, ted.mReprocess ? ted : null).sendToTarget(); break; } -- cgit v1.2.3-59-g8ed1b