Merge "If mPreventDrag is cancelled due to time out, remove the pending TOUCH_EVENTS and then send an ACTION_CANCEL and skip the rest of touch events."

This commit is contained in:
Grace Kloba
2010-02-24 14:32:50 -08:00
committed by Android (Google) Code Review

View File

@@ -375,6 +375,7 @@ public class WebView extends AbsoluteLayout
private static final int PREVENT_DRAG_NO = 0;
private static final int PREVENT_DRAG_MAYBE_YES = 1;
private static final int PREVENT_DRAG_YES = 2;
private static final int PREVENT_DRAG_CANCEL = 3;
private int mPreventDrag = PREVENT_DRAG_NO;
// by default mPreventLongPress is false. If it is true, long press event
@@ -4437,8 +4438,11 @@ public class WebView extends AbsoluteLayout
}
// pass the touch events from UI thread to WebCore thread
if (mForwardTouchEvents && (action != MotionEvent.ACTION_MOVE
|| eventTime - mLastSentTouchTime > mCurrentTouchInterval)) {
if (mForwardTouchEvents
&& (action != MotionEvent.ACTION_MOVE || eventTime
- mLastSentTouchTime > mCurrentTouchInterval)
&& (action == MotionEvent.ACTION_DOWN
|| mPreventDrag != PREVENT_DRAG_CANCEL)) {
WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
ted.mAction = action;
ted.mX = viewToContentX((int) x + mScrollX);
@@ -5719,12 +5723,17 @@ public class WebView extends AbsoluteLayout
break;
}
case SWITCH_TO_SHORTPRESS: {
// if mPreventDrag is not confirmed, treat it as no so that
// it won't block panning the page.
// if mPreventDrag is not confirmed, cancel it so that it
// won't block panning the page.
if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) {
mPreventDrag = PREVENT_DRAG_NO;
mPreventDrag = PREVENT_DRAG_CANCEL;
mPreventLongPress = false;
mPreventDoubleTap = false;
// remove the pending TOUCH_EVENT and send a cancel
mWebViewCore.removeMessages(EventHub.TOUCH_EVENT);
WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
ted.mAction = MotionEvent.ACTION_CANCEL;
mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
}
if (mTouchMode == TOUCH_INIT_MODE) {
mTouchMode = mFullScreenHolder == null
@@ -5751,7 +5760,7 @@ public class WebView extends AbsoluteLayout
// don't set it.
ted.mMetaState = 0;
mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
} else if (mPreventDrag == PREVENT_DRAG_NO) {
} else if (mPreventDrag != PREVENT_DRAG_YES) {
mTouchMode = TOUCH_DONE_MODE;
if (mFullScreenHolder == null) {
performLongClick();
@@ -5762,13 +5771,18 @@ public class WebView extends AbsoluteLayout
}
case RELEASE_SINGLE_TAP: {
if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) {
// if mPreventDrag is not confirmed, treat it as
// no so that it won't block tap.
mPreventDrag = PREVENT_DRAG_NO;
// if mPreventDrag is not confirmed, cancel it so that
// it won't block panning the page.
mPreventDrag = PREVENT_DRAG_CANCEL;
mPreventLongPress = false;
mPreventDoubleTap = false;
// remove the pending TOUCH_EVENT and send a cancel
mWebViewCore.removeMessages(EventHub.TOUCH_EVENT);
WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData();
ted.mAction = MotionEvent.ACTION_CANCEL;
mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
}
if (mPreventDrag == PREVENT_DRAG_NO) {
if (mPreventDrag != PREVENT_DRAG_YES) {
mTouchMode = TOUCH_DONE_MODE;
doShortPress();
}