From 6a26de1d7e3bb3b277c0af6d678023b862c22a86 Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Tue, 8 Jan 2013 12:57:50 +0900 Subject: Initial implementation for dead keys (B3) Bug: 5037589 Change-Id: I9e1ff92df7d0c58eb7a0f33603adebc9efb86585 --- java/src/com/android/inputmethod/event/EventInterpreter.java | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'java/src/com/android/inputmethod/event/EventInterpreter.java') diff --git a/java/src/com/android/inputmethod/event/EventInterpreter.java b/java/src/com/android/inputmethod/event/EventInterpreter.java index 2874970ec..6efe899bb 100644 --- a/java/src/com/android/inputmethod/event/EventInterpreter.java +++ b/java/src/com/android/inputmethod/event/EventInterpreter.java @@ -19,9 +19,12 @@ package com.android.inputmethod.event; import android.util.SparseArray; import android.view.KeyEvent; +import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.LatinIME; +import java.util.ArrayList; + /** * This class implements the logic between receiving events and generating code points. * @@ -40,6 +43,7 @@ public class EventInterpreter { final SparseArray mHardwareEventDecoders; final SoftwareEventDecoder mSoftwareEventDecoder; final LatinIME mLatinIme; + final ArrayList mCombiners; /** * Create a default interpreter. @@ -74,6 +78,8 @@ public class EventInterpreter { // capacity of 1. mHardwareEventDecoders = new SparseArray(1); mSoftwareEventDecoder = new SoftwareKeyboardEventDecoder(); + mCombiners = CollectionUtils.newArrayList(); + mCombiners.add(new DeadKeyCombiner()); mLatinIme = latinIme; } @@ -108,12 +114,17 @@ public class EventInterpreter { private boolean onEvent(final Event event) { Event currentlyProcessingEvent = event; boolean processed = false; + for (int i = 0; i < mCombiners.size(); ++i) { + currentlyProcessingEvent = mCombiners.get(i).combine(event); + } while (null != currentlyProcessingEvent) { if (currentlyProcessingEvent.isCommittable()) { mLatinIme.onCodeInput(currentlyProcessingEvent.mCodePoint, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE); processed = true; + } else if (event.isDead()) { + processed = true; } currentlyProcessingEvent = currentlyProcessingEvent.mNextEvent; } -- cgit v1.2.3-83-g751a