Fix a bug with common objects.

Bug: 5961179
Change-Id: I452efc552c6ab390931f25557d7aee5a64bf054e
This commit is contained in:
Jean Chalard 2012-02-06 18:06:20 +09:00
parent a27cb62390
commit a7f2500001
3 changed files with 12 additions and 8 deletions

View file

@ -51,6 +51,8 @@ public class LastComposedWord {
public static final LastComposedWord NOT_A_COMPOSED_WORD =
new LastComposedWord(null, null, null, "", "");
// 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) {
mCodes = codes;

View file

@ -2201,9 +2201,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// new composing text.
final int restartLength = mWordComposer.size();
if (DEBUG) {
final String wordBeforeCursor =
ic.getTextBeforeCursor(restartLength + 1, 0).subSequence(0, restartLength)
.toString();
final String wordBeforeCursor = ic.getTextBeforeCursor(restartLength, 0).toString();
if (!TextUtils.equals(mWordComposer.getTypedWord(), wordBeforeCursor)) {
throw new RuntimeException("restartSuggestionsOnManuallyPickedTypedWord "
+ "check failed: we thought we were reverting \""
@ -2212,8 +2210,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
+ wordBeforeCursor + "\"");
}
}
// Warning: this +1 takes into account the extra space added by the manual pick process.
ic.deleteSurroundingText(restartLength + 1, 0);
ic.deleteSurroundingText(restartLength, 0);
ic.setComposingText(mWordComposer.getTypedWord(), 1);
mHandler.cancelUpdateBigramPredictions();
mHandler.postUpdateSuggestions();

View file

@ -310,13 +310,18 @@ public class WordComposer {
// 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(mCodes,
mXCoordinates, mYCoordinates, mTypedWord.toString(),
final ArrayList<int[]> codes = mCodes;
final int[] xCoordinates = mXCoordinates;
final int[] yCoordinates = mYCoordinates;
mCodes = new ArrayList<int[]>(N);
mXCoordinates = new int[N];
mYCoordinates = new int[N];
final LastComposedWord lastComposedWord = new LastComposedWord(codes,
xCoordinates, yCoordinates, mTypedWord.toString(),
null == mAutoCorrection ? null : mAutoCorrection.toString());
if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) {
lastComposedWord.deactivate();
}
mCodes.clear();
mTypedWord.setLength(0);
mAutoCorrection = null;
return lastComposedWord;