Give LastComposedWord knowledge of the committed word (A1)

There is no point storing the prospective autocorrect - we are
recomputing it anyway. The committed word however will be necessary
to implement feature request #5968922.

Change-Id: I588c18e1a5a1050a791d601de465f421ccbe36cd
main
Jean Chalard 2012-02-21 23:11:07 -08:00
parent c6993e4947
commit cf9d92629c
3 changed files with 17 additions and 16 deletions

View File

@ -44,7 +44,7 @@ public class LastComposedWord {
public final int[] mXCoordinates;
public final int[] mYCoordinates;
public final String mTypedWord;
public final String mAutoCorrection;
public final String mCommittedWord;
private boolean mActive;
@ -54,12 +54,12 @@ public class LastComposedWord {
// 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 ArrayList<int[]> codes, final int[] xCoordinates,
final int[] yCoordinates, final String typedWord, final String autoCorrection) {
final int[] yCoordinates, final String typedWord, final String committedWord) {
mCodes = codes;
mXCoordinates = xCoordinates;
mYCoordinates = yCoordinates;
mTypedWord = typedWord;
mAutoCorrection = autoCorrection;
mCommittedWord = committedWord;
mActive = true;
}
@ -68,7 +68,7 @@ public class LastComposedWord {
}
public boolean canCancelAutoCorrect() {
return mActive && !TextUtils.isEmpty(mAutoCorrection)
&& !TextUtils.equals(mTypedWord, mAutoCorrection);
return mActive && !TextUtils.isEmpty(mCommittedWord)
&& !TextUtils.equals(mTypedWord, mCommittedWord);
}
}

View File

@ -1129,8 +1129,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
public void commitTyped(final InputConnection ic) {
if (!mWordComposer.isComposingWord()) return;
final CharSequence typedWord = mWordComposer.getTypedWord();
mLastComposedWord = mWordComposer.commitWord(LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD);
if (typedWord.length() > 0) {
mLastComposedWord = mWordComposer.commitWord(
LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD, typedWord.toString());
if (ic != null) {
ic.commitText(typedWord, 1);
}
@ -2034,7 +2035,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// what user typed. Note: currently this is done much later in
// LastComposedWord#canCancelAutoCorrect by string equality of the remembered
// strings.
mLastComposedWord = mWordComposer.commitWord(commitType);
mLastComposedWord = mWordComposer.commitWord(commitType, bestWord.toString());
}
private static final WordComposer sEmptyWordComposer = new WordComposer();
@ -2198,8 +2199,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// "ic" must not be null
private void cancelAutoCorrect(final InputConnection ic) {
final String originallyTypedWord = mLastComposedWord.mTypedWord;
final CharSequence autoCorrectedTo = mLastComposedWord.mAutoCorrection;
final int cancelLength = autoCorrectedTo.length();
final CharSequence committedWord = mLastComposedWord.mCommittedWord;
final int cancelLength = committedWord.length();
final CharSequence separator = ic.getTextBeforeCursor(1, 0);
if (DEBUG) {
if (mWordComposer.isComposingWord()) {
@ -2208,9 +2209,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
final String wordBeforeCursor =
ic.getTextBeforeCursor(cancelLength + 1, 0).subSequence(0, cancelLength)
.toString();
if (!TextUtils.equals(autoCorrectedTo, wordBeforeCursor)) {
if (!TextUtils.equals(committedWord, wordBeforeCursor)) {
throw new RuntimeException("cancelAutoCorrect check failed: we thought we were "
+ "reverting \"" + autoCorrectedTo
+ "reverting \"" + committedWord
+ "\", but before the cursor we found \"" + wordBeforeCursor + "\"");
}
if (TextUtils.equals(originallyTypedWord, wordBeforeCursor)) {

View File

@ -308,9 +308,10 @@ public class WordComposer {
}
// `type' should be one of the LastComposedWord.COMMIT_TYPE_* constants above.
public LastComposedWord commitWord(final int type) {
public LastComposedWord commitWord(final int type, final String committedWord) {
// 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.
// DECIDED_WORD, we should deactivate the last composed word 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
// typed because the IME decided *not* to auto-correct for whatever reason.
// Ideally we would also null it when it was a DECIDED_WORD that was not an auto-correct.
@ -326,8 +327,7 @@ public class WordComposer {
mXCoordinates = new int[N];
mYCoordinates = new int[N];
final LastComposedWord lastComposedWord = new LastComposedWord(codes,
xCoordinates, yCoordinates, mTypedWord.toString(),
null == mAutoCorrection ? null : mAutoCorrection.toString());
xCoordinates, yCoordinates, mTypedWord.toString(), committedWord);
if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) {
lastComposedWord.deactivate();
}
@ -342,6 +342,6 @@ public class WordComposer {
mYCoordinates = lastComposedWord.mYCoordinates;
mTypedWord.setLength(0);
mTypedWord.append(lastComposedWord.mTypedWord);
mAutoCorrection = lastComposedWord.mAutoCorrection;
mAutoCorrection = null; // This will be filled by the next call to updateSuggestion.
}
}