am 9586d69b: Avoid double space when autocorrect is triggered
* commit '9586d69bdf90fe24a83c0c6ba22589f28ae6cd03': Avoid double space when autocorrect is triggeredmain
commit
7ba79df1a5
|
@ -1591,6 +1591,10 @@ public final class InputLogic {
|
||||||
final String committedWordString = committedWord.toString();
|
final String committedWordString = committedWord.toString();
|
||||||
final int cancelLength = committedWord.length();
|
final int cancelLength = committedWord.length();
|
||||||
final String separatorString = mLastComposedWord.mSeparatorString;
|
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.
|
// We want java chars, not codepoints for the following.
|
||||||
final int separatorLength = separatorString.length();
|
final int separatorLength = separatorString.length();
|
||||||
// TODO: should we check our saved separator against the actual contents of the text view?
|
// 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)) {
|
if (!TextUtils.isEmpty(committedWord)) {
|
||||||
mDictionaryFacilitator.removeWordFromPersonalizedDicts(committedWordString);
|
mDictionaryFacilitator.removeWordFromPersonalizedDicts(committedWordString);
|
||||||
}
|
}
|
||||||
final String stringToCommit = originallyTypedWord + separatorString;
|
final String stringToCommit = originallyTypedWord +
|
||||||
|
(usePhantomSpace ? "" : separatorString);
|
||||||
final SpannableString textToCommit = new SpannableString(stringToCommit);
|
final SpannableString textToCommit = new SpannableString(stringToCommit);
|
||||||
if (committedWord instanceof SpannableString) {
|
if (committedWord instanceof SpannableString) {
|
||||||
final SpannableString committedWordWithSuggestionSpans = (SpannableString)committedWord;
|
final SpannableString committedWordWithSuggestionSpans = (SpannableString)committedWord;
|
||||||
|
@ -1663,6 +1668,9 @@ public final class InputLogic {
|
||||||
} else {
|
} else {
|
||||||
mConnection.commitText(textToCommit, 1);
|
mConnection.commitText(textToCommit, 1);
|
||||||
}
|
}
|
||||||
|
if (usePhantomSpace) {
|
||||||
|
mSpaceState = SpaceState.PHANTOM;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// For languages without spaces, we revert the typed string but the cursor is flush
|
// 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.
|
// 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 typedLength = STRING_TO_TYPE.length();
|
||||||
final int EXPECTED_SUGGESTION_SPAN_START = -1;
|
final int EXPECTED_SUGGESTION_SPAN_START = -1;
|
||||||
final int EXPECTED_UNDERLINE_SPAN_START = 0;
|
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);
|
type(STRING_TO_TYPE);
|
||||||
sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
|
sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
|
||||||
runMessages();
|
runMessages();
|
||||||
|
|
|
@ -159,8 +159,11 @@ public class InputLogicTests extends InputTestsBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAutoCorrectWithSpaceThenRevert() {
|
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 STRING_TO_TYPE = "tgis ";
|
||||||
final String EXPECTED_RESULT = "tgis ";
|
final String EXPECTED_RESULT = "tgis";
|
||||||
type(STRING_TO_TYPE);
|
type(STRING_TO_TYPE);
|
||||||
mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
|
mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
|
||||||
type(Constants.CODE_DELETE);
|
type(Constants.CODE_DELETE);
|
||||||
|
@ -168,6 +171,24 @@ public class InputLogicTests extends InputTestsBase {
|
||||||
mEditText.getText().toString());
|
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() {
|
public void testAutoCorrectToSelfDoesNotRevert() {
|
||||||
final String STRING_TO_TYPE = "this ";
|
final String STRING_TO_TYPE = "this ";
|
||||||
final String EXPECTED_RESULT = "this";
|
final String EXPECTED_RESULT = "this";
|
||||||
|
|
Loading…
Reference in New Issue