diff options
| author | George Mount <mount@google.com> | 2012-02-22 17:00:26 -0800 |
|---|---|---|
| committer | George Mount <mount@google.com> | 2012-02-22 17:23:23 -0800 |
| commit | 6420ec4cd559065f494ef443d73ec161b741e5f6 (patch) | |
| tree | bd1dcb68ef1f3d31cdacf0ca1a914141a36bdb11 /core/java/android/webkit/WebView.java | |
| parent | 49cc3d98e296d115f1816b8a96b8ff713cf7abe3 (diff) | |
Characters sent directly to InputConnection treated as changes.
Bug 6045123
Change-Id: Iab8c1e3c307ec84c4f6934abfa2d0cea726d9efe
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index bb148f4fa0ee..de782109d25d 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -382,21 +382,24 @@ public class WebView extends AbsoluteLayout @Override public boolean sendKeyEvent(KeyEvent event) { - // Latin IME occasionally sends delete codes directly using - // sendKeyEvents. WebViewInputConnection should treat this - // as a deleteSurroundingText. - if (!mIsKeySentByMe - && event.getKeyCode() == KeyEvent.KEYCODE_DEL) { - Editable editable = getEditable(); - int selectionStart = Selection.getSelectionStart(editable); - int selectionEnd = Selection.getSelectionEnd(editable); - if (selectionEnd > 0 && (selectionStart == selectionEnd)) { - int action = event.getAction(); - if (action == KeyEvent.ACTION_UP) { + // Some IMEs send key events directly using sendKeyEvents. + // WebViewInputConnection should treat these as text changes. + if (!mIsKeySentByMe) { + if (event.getAction() == KeyEvent.ACTION_UP) { + if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) { return deleteSurroundingText(1, 0); - } else if (action == KeyEvent.ACTION_DOWN) { - return true; // the delete will happen in ACTION_UP + } else if (event.getKeyCode() == KeyEvent.KEYCODE_FORWARD_DEL) { + return deleteSurroundingText(0, 1); + } else if (event.getUnicodeChar() != 0){ + String newComposingText = + Character.toString((char)event.getUnicodeChar()); + return commitText(newComposingText, 1); } + } else if (event.getAction() == KeyEvent.ACTION_DOWN && + (event.getKeyCode() == KeyEvent.KEYCODE_DEL + || event.getKeyCode() == KeyEvent.KEYCODE_FORWARD_DEL + || event.getUnicodeChar() != 0)) { + return true; // only act on action_down } } return super.sendKeyEvent(event); |
