aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/event/DeadKeyCombiner.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/event/DeadKeyCombiner.java')
-rw-r--r--java/src/com/android/inputmethod/event/DeadKeyCombiner.java27
1 files changed, 22 insertions, 5 deletions
diff --git a/java/src/com/android/inputmethod/event/DeadKeyCombiner.java b/java/src/com/android/inputmethod/event/DeadKeyCombiner.java
index 52987d571..bef4d8594 100644
--- a/java/src/com/android/inputmethod/event/DeadKeyCombiner.java
+++ b/java/src/com/android/inputmethod/event/DeadKeyCombiner.java
@@ -21,14 +21,17 @@ import android.view.KeyCharacterMap;
import com.android.inputmethod.latin.Constants;
+import java.util.ArrayList;
+
/**
* A combiner that handles dead keys.
*/
public class DeadKeyCombiner implements Combiner {
+ // TODO: make this a list of events instead
final StringBuilder mDeadSequence = new StringBuilder();
@Override
- public Event combine(final Event event) {
+ public Event processEvent(final ArrayList<Event> previousEvents, final Event event) {
if (null == event) return null; // Just in case some combiner is broken
if (TextUtils.isEmpty(mDeadSequence)) {
if (event.isDead()) {
@@ -43,19 +46,33 @@ public class DeadKeyCombiner implements Combiner {
final int resultingCodePoint =
KeyCharacterMap.getDeadChar(deadCodePoint, event.mCodePoint);
if (0 == resultingCodePoint) {
- // We can't combine both characters. We need to commit the dead key as a committable
+ // We can't combine both characters. We need to commit the dead key as a separate
// character, and the next char too unless it's a space (because as a special case,
// dead key + space should result in only the dead key being committed - that's
// how dead keys work).
// If the event is a space, we should commit the dead char alone, but if it's
// not, we need to commit both.
- return Event.createCommittableEvent(deadCodePoint,
- Constants.CODE_SPACE == event.mCodePoint ? null : event /* next */);
+ // TODO: this is not necessarily triggered by hardware key events, so it's not
+ // a good idea to masquerade as one. This should be typed as a software
+ // composite event or something.
+ return Event.createHardwareKeypressEvent(deadCodePoint, event.mKeyCode,
+ Constants.CODE_SPACE == event.mCodePoint ? null : event /* next */,
+ false /* isKeyRepeat */);
} else {
// We could combine the characters.
- return Event.createCommittableEvent(resultingCodePoint, null /* next */);
+ return Event.createHardwareKeypressEvent(resultingCodePoint, event.mKeyCode,
+ null /* next */, false /* isKeyRepeat */);
}
}
}
+ @Override
+ public void reset() {
+ mDeadSequence.setLength(0);
+ }
+
+ @Override
+ public CharSequence getCombiningStateFeedback() {
+ return mDeadSequence;
+ }
}