diff options
Diffstat (limited to 'tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java')
-rw-r--r-- | tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java new file mode 100644 index 0000000..eea6346 --- /dev/null +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dumprendertree; + +import android.webkit.WebView; +import android.view.KeyEvent; +import android.util.*; + +import java.util.Arrays; + +public class WebViewEventSender implements EventSender { + + WebViewEventSender(WebView webView) { + mWebView = webView; + } + + public void resetMouse() { + mouseX = mouseY = 0; + } + + public void enableDOMUIEventLogging(int DOMNode) { + // TODO Auto-generated method stub + + } + + public void fireKeyboardEventsToElement(int DOMNode) { + // TODO Auto-generated method stub + + } + + public void keyDown(String character, String[] withModifiers) { + Log.e("EventSender", "KeyDown: " + character + "(" + + character.getBytes()[0] + ") Modifiers: " + + Arrays.toString(withModifiers)); + KeyEvent modifier = null; + if (withModifiers != null && withModifiers.length > 0) { + for (int i = 0; i < withModifiers.length; i++) { + int keyCode = modifierMapper(withModifiers[i]); + modifier = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); + mWebView.onKeyDown(modifier.getKeyCode(), modifier); + } + } + int keyCode = keyMapper(character.toLowerCase().toCharArray()[0]); + KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); + mWebView.onKeyDown(event.getKeyCode(), event); + + } + + public void keyDown(String character) { + keyDown(character, null); + } + + public void leapForward(int milliseconds) { + // TODO Auto-generated method stub + + } + + public void mouseClick() { + mouseDown(); + mouseUp(); + } + + public void mouseDown() { + /* KeyEvent event = new KeyEvent( + KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER); + mWebView.onKeyDown(event.getKeyCode(), event); */ + } + + public void mouseMoveTo(int X, int Y) { + if (X > mouseX) { + KeyEvent event = new KeyEvent( + KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT); + mWebView.onKeyDown(event.getKeyCode(), event); + mWebView.onKeyUp(event.getKeyCode(), event); + } else if ( X < mouseX ) { + KeyEvent event = new KeyEvent( + KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT); + mWebView.onKeyDown(event.getKeyCode(), event); + mWebView.onKeyUp(event.getKeyCode(), event); + } + if (Y > mouseY) { + KeyEvent event = new KeyEvent( + KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN); + mWebView.onKeyDown(event.getKeyCode(), event); + mWebView.onKeyUp(event.getKeyCode(), event); + } else if (Y < mouseY ) { + KeyEvent event = new KeyEvent( + KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP); + mWebView.onKeyDown(event.getKeyCode(), event); + mWebView.onKeyUp(event.getKeyCode(), event); + } + mouseX= X; + mouseY= Y; + + } + + public void mouseUp() { + /* KeyEvent event = new KeyEvent( + KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER); + mWebView.onKeyDown(event.getKeyCode(), event);*/ + + } + + // Assumes lowercase chars, case needs to be + // handled by calling function. + static int keyMapper(char c) { + // handle numbers + if (c >= '0' && c<= '9') { + int offset = c - '0'; + return KeyEvent.KEYCODE_0 + offset; + } + + // handle characters + if (c >= 'a' && c <= 'z') { + int offset = c - 'a'; + return KeyEvent.KEYCODE_A + offset; + } + + // handle all others + switch (c) { + case '*': + return KeyEvent.KEYCODE_STAR; + case '#': + return KeyEvent.KEYCODE_POUND; + case ',': + return KeyEvent.KEYCODE_COMMA; + case '.': + return KeyEvent.KEYCODE_PERIOD; + case '\t': + return KeyEvent.KEYCODE_TAB; + case ' ': + return KeyEvent.KEYCODE_SPACE; + case '\n': + return KeyEvent.KEYCODE_ENTER; + case '\b': + case 0x7F: + return KeyEvent.KEYCODE_DEL; + case '~': + return KeyEvent.KEYCODE_GRAVE; + case '-': + return KeyEvent.KEYCODE_MINUS; + case '=': + return KeyEvent.KEYCODE_EQUALS; + case '(': + return KeyEvent.KEYCODE_LEFT_BRACKET; + case ')': + return KeyEvent.KEYCODE_RIGHT_BRACKET; + case '\\': + return KeyEvent.KEYCODE_BACKSLASH; + case ';': + return KeyEvent.KEYCODE_SEMICOLON; + case '\'': + return KeyEvent.KEYCODE_APOSTROPHE; + case '/': + return KeyEvent.KEYCODE_SLASH; + default: + break; + } + + return c; + } + + static int modifierMapper(String modifier) { + if (modifier.equals("ctrlKey")) { + return KeyEvent.KEYCODE_ALT_LEFT; + } else if (modifier.equals("shiftKey")) { + return KeyEvent.KEYCODE_SHIFT_LEFT; + } else if (modifier.equals("altKey")) { + return KeyEvent.KEYCODE_SYM; + } else if (modifier.equals("metaKey")) { + return KeyEvent.KEYCODE_UNKNOWN; + } + return KeyEvent.KEYCODE_UNKNOWN; + } + + private WebView mWebView = null; + private int mouseX; + private int mouseY; + +} |