aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android')
-rw-r--r--java/src/com/android/inputmethod/latin/LastComposedWord.java19
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java23
2 files changed, 37 insertions, 5 deletions
diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java
index 69963d222..a3b030626 100644
--- a/java/src/com/android/inputmethod/latin/LastComposedWord.java
+++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java
@@ -38,25 +38,38 @@ public final class LastComposedWord {
// or it may be exactly what the user typed if it's in the dictionary or the IME does not have
// enough confidence in any suggestion to auto-correct (auto-correct to typed word).
public static final int COMMIT_TYPE_DECIDED_WORD = 2;
+ // COMMIT_TYPE_CANCEL_AUTO_CORRECT is used upon committing back the old word upon cancelling
+ // an auto-correction.
+ public static final int COMMIT_TYPE_CANCEL_AUTO_CORRECT = 3;
public static final String NOT_A_SEPARATOR = "";
+ public final ArrayList<Event> mEvents;
public final String mTypedWord;
public final CharSequence mCommittedWord;
public final String mSeparatorString;
public final String mPrevWord;
public final int mCapitalizedMode;
+ public final InputPointers mInputPointers =
+ new InputPointers(Constants.DICTIONARY_MAX_WORD_LENGTH);
private boolean mActive;
public static final LastComposedWord NOT_A_COMPOSED_WORD =
- new LastComposedWord("", "", NOT_A_SEPARATOR, null, WordComposer.CAPS_MODE_OFF);
+ new LastComposedWord(new ArrayList<Event>(), null, "", "",
+ NOT_A_SEPARATOR, null, WordComposer.CAPS_MODE_OFF);
// Warning: this is using the passed objects as is and fully expects them to be
// immutable. Do not fiddle with their contents after you passed them to this constructor.
- public LastComposedWord(final String typedWord, final CharSequence committedWord,
- final String separatorString, final String prevWord, final int capitalizedMode) {
+ public LastComposedWord(final ArrayList<Event> events,
+ final InputPointers inputPointers, final String typedWord,
+ final CharSequence committedWord, final String separatorString,
+ final String prevWord, final int capitalizedMode) {
+ if (inputPointers != null) {
+ mInputPointers.copy(inputPointers);
+ }
mTypedWord = typedWord;
+ mEvents = new ArrayList<Event>(events);
mCommittedWord = committedWord;
mSeparatorString = separatorString;
mActive = true;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 52d13770b..4638c8a8b 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -426,8 +426,9 @@ public final class WordComposer {
// Note: currently, we come here whenever we commit a word. If it's a MANUAL_PICK
// or a DECIDED_WORD we may cancel the commit later; otherwise, we should deactivate
// the last composed word to ensure this does not happen.
- final LastComposedWord lastComposedWord = new LastComposedWord(
- mTypedWord.toString(), committedWord, separatorString, prevWord, mCapitalizedMode);
+ final LastComposedWord lastComposedWord = new LastComposedWord(mEvents,
+ mInputPointers, mTypedWord.toString(), committedWord, separatorString,
+ prevWord, mCapitalizedMode);
mInputPointers.reset();
if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD
&& type != LastComposedWord.COMMIT_TYPE_MANUAL_PICK) {
@@ -458,6 +459,24 @@ public final class WordComposer {
public void discardPreviousWordForSuggestion() {
mPreviousWordForSuggestion = null;
}
+
+ public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord,
+ final String previousWord) {
+ mEvents.clear();
+ Collections.copy(mEvents, lastComposedWord.mEvents);
+ mInputPointers.set(lastComposedWord.mInputPointers);
+ mTypedWord.setLength(0);
+ mCombinerChain.reset();
+ mTypedWord.append(lastComposedWord.mTypedWord);
+ refreshSize();
+ mCapitalizedMode = lastComposedWord.mCapitalizedMode;
+ mAutoCorrection = null; // This will be filled by the next call to updateSuggestion.
+ mCursorPositionWithinWord = mCodePointSize;
+ mRejectedBatchModeSuggestion = null;
+ mIsResumed = true;
+ mPreviousWordForSuggestion = previousWord;
+ }
+
public boolean isBatchMode() {
return mIsBatchMode;
}