Merge "Special case periods in the spell checker"

This commit is contained in:
Jean Chalard 2014-06-10 11:57:19 +00:00 committed by Android (Google) Code Review
commit d979d416c1
3 changed files with 37 additions and 1 deletions

View file

@ -214,6 +214,9 @@ public final class Constants {
public static final int CODE_INVERTED_QUESTION_MARK = 0xBF; // ¿ public static final int CODE_INVERTED_QUESTION_MARK = 0xBF; // ¿
public static final int CODE_INVERTED_EXCLAMATION_MARK = 0xA1; // ¡ public static final int CODE_INVERTED_EXCLAMATION_MARK = 0xA1; // ¡
public static final String REGEXP_PERIOD = "\\.";
public static final String STRING_SPACE = " ";
/** /**
* Special keys code. Must be negative. * Special keys code. Must be negative.
* These should be aligned with {@link KeyboardCodesSet#ID_TO_NAME}, * These should be aligned with {@link KeyboardCodesSet#ID_TO_NAME},

View file

@ -282,6 +282,22 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
return AndroidSpellCheckerService.getNotInDictEmptySuggestions( return AndroidSpellCheckerService.getNotInDictEmptySuggestions(
false /* reportAsTypo */); false /* reportAsTypo */);
} }
if (CHECKABILITY_CONTAINS_PERIOD == checkability) {
final String[] splitText = inText.split(Constants.REGEXP_PERIOD);
boolean allWordsAreValid = true;
for (final String word : splitText) {
if (!dictInfo.mDictionary.isValidWord(word)) {
allWordsAreValid = false;
break;
}
}
if (allWordsAreValid) {
return new SuggestionsInfo(SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO
| SuggestionsInfo.RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS,
new String[] {
TextUtils.join(Constants.STRING_SPACE, splitText) });
}
}
return dictInfo.mDictionary.isValidWord(inText) return dictInfo.mDictionary.isValidWord(inText)
? AndroidSpellCheckerService.getInDictEmptySuggestions() ? AndroidSpellCheckerService.getInDictEmptySuggestions()
: AndroidSpellCheckerService.getNotInDictEmptySuggestions( : AndroidSpellCheckerService.getNotInDictEmptySuggestions(

View file

@ -39,7 +39,7 @@ public class AndroidSpellCheckerServiceTest extends InputTestsBase {
// it yields 5). // it yields 5).
assertTrue(suggestions.length >= 2); assertTrue(suggestions.length >= 2);
// We also assume the top suggestion should be "this". // We also assume the top suggestion should be "this".
assertEquals("", "this", suggestions[0]); assertEquals("Test basic spell checking", "this", suggestions[0]);
} }
public void testRussianSpellchecker() { public void testRussianSpellchecker() {
@ -62,4 +62,21 @@ public class AndroidSpellCheckerServiceTest extends InputTestsBase {
// Russian dictionary. // Russian dictionary.
assertEquals("", "года", suggestions[0]); assertEquals("", "года", suggestions[0]);
} }
public void testSpellcheckWithPeriods() {
changeLanguage("en_US");
mEditText.setText("I'm.sure ");
mEditText.setSelection(mEditText.getText().length());
mEditText.onAttachedToWindow();
sleep(1000);
runMessages();
sleep(1000);
final SpanGetter span = new SpanGetter(mEditText.getText(), SuggestionSpan.class);
// If no span, the following will crash
final String[] suggestions = span.getSuggestions();
// The first suggestion should be "I'm sure".
assertEquals("Test spell checking of mistyped period for space", "I'm sure",
suggestions[0]);
}
} }