| Index: remoting/android/java/src/org/chromium/chromoting/Desktop.java
|
| diff --git a/remoting/android/java/src/org/chromium/chromoting/Desktop.java b/remoting/android/java/src/org/chromium/chromoting/Desktop.java
|
| index b75d97d4d6f9775a49a15d9da7272d5b2b98418b..570fd806dade70232f9bd63f813aa00d62b33004 100644
|
| --- a/remoting/android/java/src/org/chromium/chromoting/Desktop.java
|
| +++ b/remoting/android/java/src/org/chromium/chromoting/Desktop.java
|
| @@ -103,10 +103,10 @@ public class Desktop extends Activity {
|
| KeyEvent.KEYCODE_FORWARD_DEL,
|
| };
|
| for (int key : keys) {
|
| - JniInterface.keyboardAction(key, true);
|
| + JniInterface.sendKeyEvent(key, true);
|
| }
|
| for (int key : keys) {
|
| - JniInterface.keyboardAction(key, false);
|
| + JniInterface.sendKeyEvent(key, false);
|
| }
|
| }
|
| return true;
|
| @@ -127,32 +127,48 @@ public class Desktop extends Activity {
|
| */
|
| @Override
|
| public boolean dispatchKeyEvent(KeyEvent event) {
|
| + // Send ACTION_MULTIPLE event as TextEvent.
|
| + //
|
| + // TODO(sergeyu): For all keys on English keyboard Android generates
|
| + // ACTION_DOWN/ACTION_UP events, so they are sent as KeyEvent instead of
|
| + // TextEvent. As result the host may handle them as non-English chars
|
| + // when it has non-English layout selected, which might be confusing for
|
| + // the user. This code should be fixed to send all text input events as
|
| + // TextEvent, but it cannot be done now because not all hosts support
|
| + // TextEvent. Also, to handle keyboard shortcuts properly this code will
|
| + // need to track the state of modifier keys (such as Ctrl or Alt) and
|
| + // send KeyEvents in the case any of the modifier keys are pressed.
|
| + if (event.getAction() == KeyEvent.ACTION_MULTIPLE) {
|
| + JniInterface.sendTextEvent(event.getCharacters());
|
| + return super.dispatchKeyEvent(event);
|
| + }
|
| +
|
| boolean depressed = event.getAction() == KeyEvent.ACTION_DOWN;
|
|
|
| switch (event.getKeyCode()) {
|
| case KeyEvent.KEYCODE_AT:
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_2, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_2, depressed);
|
| break;
|
|
|
| case KeyEvent.KEYCODE_POUND:
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_3, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_3, depressed);
|
| break;
|
|
|
| case KeyEvent.KEYCODE_STAR:
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_8, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_8, depressed);
|
| break;
|
|
|
| case KeyEvent.KEYCODE_PLUS:
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| - JniInterface.keyboardAction(KeyEvent.KEYCODE_EQUALS, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
|
| + JniInterface.sendKeyEvent(KeyEvent.KEYCODE_EQUALS, depressed);
|
| break;
|
|
|
| default:
|
| // We try to send all other key codes to the host directly.
|
| - JniInterface.keyboardAction(event.getKeyCode(), depressed);
|
| + JniInterface.sendKeyEvent(event.getKeyCode(), depressed);
|
| }
|
|
|
| return super.dispatchKeyEvent(event);
|
|
|