diff options
| author | George Mount <mount@google.com> | 2012-02-27 10:59:45 -0800 |
|---|---|---|
| committer | George Mount <mount@google.com> | 2012-02-27 14:19:44 -0800 |
| commit | e12dd8fd969e0664bfaee457567f654ac937461d (patch) | |
| tree | 4b06cb850449c2f35718df4e48144ff4aee34038 /core/java/android/webkit/WebView.java | |
| parent | fd400f5f483d76a38a28155a7328a953ed3ec36f (diff) | |
Perform action when action button pressed during text input.
Bug 6059576
Change-Id: Ia87f323873b86b22930a2a39bf1c20756f06beec
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index b9dfb2e99611..90240c7b5025 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -122,7 +122,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; @@ -460,6 +459,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 @@ -559,7 +590,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)) { @@ -594,16 +625,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)); } |
