Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4863a065 authored by Jean Chalard's avatar Jean Chalard
Browse files

Special case periods in the spell checker

Special case <valid word>.<valid word> to send as a suggestion
the same string where the periods is replaced by a space.

Bug: 10780091
Change-Id: I43c94675977f9ab5d7ee5671486cb742b39f3974
parent 2d7feb5a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -214,6 +214,9 @@ public final class Constants {
    public static final int CODE_INVERTED_QUESTION_MARK = 0xBF; // ¿
    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.
     * These should be aligned with {@link KeyboardCodesSet#ID_TO_NAME},
+16 −0
Original line number Diff line number Diff line
@@ -282,6 +282,22 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
                        return AndroidSpellCheckerService.getNotInDictEmptySuggestions(
                                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)
                            ? AndroidSpellCheckerService.getInDictEmptySuggestions()
                            : AndroidSpellCheckerService.getNotInDictEmptySuggestions(
+18 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ public class AndroidSpellCheckerServiceTest extends InputTestsBase {
        // it yields 5).
        assertTrue(suggestions.length >= 2);
        // We also assume the top suggestion should be "this".
        assertEquals("", "this", suggestions[0]);
        assertEquals("Test basic spell checking", "this", suggestions[0]);
    }

    public void testRussianSpellchecker() {
@@ -62,4 +62,21 @@ public class AndroidSpellCheckerServiceTest extends InputTestsBase {
        // Russian dictionary.
        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]);
    }
}