summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrace Kloba <klobag@google.com>2010-03-02 13:08:52 -0800
committerGrace Kloba <klobag@google.com>2010-03-03 10:28:55 -0800
commitf6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d (patch)
tree4beb6f76d5c95fc143547e4b30f28b3c9932448b
parentc833119c140c32feddab153b1111a76a97de6c06 (diff)
downloadframeworks_base-f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d.zip
frameworks_base-f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d.tar.gz
frameworks_base-f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d.tar.bz2
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
-rw-r--r--core/java/android/webkit/WebView.java41
1 files changed, 35 insertions, 6 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 77b8837..0739735 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -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