diff options
Diffstat (limited to 'java/src/com/android/inputmethod/latin/TextEntryState.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/TextEntryState.java | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/java/src/com/android/inputmethod/latin/TextEntryState.java b/java/src/com/android/inputmethod/latin/TextEntryState.java index 82242f87e..79b3bdebb 100644 --- a/java/src/com/android/inputmethod/latin/TextEntryState.java +++ b/java/src/com/android/inputmethod/latin/TextEntryState.java @@ -30,10 +30,13 @@ public class TextEntryState { private static final int IN_WORD = 2; private static final int ACCEPTED_DEFAULT = 3; private static final int PICKED_SUGGESTION = 4; - private static final int PUNCTUATION_AFTER_ACCEPTED = 5; - private static final int SPACE_AFTER_ACCEPTED = 6; - private static final int SPACE_AFTER_PICKED = 7; - private static final int UNDO_COMMIT = 8; + private static final int PUNCTUATION_AFTER_WORD = 5; + private static final int PUNCTUATION_AFTER_ACCEPTED = 6; + private static final int SPACE_AFTER_ACCEPTED = 7; + private static final int SPACE_AFTER_PICKED = 8; + private static final int UNDO_COMMIT = 9; + private static final int RECORRECTING = 10; + private static final int PICKED_RECORRECTION = 11; private static int sState = UNKNOWN; private static int sPreviousState = UNKNOWN; @@ -76,11 +79,27 @@ public class TextEntryState { } public static void acceptedSuggestion(CharSequence typedWord, CharSequence actualWord) { - setState(PICKED_SUGGESTION); + if (sState == RECORRECTING || sState == PICKED_RECORRECTION) { + setState(PICKED_RECORRECTION); + } else { + setState(PICKED_SUGGESTION); + } if (DEBUG) displayState("acceptedSuggestion", "typedWord", typedWord, "actualWord", actualWord); } + public static void selectedForRecorrection() { + setState(RECORRECTING); + if (DEBUG) displayState("selectedForRecorrection"); + } + + public static void onAbortRecorrection() { + if (sState == RECORRECTING || sState == PICKED_RECORRECTION) { + setState(START); + } + if (DEBUG) displayState("onAbortRecorrection"); + } + public static void typedCharacter(char c, boolean isSeparator, int x, int y) { final boolean isSpace = (c == Keyboard.CODE_SPACE); switch (sState) { @@ -104,6 +123,7 @@ public class TextEntryState { } break; case PICKED_SUGGESTION: + case PICKED_RECORRECTION: if (isSpace) { setState(SPACE_AFTER_PICKED); } else if (isSeparator) { @@ -116,6 +136,7 @@ public class TextEntryState { case START: case UNKNOWN: case SPACE_AFTER_ACCEPTED: + case PUNCTUATION_AFTER_WORD: if (!isSpace && !isSeparator) { setState(IN_WORD); } else { @@ -129,6 +150,9 @@ public class TextEntryState { setState(IN_WORD); } break; + case RECORRECTING: + setState(START); + break; } RingCharBuffer.getInstance().push(c, x, y); if (isSeparator) { @@ -154,10 +178,26 @@ public class TextEntryState { if (DEBUG) displayState("reset"); } + public static boolean isAcceptedDefault() { + return sState == ACCEPTED_DEFAULT; + } + + public static boolean isSpaceAfterPicked() { + return sState == SPACE_AFTER_PICKED; + } + public static boolean isUndoCommit() { return sState == UNDO_COMMIT; } + public static boolean isPunctuationAfterAccepted() { + return sState == PUNCTUATION_AFTER_ACCEPTED; + } + + public static boolean isRecorrecting() { + return sState == RECORRECTING || sState == PICKED_RECORRECTION; + } + public static String getState() { return stateName(sState); } @@ -168,10 +208,13 @@ public class TextEntryState { case IN_WORD: return "IN_WORD"; case ACCEPTED_DEFAULT: return "ACCEPTED_DEFAULT"; case PICKED_SUGGESTION: return "PICKED_SUGGESTION"; + case PUNCTUATION_AFTER_WORD: return "PUNCTUATION_AFTER_WORD"; case PUNCTUATION_AFTER_ACCEPTED: return "PUNCTUATION_AFTER_ACCEPTED"; case SPACE_AFTER_ACCEPTED: return "SPACE_AFTER_ACCEPTED"; case SPACE_AFTER_PICKED: return "SPACE_AFTER_PICKED"; case UNDO_COMMIT: return "UNDO_COMMIT"; + case RECORRECTING: return "RECORRECTING"; + case PICKED_RECORRECTION: return "PICKED_RECORRECTION"; default: return "UNKNOWN"; } } |