summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 11:41:35 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 11:41:35 +0000
commit127e4d2910513b8bd8f910d90adcdb52fbea2956 (patch)
tree706e23e666503e93312e21c1760ad8281a98656f
parente11d89d1800d97858971d890b419e7f47dd610ab (diff)
downloadchromium_src-127e4d2910513b8bd8f910d90adcdb52fbea2956.zip
chromium_src-127e4d2910513b8bd8f910d90adcdb52fbea2956.tar.gz
chromium_src-127e4d2910513b8bd8f910d90adcdb52fbea2956.tar.bz2
Fix Desktop.dispatchKeyEvent() to return correct result.
Previously Desktop.dispatchKeyEvent() was sending keyboard events to the host and then pretending that it didn't handle the event. Now it returns correct result telling the caller when the event was handled. BUG=385972 Review URL: https://codereview.chromium.org/341693004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278331 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--remoting/android/java/src/org/chromium/chromoting/Desktop.java16
-rw-r--r--remoting/android/java/src/org/chromium/chromoting/jni/JniInterface.java8
-rw-r--r--remoting/client/jni/chromoting_jni_instance.cc38
-rw-r--r--remoting/client/jni/chromoting_jni_instance.h4
-rw-r--r--remoting/client/jni/chromoting_jni_runtime.cc4
5 files changed, 39 insertions, 31 deletions
diff --git a/remoting/android/java/src/org/chromium/chromoting/Desktop.java b/remoting/android/java/src/org/chromium/chromoting/Desktop.java
index f7fad3f..8868d5a 100644
--- a/remoting/android/java/src/org/chromium/chromoting/Desktop.java
+++ b/remoting/android/java/src/org/chromium/chromoting/Desktop.java
@@ -210,40 +210,38 @@ public class Desktop extends Activity implements View.OnSystemUiVisibilityChange
mPressedTextKeys.add(keyCode);
int[] codePoints = { unicode };
JniInterface.sendTextEvent(new String(codePoints, 0, 1));
- return super.dispatchKeyEvent(event);
+ return true;
}
if (!pressed && mPressedTextKeys.contains(keyCode)) {
mPressedTextKeys.remove(keyCode);
- return super.dispatchKeyEvent(event);
+ return true;
}
switch (keyCode) {
case KeyEvent.KEYCODE_AT:
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, pressed);
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_2, pressed);
- break;
+ return true;
case KeyEvent.KEYCODE_POUND:
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, pressed);
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_3, pressed);
- break;
+ return true;
case KeyEvent.KEYCODE_STAR:
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, pressed);
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_8, pressed);
- break;
+ return true;
case KeyEvent.KEYCODE_PLUS:
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, pressed);
JniInterface.sendKeyEvent(KeyEvent.KEYCODE_EQUALS, pressed);
- break;
+ return true;
default:
// We try to send all other key codes to the host directly.
- JniInterface.sendKeyEvent(keyCode, pressed);
+ return JniInterface.sendKeyEvent(keyCode, pressed);
}
-
- return super.dispatchKeyEvent(event);
}
}
diff --git a/remoting/android/java/src/org/chromium/chromoting/jni/JniInterface.java b/remoting/android/java/src/org/chromium/chromoting/jni/JniInterface.java
index 6691e4f..6d1dfd1 100644
--- a/remoting/android/java/src/org/chromium/chromoting/jni/JniInterface.java
+++ b/remoting/android/java/src/org/chromium/chromoting/jni/JniInterface.java
@@ -322,16 +322,16 @@ public class JniInterface {
private static native void nativeSendMouseWheelEvent(int deltaX, int deltaY);
/** Presses or releases the specified (nonnegative) key. Called on the UI thread. */
- public static void sendKeyEvent(int keyCode, boolean keyDown) {
+ public static boolean sendKeyEvent(int keyCode, boolean keyDown) {
if (!sConnected) {
- return;
+ return false;
}
- nativeSendKeyEvent(keyCode, keyDown);
+ return nativeSendKeyEvent(keyCode, keyDown);
}
/** Passes key press information to the native handling code. */
- private static native void nativeSendKeyEvent(int keyCode, boolean keyDown);
+ private static native boolean nativeSendKeyEvent(int keyCode, boolean keyDown);
/** Sends TextEvent to the host. Called on the UI thread. */
public static void sendTextEvent(String text) {
diff --git a/remoting/client/jni/chromoting_jni_instance.cc b/remoting/client/jni/chromoting_jni_instance.cc
index 9a929dd..32aaa4b 100644
--- a/remoting/client/jni/chromoting_jni_instance.cc
+++ b/remoting/client/jni/chromoting_jni_instance.cc
@@ -210,23 +210,15 @@ void ChromotingJniInstance::SendMouseWheelEvent(int delta_x, int delta_y) {
connection_->input_stub()->InjectMouseEvent(event);
}
-void ChromotingJniInstance::SendKeyEvent(int key_code, bool key_down) {
- if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
- jni_runtime_->network_task_runner()->PostTask(
- FROM_HERE, base::Bind(&ChromotingJniInstance::SendKeyEvent,
- this, key_code, key_down));
- return;
- }
-
- uint32 usb_code = AndroidKeycodeToUsbKeycode(key_code);
- if (usb_code) {
- protocol::KeyEvent event;
- event.set_usb_keycode(usb_code);
- event.set_pressed(key_down);
- connection_->input_stub()->InjectKeyEvent(event);
- } else {
+bool ChromotingJniInstance::SendKeyEvent(int key_code, bool key_down) {
+ uint32 usb_key_code = AndroidKeycodeToUsbKeycode(key_code);
+ if (!usb_key_code) {
LOG(WARNING) << "Ignoring unknown keycode: " << key_code;
+ return false;
}
+
+ SendKeyEventInternal(usb_key_code, key_down);
+ return true;
}
void ChromotingJniInstance::SendTextEvent(const std::string& text) {
@@ -449,6 +441,22 @@ void ChromotingJniInstance::SetDeviceName(const std::string& device_name) {
device_name_ = device_name;
}
+void ChromotingJniInstance::SendKeyEventInternal(int usb_key_code,
+ bool key_down) {
+ if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
+ jni_runtime_->network_task_runner()->PostTask(
+ FROM_HERE, base::Bind(&ChromotingJniInstance::SendKeyEventInternal,
+ this, usb_key_code, key_down));
+ return;
+ }
+
+
+ protocol::KeyEvent event;
+ event.set_usb_keycode(usb_key_code);
+ event.set_pressed(key_down);
+ connection_->input_stub()->InjectKeyEvent(event);
+}
+
void ChromotingJniInstance::EnableStatsLogging(bool enabled) {
DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
diff --git a/remoting/client/jni/chromoting_jni_instance.h b/remoting/client/jni/chromoting_jni_instance.h
index 8fb6023..91919b2 100644
--- a/remoting/client/jni/chromoting_jni_instance.h
+++ b/remoting/client/jni/chromoting_jni_instance.h
@@ -87,7 +87,7 @@ class ChromotingJniInstance
void SendMouseWheelEvent(int delta_x, int delta_y);
// Sends the provided keyboard scan code to the host.
- void SendKeyEvent(int key_code, bool key_down);
+ bool SendKeyEvent(int key_code, bool key_down);
void SendTextEvent(const std::string& text);
@@ -136,6 +136,8 @@ class ChromotingJniInstance
// Sets the device name. Can be called on any thread.
void SetDeviceName(const std::string& device_name);
+ void SendKeyEventInternal(int usb_key_code, bool key_down);
+
// Enables or disables periodic logging of performance statistics. Called on
// the network thread.
void EnableStatsLogging(bool enabled);
diff --git a/remoting/client/jni/chromoting_jni_runtime.cc b/remoting/client/jni/chromoting_jni_runtime.cc
index cc84d4e..f7a3ff1 100644
--- a/remoting/client/jni/chromoting_jni_runtime.cc
+++ b/remoting/client/jni/chromoting_jni_runtime.cc
@@ -129,11 +129,11 @@ static void SendMouseWheelEvent(JNIEnv* env,
delta_x, delta_y);
}
-static void SendKeyEvent(JNIEnv* env,
+static jboolean SendKeyEvent(JNIEnv* env,
jclass clazz,
jint keyCode,
jboolean keyDown) {
- remoting::ChromotingJniRuntime::GetInstance()->session()->SendKeyEvent(
+ return remoting::ChromotingJniRuntime::GetInstance()->session()->SendKeyEvent(
keyCode, keyDown);
}