Avoid double space when autocorrect is triggered
Bug: 17596034 Change-Id: Iaa6cc066eefd2436195a91791f2628e9a5f1c449main
parent
0c2cdcc735
commit
9586d69bdf
|
@ -1591,6 +1591,10 @@ public final class InputLogic {
|
|||
final String committedWordString = committedWord.toString();
|
||||
final int cancelLength = committedWord.length();
|
||||
final String separatorString = mLastComposedWord.mSeparatorString;
|
||||
// If our separator is a space, we won't actually commit it,
|
||||
// but set the space state to PHANTOM so that a space will be inserted
|
||||
// on the next keypress
|
||||
final boolean usePhantomSpace = separatorString.equals(Constants.STRING_SPACE);
|
||||
// We want java chars, not codepoints for the following.
|
||||
final int separatorLength = separatorString.length();
|
||||
// TODO: should we check our saved separator against the actual contents of the text view?
|
||||
|
@ -1611,7 +1615,8 @@ public final class InputLogic {
|
|||
if (!TextUtils.isEmpty(committedWord)) {
|
||||
mDictionaryFacilitator.removeWordFromPersonalizedDicts(committedWordString);
|
||||
}
|
||||
final String stringToCommit = originallyTypedWord + separatorString;
|
||||
final String stringToCommit = originallyTypedWord +
|
||||
(usePhantomSpace ? "" : separatorString);
|
||||
final SpannableString textToCommit = new SpannableString(stringToCommit);
|
||||
if (committedWord instanceof SpannableString) {
|
||||
final SpannableString committedWordWithSuggestionSpans = (SpannableString)committedWord;
|
||||
|
@ -1663,6 +1668,9 @@ public final class InputLogic {
|
|||
} else {
|
||||
mConnection.commitText(textToCommit, 1);
|
||||
}
|
||||
if (usePhantomSpace) {
|
||||
mSpaceState = SpaceState.PHANTOM;
|
||||
}
|
||||
} else {
|
||||
// For languages without spaces, we revert the typed string but the cursor is flush
|
||||
// with the typed word, so we need to resume suggestions right away.
|
||||
|
|
|
@ -63,7 +63,7 @@ public class BlueUnderlineTests extends InputTestsBase {
|
|||
final int typedLength = STRING_TO_TYPE.length();
|
||||
final int EXPECTED_SUGGESTION_SPAN_START = -1;
|
||||
final int EXPECTED_UNDERLINE_SPAN_START = 0;
|
||||
final int EXPECTED_UNDERLINE_SPAN_END = 4;
|
||||
final int EXPECTED_UNDERLINE_SPAN_END = 3;
|
||||
type(STRING_TO_TYPE);
|
||||
sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
|
||||
runMessages();
|
||||
|
|
|
@ -159,8 +159,11 @@ public class InputLogicTests extends InputTestsBase {
|
|||
}
|
||||
|
||||
public void testAutoCorrectWithSpaceThenRevert() {
|
||||
// Backspacing to cancel the "tgis"->"this" autocorrection should result in
|
||||
// a "phantom space": if the user presses space immediately after,
|
||||
// only one space will be inserted in total.
|
||||
final String STRING_TO_TYPE = "tgis ";
|
||||
final String EXPECTED_RESULT = "tgis ";
|
||||
final String EXPECTED_RESULT = "tgis";
|
||||
type(STRING_TO_TYPE);
|
||||
mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
|
||||
type(Constants.CODE_DELETE);
|
||||
|
@ -168,6 +171,24 @@ public class InputLogicTests extends InputTestsBase {
|
|||
mEditText.getText().toString());
|
||||
}
|
||||
|
||||
public void testAutoCorrectWithSpaceThenRevertThenTypeMore() {
|
||||
final String STRING_TO_TYPE_FIRST = "tgis ";
|
||||
final String STRING_TO_TYPE_SECOND = "a";
|
||||
final String EXPECTED_RESULT = "tgis a";
|
||||
type(STRING_TO_TYPE_FIRST);
|
||||
mLatinIME.onUpdateSelection(0, 0,
|
||||
STRING_TO_TYPE_FIRST.length(), STRING_TO_TYPE_FIRST.length(), -1, -1);
|
||||
type(Constants.CODE_DELETE);
|
||||
|
||||
type(STRING_TO_TYPE_SECOND);
|
||||
mLatinIME.onUpdateSelection(STRING_TO_TYPE_FIRST.length(), STRING_TO_TYPE_FIRST.length(),
|
||||
STRING_TO_TYPE_FIRST.length() - 1 + STRING_TO_TYPE_SECOND.length(),
|
||||
STRING_TO_TYPE_FIRST.length() - 1 + STRING_TO_TYPE_SECOND.length(),
|
||||
-1, -1);
|
||||
assertEquals("auto-correct with space then revert then type more", EXPECTED_RESULT,
|
||||
mEditText.getText().toString());
|
||||
}
|
||||
|
||||
public void testAutoCorrectToSelfDoesNotRevert() {
|
||||
final String STRING_TO_TYPE = "this ";
|
||||
final String EXPECTED_RESULT = "this";
|
||||
|
|
Loading…
Reference in New Issue