aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/TextEntryState.java
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2010-08-13 13:29:49 -0700
committerAmith Yamasani <yamasani@google.com>2010-08-17 09:05:24 -0700
commitc20c5a8d4c29f52075a157098cf8d7192a45ac36 (patch)
tree8a15bb122c488ad77b96bd321c039c38e5e16272 /java/src/com/android/inputmethod/latin/TextEntryState.java
parentc9a181b1b340012fbc8c32d23a3294364a7ad27b (diff)
downloadlatinime-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.java152
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);
+ }
+ }
}