summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/WebView.java
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2012-02-27 10:59:45 -0800
committerGeorge Mount <mount@google.com>2012-02-27 14:19:44 -0800
commite12dd8fd969e0664bfaee457567f654ac937461d (patch)
tree4b06cb850449c2f35718df4e48144ff4aee34038 /core/java/android/webkit/WebView.java
parentfd400f5f483d76a38a28155a7328a953ed3ec36f (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.java45
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));
}