summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/WebView.java7
-rw-r--r--core/java/android/webkit/WebViewCore.java5
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java13
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java1
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java29
5 files changed, 46 insertions, 9 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 5f5df56..adae0cb 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -4436,6 +4436,7 @@ public class WebView extends AbsoluteLayout
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;
}
@@ -4699,6 +4700,7 @@ public class WebView extends AbsoluteLayout
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);
} else if (mFullScreenHolder == null) {
doDoubleTap();
@@ -5735,6 +5737,11 @@ public class WebView extends AbsoluteLayout
ted.mX = viewToContentX((int) mLastTouchX + mScrollX);
ted.mY = viewToContentY((int) mLastTouchY + mScrollY);
ted.mEventTime = SystemClock.uptimeMillis();
+ // metaState for long press is tricky. Should it be the state
+ // when the press started or when the press was released? Or
+ // some intermediary key state? For simplicity for now, we
+ // don't set it.
+ ted.mMetaState = 0;
mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted);
} else if (mPreventDrag == PREVENT_DRAG_NO) {
mTouchMode = TOUCH_DONE_MODE;
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 3a3e445..361ec56 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -515,7 +515,7 @@ final class WebViewCore {
private native void nativeTouchUp(int touchGeneration,
int framePtr, int nodePtr, int x, int y);
- private native int nativeHandleTouchEvent(int action, int x, int y, long time);
+ private native int nativeHandleTouchEvent(int action, int x, int y, long time, int metaState);
private native void nativeUpdateFrameCache();
@@ -735,6 +735,7 @@ final class WebViewCore {
int mX;
int mY;
long mEventTime;
+ int mMetaState;
}
static class GeolocationPermissionsData {
@@ -1198,7 +1199,7 @@ final class WebViewCore {
mWebView.mPrivateHandler,
WebView.PREVENT_TOUCH_ID, ted.mAction,
nativeHandleTouchEvent(ted.mAction, ted.mX,
- ted.mY, ted.mEventTime)).sendToTarget();
+ ted.mY, ted.mEventTime, ted.mMetaState)).sendToTarget();
break;
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java b/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
index 50451e7..ce1bf8d 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
@@ -47,6 +47,7 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
private static final int EVENT_RELEASE_TOUCH_POINT = 16;
private static final int EVENT_CLEAR_TOUCH_POINTS = 17;
private static final int EVENT_CANCEL_TOUCH_POINT = 18;
+ private static final int EVENT_SET_TOUCH_MODIFIER = 19;
private static final int LAYOUT_CLEAR_LIST = 20;
private static final int LAYOUT_DISPLAY = 21;
@@ -145,6 +146,13 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
mEventSender.updateTouchPoint(id, x, y);
break;
+ case EVENT_SET_TOUCH_MODIFIER:
+ Bundle modifierArgs = (Bundle) msg.obj;
+ String modifier = modifierArgs.getString("modifier");
+ boolean enabled = modifierArgs.getBoolean("enabled");
+ mEventSender.setTouchModifier(modifier, enabled);
+ break;
+
case EVENT_RELEASE_TOUCH_POINT:
mEventSender.releaseTouchPoint(msg.arg1);
break;
@@ -320,7 +328,10 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
}
public void setTouchModifier(String modifier, boolean enabled) {
- // TODO(benm): Android doesn't support key modifiers on touch events yet.
+ Bundle map = new Bundle();
+ map.putString("modifier", modifier);
+ map.putBoolean("enabled", enabled);
+ obtainMessage(EVENT_SET_TOUCH_MODIFIER, map).sendToTarget();
}
public void touchMove() {
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index 2667520..02a7046 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -716,6 +716,7 @@ public class TestShellActivity extends Activity implements LayoutTestController
mCanOpenWindows = false;
mEventSender.resetMouse();
mEventSender.clearTouchPoints();
+ mEventSender.clearTouchMetaState();
mPageFinished = false;
mOneHundredPercentComplete = false;
mDumpWebKitData = false;
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
index 996eaba..0c2347d 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
@@ -207,7 +207,7 @@ public class WebViewEventSender implements EventSender {
tp.setDownTime(SystemClock.uptimeMillis());
MotionEvent event = MotionEvent.obtain(tp.downTime(), tp.downTime(),
- MotionEvent.ACTION_DOWN, tp.getX(), tp.getY(), 0);
+ MotionEvent.ACTION_DOWN, tp.getX(), tp.getY(), mTouchMetaState);
mWebView.onTouchEvent(event);
}
@@ -223,7 +223,7 @@ public class WebViewEventSender implements EventSender {
}
MotionEvent event = MotionEvent.obtain(tp.downTime(), SystemClock.uptimeMillis(),
- MotionEvent.ACTION_MOVE, tp.getX(), tp.getY(), 0);
+ MotionEvent.ACTION_MOVE, tp.getX(), tp.getY(), mTouchMetaState);
mWebView.onTouchEvent(event);
tp.setMoved(false);
@@ -237,7 +237,7 @@ public class WebViewEventSender implements EventSender {
}
MotionEvent event = MotionEvent.obtain(tp.downTime(), SystemClock.uptimeMillis(),
- MotionEvent.ACTION_UP, tp.getX(), tp.getY(), 0);
+ MotionEvent.ACTION_UP, tp.getX(), tp.getY(), mTouchMetaState);
mWebView.onTouchEvent(event);
if (tp.isReleased()) {
@@ -253,7 +253,7 @@ public class WebViewEventSender implements EventSender {
if (tp.cancelled()) {
MotionEvent event = MotionEvent.obtain(tp.downTime(), SystemClock.uptimeMillis(),
- MotionEvent.ACTION_CANCEL, tp.getX(), tp.getY(), 0);
+ MotionEvent.ACTION_CANCEL, tp.getX(), tp.getY(), mTouchMetaState);
mWebView.onTouchEvent(event);
}
}
@@ -285,8 +285,20 @@ public class WebViewEventSender implements EventSender {
}
public void setTouchModifier(String modifier, boolean enabled) {
- // TODO(benm): This needs implementing when Android supports sending key modifiers
- // in touch events.
+ int mask = 0;
+ if ("alt".equals(modifier.toLowerCase())) {
+ mask = KeyEvent.META_ALT_ON;
+ } else if ("shift".equals(modifier.toLowerCase())) {
+ mask = KeyEvent.META_SHIFT_ON;
+ } else if ("ctrl".equals(modifier.toLowerCase())) {
+ mask = KeyEvent.META_SYM_ON;
+ }
+
+ if (enabled) {
+ mTouchMetaState |= mask;
+ } else {
+ mTouchMetaState &= ~mask;
+ }
}
public void releaseTouchPoint(int id) {
@@ -302,6 +314,10 @@ public class WebViewEventSender implements EventSender {
mTouchPoints.clear();
}
+ public void clearTouchMetaState() {
+ mTouchMetaState = 0;
+ }
+
private int contentsToWindowX(int x) {
return (int) (x * mWebView.getScale()) - mWebView.getScrollX();
}
@@ -352,4 +368,5 @@ public class WebViewEventSender implements EventSender {
};
private Vector<TouchPoint> mTouchPoints;
+ private int mTouchMetaState;
}