aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2012-12-26 23:32:24 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2012-12-26 23:32:24 -0800
commit91268797e5326cdf066cd0cfeda0af48ac900ef5 (patch)
tree57e82dfd31a172f84305046dd79991a60907dd5c /java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
parent3cef4afed55c8ab85e704db684b56bd8b69f2097 (diff)
parent581f324ed8314befdf7d8cf1c923791455cc11a5 (diff)
downloadlatinime-91268797e5326cdf066cd0cfeda0af48ac900ef5.tar.gz
latinime-91268797e5326cdf066cd0cfeda0af48ac900ef5.tar.xz
latinime-91268797e5326cdf066cd0cfeda0af48ac900ef5.zip
am 581f324e: Initial implementation for decoding HW key events (B3)
* commit '581f324ed8314befdf7d8cf1c923791455cc11a5': Initial implementation for decoding HW key events (B3)
Diffstat (limited to 'java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java')
-rw-r--r--java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
index 34ce1c3f4..9861816ee 100644
--- a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
+++ b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
@@ -16,10 +16,15 @@
package com.android.inputmethod.event;
+import android.view.KeyCharacterMap;
import android.view.KeyEvent;
/**
* A hardware event decoder for a hardware qwerty-ish keyboard.
+ *
+ * The events are always hardware keypresses, but they can be key down or key up events, they
+ * can be dead keys, they can be meta keys like shift or ctrl... This does not deal with
+ * 10-key like keyboards; a different decoder is used for this.
*/
public class HardwareKeyboardEventDecoder implements HardwareEventDecoder {
final int mDeviceId;
@@ -31,6 +36,23 @@ public class HardwareKeyboardEventDecoder implements HardwareEventDecoder {
@Override
public Event decodeHardwareKey(final KeyEvent keyEvent) {
- return Event.obtainEvent();
+ final Event event = Event.obtainEvent();
+ // KeyEvent#getUnicodeChar() does not exactly returns a unicode char, but rather a value
+ // that includes both the unicode char in the lower 21 bits and flags in the upper bits,
+ // hence the name "codePointAndFlags". {@see KeyEvent#getUnicodeChar()} for more info.
+ final int codePointAndFlags = keyEvent.getUnicodeChar();
+ if (keyEvent.isPrintingKey()) {
+ if (0 != (codePointAndFlags & KeyCharacterMap.COMBINING_ACCENT)) {
+ // A dead key.
+ event.setDeadEvent(codePointAndFlags & KeyCharacterMap.COMBINING_ACCENT_MASK);
+ } else {
+ // A committable character. This should be committed right away, taking into
+ // account the current state.
+ event.setCommittableEvent(codePointAndFlags);
+ }
+ } else {
+ event.setNotHandledEvent();
+ }
+ return event;
}
}