Loading java/src/com/android/inputmethod/latin/LatinIME.java +2 −2 Original line number Diff line number Diff line Loading @@ -2165,7 +2165,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar // "ic" must not be null private void cancelAutoCorrect(final InputConnection ic) { mWordComposer.resumeSuggestionOnKeptWord(); mWordComposer.resumeSuggestionOnLastComposedWord(mLastComposedWord); final String originallyTypedWord = mWordComposer.getTypedWord(); final CharSequence autoCorrectedTo = mWordComposer.getAutoCorrectionOrNull(); final int cancelLength = autoCorrectedTo.length(); Loading Loading @@ -2205,7 +2205,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar // Note: in the interest of code simplicity, we may want to just call // restartSuggestionsOnWordBeforeCursorIfAtEndOfWord instead, but retrieving // the old WordComposer allows to reuse the actual typed coordinates. mWordComposer.resumeSuggestionOnKeptWord(); mWordComposer.resumeSuggestionOnLastComposedWord(mLastComposedWord); // We resume suggestion, and then we want to set the composing text to the content // of the word composer again. But since we just manually picked a word, there is // no composing text at the moment, so we have to delete the word before we set a Loading java/src/com/android/inputmethod/latin/WordComposer.java +13 −23 Original line number Diff line number Diff line Loading @@ -67,8 +67,6 @@ public class WordComposer { // The currently typing word. May not be null. private CharacterStore mCurrentWord; // The information being kept for resuming suggestion. May be null if wiped. private CharacterStore mCommittedWordSavedForSuggestionResuming; private int mCapsCount; Loading @@ -83,7 +81,6 @@ public class WordComposer { public WordComposer() { mCurrentWord = new CharacterStore(); mCommittedWordSavedForSuggestionResuming = null; mTrailingSingleQuotesCount = 0; } Loading @@ -93,7 +90,6 @@ public class WordComposer { public void init(WordComposer source) { mCurrentWord = new CharacterStore(source.mCurrentWord); mCommittedWordSavedForSuggestionResuming = source.mCommittedWordSavedForSuggestionResuming; mCapsCount = source.mCapsCount; mIsFirstCharCapitalized = source.mIsFirstCharCapitalized; mAutoCapitalized = source.mAutoCapitalized; Loading @@ -105,7 +101,6 @@ public class WordComposer { */ public void reset() { mCurrentWord.reset(); mCommittedWordSavedForSuggestionResuming = null; mCapsCount = 0; mIsFirstCharCapitalized = false; mTrailingSingleQuotesCount = 0; Loading Loading @@ -201,7 +196,6 @@ public class WordComposer { int codePoint = word.charAt(i); addKeyInfo(codePoint, keyboard, keyDetector); } mCommittedWordSavedForSuggestionResuming = null; } /** Loading Loading @@ -331,7 +325,6 @@ public class WordComposer { // `type' should be one of the LastComposedWord.COMMIT_TYPE_* constants above. public LastComposedWord commitWord(final int type) { mCommittedWordSavedForSuggestionResuming = mCurrentWord; // Note: currently, we come here whenever we commit a word. If it's any *other* kind than // DECIDED_WORD, we should reset mAutoCorrection so that we don't attempt to cancel later. // If it's a DECIDED_WORD, it may be an actual auto-correction by the IME, or what the user Loading @@ -339,29 +332,26 @@ public class WordComposer { // Ideally we would also null it when it was a DECIDED_WORD that was not an auto-correct. // As it happens these two cases should behave differently, because the former can be // canceled while the latter can't. Currently, we figure this out in // #didAutoCorrectToAnotherWord with #equals(). It would be marginally cleaner to do it // here, but it would be slower (since we would #equals() for each commit, instead of // only on cancel), and ultimately we want to figure it out even earlier anyway. if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) { // Only ever revert an auto-correct. mCommittedWordSavedForSuggestionResuming.mAutoCorrection = null; } // LastComposedWord#didAutoCorrectToAnotherWord with #equals(). It would be marginally // cleaner to do it here, but it would be slower (since we would #equals() for each commit, // instead of only on cancel), and ultimately we want to figure it out even earlier anyway. final LastComposedWord lastComposedWord = new LastComposedWord(type, mCurrentWord.mCodes, mCurrentWord.mXCoordinates, mCurrentWord.mYCoordinates, mCurrentWord.mTypedWord.toString(), null == mCurrentWord.mAutoCorrection (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) || (null == mCurrentWord.mAutoCorrection) ? null : mCurrentWord.mAutoCorrection.toString()); // TODO: improve performance by swapping buffers instead of creating a new object. mCurrentWord = new CharacterStore(); return lastComposedWord; } public boolean hasWordKeptForSuggestionResuming() { return null != mCommittedWordSavedForSuggestionResuming; } public void resumeSuggestionOnKeptWord() { mCurrentWord = mCommittedWordSavedForSuggestionResuming; mCommittedWordSavedForSuggestionResuming = null; public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord) { mCurrentWord.mCodes = lastComposedWord.mCodes; mCurrentWord.mXCoordinates = lastComposedWord.mXCoordinates; mCurrentWord.mYCoordinates = lastComposedWord.mYCoordinates; mCurrentWord.mTypedWord.setLength(0); mCurrentWord.mTypedWord.append(lastComposedWord.mTypedWord); mCurrentWord.mAutoCorrection = lastComposedWord.mAutoCorrection; } } Loading
java/src/com/android/inputmethod/latin/LatinIME.java +2 −2 Original line number Diff line number Diff line Loading @@ -2165,7 +2165,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar // "ic" must not be null private void cancelAutoCorrect(final InputConnection ic) { mWordComposer.resumeSuggestionOnKeptWord(); mWordComposer.resumeSuggestionOnLastComposedWord(mLastComposedWord); final String originallyTypedWord = mWordComposer.getTypedWord(); final CharSequence autoCorrectedTo = mWordComposer.getAutoCorrectionOrNull(); final int cancelLength = autoCorrectedTo.length(); Loading Loading @@ -2205,7 +2205,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar // Note: in the interest of code simplicity, we may want to just call // restartSuggestionsOnWordBeforeCursorIfAtEndOfWord instead, but retrieving // the old WordComposer allows to reuse the actual typed coordinates. mWordComposer.resumeSuggestionOnKeptWord(); mWordComposer.resumeSuggestionOnLastComposedWord(mLastComposedWord); // We resume suggestion, and then we want to set the composing text to the content // of the word composer again. But since we just manually picked a word, there is // no composing text at the moment, so we have to delete the word before we set a Loading
java/src/com/android/inputmethod/latin/WordComposer.java +13 −23 Original line number Diff line number Diff line Loading @@ -67,8 +67,6 @@ public class WordComposer { // The currently typing word. May not be null. private CharacterStore mCurrentWord; // The information being kept for resuming suggestion. May be null if wiped. private CharacterStore mCommittedWordSavedForSuggestionResuming; private int mCapsCount; Loading @@ -83,7 +81,6 @@ public class WordComposer { public WordComposer() { mCurrentWord = new CharacterStore(); mCommittedWordSavedForSuggestionResuming = null; mTrailingSingleQuotesCount = 0; } Loading @@ -93,7 +90,6 @@ public class WordComposer { public void init(WordComposer source) { mCurrentWord = new CharacterStore(source.mCurrentWord); mCommittedWordSavedForSuggestionResuming = source.mCommittedWordSavedForSuggestionResuming; mCapsCount = source.mCapsCount; mIsFirstCharCapitalized = source.mIsFirstCharCapitalized; mAutoCapitalized = source.mAutoCapitalized; Loading @@ -105,7 +101,6 @@ public class WordComposer { */ public void reset() { mCurrentWord.reset(); mCommittedWordSavedForSuggestionResuming = null; mCapsCount = 0; mIsFirstCharCapitalized = false; mTrailingSingleQuotesCount = 0; Loading Loading @@ -201,7 +196,6 @@ public class WordComposer { int codePoint = word.charAt(i); addKeyInfo(codePoint, keyboard, keyDetector); } mCommittedWordSavedForSuggestionResuming = null; } /** Loading Loading @@ -331,7 +325,6 @@ public class WordComposer { // `type' should be one of the LastComposedWord.COMMIT_TYPE_* constants above. public LastComposedWord commitWord(final int type) { mCommittedWordSavedForSuggestionResuming = mCurrentWord; // Note: currently, we come here whenever we commit a word. If it's any *other* kind than // DECIDED_WORD, we should reset mAutoCorrection so that we don't attempt to cancel later. // If it's a DECIDED_WORD, it may be an actual auto-correction by the IME, or what the user Loading @@ -339,29 +332,26 @@ public class WordComposer { // Ideally we would also null it when it was a DECIDED_WORD that was not an auto-correct. // As it happens these two cases should behave differently, because the former can be // canceled while the latter can't. Currently, we figure this out in // #didAutoCorrectToAnotherWord with #equals(). It would be marginally cleaner to do it // here, but it would be slower (since we would #equals() for each commit, instead of // only on cancel), and ultimately we want to figure it out even earlier anyway. if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) { // Only ever revert an auto-correct. mCommittedWordSavedForSuggestionResuming.mAutoCorrection = null; } // LastComposedWord#didAutoCorrectToAnotherWord with #equals(). It would be marginally // cleaner to do it here, but it would be slower (since we would #equals() for each commit, // instead of only on cancel), and ultimately we want to figure it out even earlier anyway. final LastComposedWord lastComposedWord = new LastComposedWord(type, mCurrentWord.mCodes, mCurrentWord.mXCoordinates, mCurrentWord.mYCoordinates, mCurrentWord.mTypedWord.toString(), null == mCurrentWord.mAutoCorrection (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) || (null == mCurrentWord.mAutoCorrection) ? null : mCurrentWord.mAutoCorrection.toString()); // TODO: improve performance by swapping buffers instead of creating a new object. mCurrentWord = new CharacterStore(); return lastComposedWord; } public boolean hasWordKeptForSuggestionResuming() { return null != mCommittedWordSavedForSuggestionResuming; } public void resumeSuggestionOnKeptWord() { mCurrentWord = mCommittedWordSavedForSuggestionResuming; mCommittedWordSavedForSuggestionResuming = null; public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord) { mCurrentWord.mCodes = lastComposedWord.mCodes; mCurrentWord.mXCoordinates = lastComposedWord.mXCoordinates; mCurrentWord.mYCoordinates = lastComposedWord.mYCoordinates; mCurrentWord.mTypedWord.setLength(0); mCurrentWord.mTypedWord.append(lastComposedWord.mTypedWord); mCurrentWord.mAutoCorrection = lastComposedWord.mAutoCorrection; } }