diff options
| author | George Mount <mount@google.com> | 2012-02-27 15:06:29 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-27 15:06:29 -0800 |
| commit | e7b57be185422a136fa2ba6b78c0a08497cdd4bc (patch) | |
| tree | 3aee20254582a872ec5bef49bedaf1e66a727fae /core/java/android/webkit/WebView.java | |
| parent | cbd01c31bfa40f4e1b8df9d0d6f57b10aebc5fe9 (diff) | |
| parent | e12dd8fd969e0664bfaee457567f654ac937461d (diff) | |
Merge "Perform action when action button pressed during text input."
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index e7ab826f2757..86185103c5d5 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -479,6 +479,38 @@ public class WebView extends AbsoluteLayout return super.deleteSurroundingText(leftLength, rightLength); } + @Override + public boolean performEditorAction(int editorAction) { + + boolean handled = true; + switch (editorAction) { + case EditorInfo.IME_ACTION_NEXT: + WebView.this.requestFocus(FOCUS_FORWARD); + break; + case EditorInfo.IME_ACTION_PREVIOUS: + WebView.this.requestFocus(FOCUS_BACKWARD); + break; + case EditorInfo.IME_ACTION_DONE: + WebView.this.hideSoftKeyboard(); + break; + case EditorInfo.IME_ACTION_GO: + case EditorInfo.IME_ACTION_SEARCH: + WebView.this.hideSoftKeyboard(); + String text = getEditable().toString(); + passToJavaScript(text, new KeyEvent(KeyEvent.ACTION_DOWN, + KeyEvent.KEYCODE_ENTER)); + passToJavaScript(text, new KeyEvent(KeyEvent.ACTION_UP, + KeyEvent.KEYCODE_ENTER)); + break; + + default: + handled = super.performEditorAction(editorAction); + break; + } + + return handled; + } + public void initEditorInfo(WebViewCore.TextFieldInitData initData) { int type = initData.mType; int inputType = InputType.TYPE_CLASS_TEXT @@ -578,7 +610,7 @@ public class WebView extends AbsoluteLayout if (isCharacterAdd) { sendCharacter(text.charAt(textLength - 1)); } else if (isCharacterDelete) { - sendDeleteKey(); + sendKey(KeyEvent.KEYCODE_DEL); } else if ((textLength != originalLength) || !TextUtils.regionMatches(text, 0, original, 0, textLength)) { @@ -613,16 +645,18 @@ public class WebView extends AbsoluteLayout } /** - * Send the delete character as a key down and up event. + * Send a key event for a specific key code, not a standard + * unicode character. + * @param keyCode The key code to send. */ - private void sendDeleteKey() { + private void sendKey(int keyCode) { long eventTime = SystemClock.uptimeMillis(); sendKeyEvent(new KeyEvent(eventTime, eventTime, - KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL, 0, 0, + KeyEvent.ACTION_DOWN, keyCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_SOFT_KEYBOARD)); sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime, - KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL, 0, 0, + KeyEvent.ACTION_UP, keyCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_SOFT_KEYBOARD)); } |
