Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: ui/platform_window/android/java/src/org/chromium/ui/PlatformWindowInputConnection.java

Issue 1391893003: NOT FOR REVIEW: Aura on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/platform_window/android/java/src/org/chromium/ui/PlatformWindowInputConnection.java
diff --git a/ui/platform_window/android/java/src/org/chromium/ui/PlatformWindowInputConnection.java b/ui/platform_window/android/java/src/org/chromium/ui/PlatformWindowInputConnection.java
new file mode 100644
index 0000000000000000000000000000000000000000..70deb102963bcd32f7017b9c6e01c8360de59c79
--- /dev/null
+++ b/ui/platform_window/android/java/src/org/chromium/ui/PlatformWindowInputConnection.java
@@ -0,0 +1,80 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.ui;
+
+import android.view.inputmethod.BaseInputConnection;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.View;
+
+import org.chromium.base.Log;
+
+/**
+ * Exposes InputConnection related code to native code.
+ */
+class PlatformWindowInputConnection extends BaseInputConnection{
+ private static final String TAG = "auraclank:";
+ private static final int COMPOSITION_KEY_CODE = 229;
+
+ private final View mWindow;
+ static char[] sSingleCharArray = new char[1];
+ static KeyCharacterMap sKeyCharacterMap;
+
+ PlatformWindowInputConnection(View targetView, boolean fullEditor) {
+ super(targetView, fullEditor);
+ mWindow = targetView;
+ }
+
+ /**
+ * @return Android KeyEvent for a single unicode character. Only one KeyEvent is returned
+ * even if the system determined that various modifier keys (like Shift) would also have
+ * been pressed.
+ */
+ private static KeyEvent androidKeyEventForCharacter(char chr) {
+ if (sKeyCharacterMap == null) {
+ sKeyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
+ }
+ sSingleCharArray[0] = chr;
+ // TODO: Evaluate cost of this system call.
+ KeyEvent[] events = sKeyCharacterMap.getEvents(sSingleCharArray);
+ if (events == null) { // No known key sequence will create that character.
+ return null;
+ }
+
+ for (int i = 0; i < events.length; ++i) {
+ if (events[i].getAction() == KeyEvent.ACTION_DOWN
+ && !KeyEvent.isModifierKey(events[i].getKeyCode())) {
+ return events[i];
+ }
+ }
+
+ return null; // No printing characters were found.
+ }
+
+ @Override
+ public boolean deleteSurroundingText(int beforeLength, int afterLength) {
+ Log.e(TAG, "deleteSurroundingText");
+ return mWindow.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_DEL));
+ }
+
+ @Override
+ public boolean sendKeyEvent(KeyEvent event) {
+ Log.e(TAG, "send key event");
+ return mWindow.dispatchKeyEvent(event);
+ }
+
+ @Override
+ public boolean commitText(CharSequence text, int newCursorPosition) {
+ // hack: transform commit text to key event.
+ Log.e(TAG, "commitText [%s] [%d]", text, newCursorPosition);
+
+ String textStr = text.toString();
+ if (textStr.length() != 1) {
+ Log.e(TAG, "Not yet support commit more than 1 char");
+ }
+ return mWindow.dispatchKeyEvent(androidKeyEventForCharacter(textStr.charAt(0)));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698