diff options
author | 2010-08-13 13:29:49 -0700 | |
---|---|---|
committer | 2010-08-17 09:05:24 -0700 | |
commit | c20c5a8d4c29f52075a157098cf8d7192a45ac36 (patch) | |
tree | 8a15bb122c488ad77b96bd321c039c38e5e16272 /java/src/com/android/inputmethod/latin/TextEntryState.java | |
parent | c9a181b1b340012fbc8c32d23a3294364a7ad27b (diff) | |
download | latinime-c20c5a8d4c29f52075a157098cf8d7192a45ac36.tar.gz latinime-c20c5a8d4c29f52075a157098cf8d7192a45ac36.tar.xz latinime-c20c5a8d4c29f52075a157098cf8d7192a45ac36.zip |
Fixes for correction mode - reliably show the corrections when tapping on a word.
Also, continue to show the corrections when user keeps replacing the word repeatedly
with different corrections from the suggestion strip. There were problems with
tapping suggestions quickly or tapping the same suggestion more than once (same length).
Also fixes Bug: 2852891 - Text suggestion appears incorrectly when selecting text that's
not a whole word.
Changed the TextEntryState states to an enum type instead of int. Needed it to show the
states for debugging purposes.
Diffstat (limited to '')
-rw-r--r-- | java/src/com/android/inputmethod/latin/TextEntryState.java | 152 |
1 files changed, 89 insertions, 63 deletions
diff --git a/java/src/com/android/inputmethod/latin/TextEntryState.java b/java/src/com/android/inputmethod/latin/TextEntryState.java index bc7bf3f71..9011191f1 100644 --- a/java/src/com/android/inputmethod/latin/TextEntryState.java +++ b/java/src/com/android/inputmethod/latin/TextEntryState.java @@ -17,19 +17,22 @@ package com.android.inputmethod.latin; import android.content.Context; +import android.inputmethodservice.Keyboard.Key; import android.text.format.DateFormat; import android.util.Log; -import android.inputmethodservice.Keyboard.Key; - import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; public class TextEntryState { + private static final boolean DBG = false; + + private static final String TAG = "TextEntryState"; + private static boolean LOGGING = false; - + private static int sBackspaceCount = 0; private static int sAutoSuggestCount = 0; @@ -46,20 +49,22 @@ public class TextEntryState { private static int sActualChars; - public static final int STATE_UNKNOWN = 0; - public static final int STATE_START = 1; - public static final int STATE_IN_WORD = 2; - public static final int STATE_ACCEPTED_DEFAULT = 3; - public static final int STATE_PICKED_SUGGESTION = 4; - public static final int STATE_PUNCTUATION_AFTER_WORD = 5; - public static final int STATE_PUNCTUATION_AFTER_ACCEPTED = 6; - public static final int STATE_SPACE_AFTER_ACCEPTED = 7; - public static final int STATE_SPACE_AFTER_PICKED = 8; - public static final int STATE_UNDO_COMMIT = 9; - public static final int STATE_CORRECTING = 10; - public static final int STATE_PICKED_CORRECTION = 11; - - private static int sState = STATE_UNKNOWN; + public enum State { + UNKNOWN, + START, + IN_WORD, + ACCEPTED_DEFAULT, + PICKED_SUGGESTION, + PUNCTUATION_AFTER_WORD, + PUNCTUATION_AFTER_ACCEPTED, + SPACE_AFTER_ACCEPTED, + SPACE_AFTER_PICKED, + UNDO_COMMIT, + CORRECTING, + PICKED_CORRECTION; + } + + private static State sState = State.UNKNOWN; private static FileOutputStream sKeyLocationFile; private static FileOutputStream sUserActionFile; @@ -73,7 +78,7 @@ public class TextEntryState { sWordNotInDictionaryCount = 0; sTypedChars = 0; sActualChars = 0; - sState = STATE_START; + sState = State.START; if (LOGGING) { try { @@ -118,118 +123,133 @@ public class TextEntryState { } sTypedChars += typedWord.length(); sActualChars += actualWord.length(); - sState = STATE_ACCEPTED_DEFAULT; + sState = State.ACCEPTED_DEFAULT; LatinImeLogger.logOnAutoSuggestion(typedWord.toString(), actualWord.toString()); + displayState(); } - // STATE_ACCEPTED_DEFAULT will be changed to other sub-states - // (see "case STATE_ACCEPTED_DEFAULT" in typedCharacter() below), - // and should be restored back to STATE_ACCEPTED_DEFAULT after processing for each sub-state. + // State.ACCEPTED_DEFAULT will be changed to other sub-states + // (see "case ACCEPTED_DEFAULT" in typedCharacter() below), + // and should be restored back to State.ACCEPTED_DEFAULT after processing for each sub-state. public static void backToAcceptedDefault(CharSequence typedWord) { if (typedWord == null) return; switch (sState) { - case STATE_SPACE_AFTER_ACCEPTED: - case STATE_PUNCTUATION_AFTER_ACCEPTED: - case STATE_IN_WORD: - sState = STATE_ACCEPTED_DEFAULT; + case SPACE_AFTER_ACCEPTED: + case PUNCTUATION_AFTER_ACCEPTED: + case IN_WORD: + sState = State.ACCEPTED_DEFAULT; break; } + displayState(); } public static void acceptedTyped(CharSequence typedWord) { sWordNotInDictionaryCount++; - sState = STATE_PICKED_SUGGESTION; + sState = State.PICKED_SUGGESTION; + displayState(); } public static void acceptedSuggestion(CharSequence typedWord, CharSequence actualWord) { sManualSuggestCount++; - int oldState = sState; + State oldState = sState; if (typedWord.equals(actualWord)) { acceptedTyped(typedWord); } - sState = oldState == STATE_CORRECTING ? STATE_PICKED_CORRECTION : STATE_PICKED_SUGGESTION; + if (oldState == State.CORRECTING || oldState == State.PICKED_CORRECTION) { + sState = State.PICKED_CORRECTION; + } else { + sState = State.PICKED_SUGGESTION; + } + displayState(); } public static void selectedForCorrection() { - sState = STATE_CORRECTING; + sState = State.CORRECTING; + displayState(); } public static void typedCharacter(char c, boolean isSeparator) { boolean isSpace = c == ' '; switch (sState) { - case STATE_IN_WORD: + case IN_WORD: if (isSpace || isSeparator) { - sState = STATE_START; + sState = State.START; } else { // State hasn't changed. } break; - case STATE_ACCEPTED_DEFAULT: - case STATE_SPACE_AFTER_PICKED: + case ACCEPTED_DEFAULT: + case SPACE_AFTER_PICKED: if (isSpace) { - sState = STATE_SPACE_AFTER_ACCEPTED; + sState = State.SPACE_AFTER_ACCEPTED; } else if (isSeparator) { - sState = STATE_PUNCTUATION_AFTER_ACCEPTED; + sState = State.PUNCTUATION_AFTER_ACCEPTED; } else { - sState = STATE_IN_WORD; + sState = State.IN_WORD; } break; - case STATE_PICKED_SUGGESTION: - case STATE_PICKED_CORRECTION: + case PICKED_SUGGESTION: + case PICKED_CORRECTION: if (isSpace) { - sState = STATE_SPACE_AFTER_PICKED; + sState = State.SPACE_AFTER_PICKED; } else if (isSeparator) { // Swap - sState = STATE_PUNCTUATION_AFTER_ACCEPTED; + sState = State.PUNCTUATION_AFTER_ACCEPTED; } else { - sState = STATE_IN_WORD; + sState = State.IN_WORD; } break; - case STATE_START: - case STATE_UNKNOWN: - case STATE_SPACE_AFTER_ACCEPTED: - case STATE_PUNCTUATION_AFTER_ACCEPTED: - case STATE_PUNCTUATION_AFTER_WORD: + case START: + case UNKNOWN: + case SPACE_AFTER_ACCEPTED: + case PUNCTUATION_AFTER_ACCEPTED: + case PUNCTUATION_AFTER_WORD: if (!isSpace && !isSeparator) { - sState = STATE_IN_WORD; + sState = State.IN_WORD; } else { - sState = STATE_START; + sState = State.START; } break; - case STATE_UNDO_COMMIT: + case UNDO_COMMIT: if (isSpace || isSeparator) { - sState = STATE_ACCEPTED_DEFAULT; + sState = State.ACCEPTED_DEFAULT; } else { - sState = STATE_IN_WORD; + sState = State.IN_WORD; } break; - case STATE_CORRECTING: - sState = STATE_START; + case CORRECTING: + sState = State.START; break; } + displayState(); } public static void backspace() { - if (sState == STATE_ACCEPTED_DEFAULT) { - sState = STATE_UNDO_COMMIT; + if (sState == State.ACCEPTED_DEFAULT) { + sState = State.UNDO_COMMIT; sAutoSuggestUndoneCount++; LatinImeLogger.logOnAutoSuggestionCanceled(); - } else if (sState == STATE_UNDO_COMMIT) { - sState = STATE_IN_WORD; + } else if (sState == State.UNDO_COMMIT) { + sState = State.IN_WORD; } sBackspaceCount++; + displayState(); } - + public static void reset() { - sState = STATE_START; + sState = State.START; + displayState(); } - - public static int getState() { + + public static State getState() { + if (DBG) { + Log.d(TAG, "Returning state = " + sState); + } return sState; } public static boolean isCorrecting() { - return sState == STATE_CORRECTING || sState == STATE_PICKED_CORRECTION; + return sState == State.CORRECTING || sState == State.PICKED_CORRECTION; } public static void keyPressedAt(Key key, int x, int y) { @@ -248,5 +268,11 @@ public class TextEntryState { } } } + + private static void displayState() { + if (DBG) { + Log.d(TAG, "State = " + sState); + } + } } |