summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2011-03-25 13:58:19 -0700
committerAdam Powell <adamp@google.com>2011-03-25 13:58:19 -0700
commitbaa3380d74928baf6a5685c54c719af37171a625 (patch)
treef3332c7290297ce3c49f94e5bf0a652d41868fb2
parent837430dd3440f6e71f68ef755399e22386dee084 (diff)
downloadframeworks_base-baa3380d74928baf6a5685c54c719af37171a625.zip
frameworks_base-baa3380d74928baf6a5685c54c719af37171a625.tar.gz
frameworks_base-baa3380d74928baf6a5685c54c719af37171a625.tar.bz2
Fix bug 4170809 - Pages with flash lose touch events
Fix WebView touch cancel behavior when we time out waiting for a response from webkit. Change-Id: I0aeeea64b156e204dbe2dda913a42df28704ed16
-rw-r--r--core/java/android/webkit/WebView.java25
1 files changed, 16 insertions, 9 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 96623b0..a3ced9e 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -6056,7 +6056,6 @@ public class WebView extends AbsoluteLayout
if (shouldForwardTouchEvent()) {
if (removeEvents) {
mWebViewCore.removeMessages(EventHub.TOUCH_EVENT);
- mTouchEventQueue.ignoreCurrentlyMissingEvents();
}
TouchEventData ted = new TouchEventData();
ted.mIds = new int[1];
@@ -6073,6 +6072,12 @@ public class WebView extends AbsoluteLayout
ted.mSequence = mTouchEventQueue.nextTouchSequence();
mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
mPreventDefault = PREVENT_DEFAULT_IGNORE;
+
+ if (removeEvents) {
+ // Mark this after sending the message above; we should
+ // be willing to ignore the cancel event that we just sent.
+ mTouchEventQueue.ignoreCurrentlyMissingEvents();
+ }
}
}
@@ -7266,17 +7271,18 @@ public class WebView extends AbsoluteLayout
* been queued will also be processed in their proper order.
*
* @param ted Touch data to be processed in order.
+ * @return true if the event was processed before returning, false if it was just enqueued.
*/
- public void enqueueTouchEvent(TouchEventData ted) {
+ public boolean enqueueTouchEvent(TouchEventData ted) {
if (ted.mSequence < mLastHandledTouchSequence) {
// Stale event and we already moved on; drop it. (Should not be common.)
Log.w(LOGTAG, "Stale touch event " + MotionEvent.actionToString(ted.mAction) +
" received from webcore; ignoring");
- return;
+ return false;
}
if (dropStaleGestures(ted.mMotionEvent, ted.mSequence)) {
- return;
+ return false;
}
if (mLastHandledTouchSequence + 1 == ted.mSequence) {
@@ -7298,6 +7304,7 @@ public class WebView extends AbsoluteLayout
QueuedTouch qd = obtainQueuedTouch().set(ted);
mTouchEventQueue = mTouchEventQueue == null ? qd : mTouchEventQueue.add(qd);
}
+ return true;
}
/**
@@ -7851,11 +7858,11 @@ public class WebView extends AbsoluteLayout
}
TouchEventData ted = (TouchEventData) msg.obj;
- // WebCore is responding to us; remove pending timeout.
- // It will be re-posted when needed.
- removeMessages(PREVENT_DEFAULT_TIMEOUT);
-
- mTouchEventQueue.enqueueTouchEvent(ted);
+ if (mTouchEventQueue.enqueueTouchEvent(ted)) {
+ // WebCore is responding to us; remove pending timeout.
+ // It will be re-posted when needed.
+ removeMessages(PREVENT_DEFAULT_TIMEOUT);
+ }
break;
case REQUEST_KEYBOARD: