Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53519eac authored by George Mount's avatar George Mount
Browse files

Add javascript key events for special characters.

 Bug 6033096

Change-Id: I6c10db405266eee3e25f7446a43f4d7a566f3ef7
parent a4b8a2e4
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -555,17 +555,13 @@ public class WebView extends AbsoluteLayout
                        && TextUtils.regionMatches(text, 0, original, 0,
                                textLength);
            }
            boolean sendChange = false;
            if (isCharacterAdd) {
                sendChange = !sendCharacter(text.charAt(textLength - 1));
                sendCharacter(text.charAt(textLength - 1));
            } else if (isCharacterDelete) {
                sendDeleteKey();
            } else {
                sendChange = (textLength != originalLength) ||
            } else if ((textLength != originalLength) ||
                    !TextUtils.regionMatches(text, 0, original, 0,
                                textLength);
            }
            if (sendChange) {
                            textLength)) {
                // Send a message so that key strokes and text replacement
                // do not come out of order.
                Message replaceMessage = mPrivateHandler.obtainMessage(
@@ -579,20 +575,21 @@ public class WebView extends AbsoluteLayout
         * Send a single character to the WebView as a key down and up event.
         * @param c The character to be sent.
         */
        private boolean sendCharacter(char c) {
        private void sendCharacter(char c) {
            if (mKeyCharacterMap == null) {
                mKeyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
            }
            char[] chars = new char[1];
            chars[0] = c;
            KeyEvent[] events = mKeyCharacterMap.getEvents(chars);
            boolean mapsToKeyEvent = (events != null);
            if (mapsToKeyEvent) {
            if (events != null) {
                for (KeyEvent event : events) {
                    sendKeyEvent(event);
                }
            } else {
                Message msg = mPrivateHandler.obtainMessage(KEY_PRESS, (int) c, 0);
                mPrivateHandler.sendMessage(msg);
            }
            return mapsToKeyEvent;
        }

        /**
@@ -1030,6 +1027,7 @@ public class WebView extends AbsoluteLayout
    static final int INIT_EDIT_FIELD                    = 142;
    static final int REPLACE_TEXT                       = 143;
    static final int CLEAR_CARET_HANDLE                 = 144;
    static final int KEY_PRESS                          = 145;

    private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID;
    private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT;
@@ -9242,6 +9240,10 @@ public class WebView extends AbsoluteLayout
                    selectionDone();
                    break;

                case KEY_PRESS:
                    mWebViewCore.sendMessage(EventHub.KEY_PRESS, msg.arg1);
                    break;

                default:
                    super.handleMessage(msg);
                    break;
+14 −2
Original line number Diff line number Diff line
@@ -1172,8 +1172,11 @@ public final class WebViewCore {
        static final int TRUST_STORAGE_UPDATED = 220;

        // find-on-page controls
        static final int FIND_ALL = 220;
        static final int FIND_NEXT = 221;
        static final int FIND_ALL = 221;
        static final int FIND_NEXT = 222;

        // key was pressed (down and up)
        static final int KEY_PRESS = 223;

        // Private handler for WebCore messages.
        private Handler mHandler;
@@ -1354,6 +1357,10 @@ public final class WebViewCore {
                            key((KeyEvent) msg.obj, false);
                            break;

                        case KEY_PRESS:
                            keyPress(msg.arg1);
                            break;

                        case FAKE_CLICK:
                            nativeClick(mNativeClass, msg.arg1, msg.arg2, true);
                            break;
@@ -2060,6 +2067,11 @@ public final class WebViewCore {
        }
    }

    private void keyPress(int unicodeChar) {
        nativeKey(mNativeClass, 0, unicodeChar, 0, false, false, false, true);
        nativeKey(mNativeClass, 0, unicodeChar, 0, false, false, false, false);
    }

    // These values are used to avoid requesting a layout based on old values
    private int mCurrentViewWidth = 0;
    private int mCurrentViewHeight = 0;