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

Commit c155f7f5 authored by Martin Paraskevov's avatar Martin Paraskevov Committed by Android (Google) Code Review
Browse files

Merge "Strip quotes from begining/end of a word before checking its validity."

parents 3a5de641 8ff42d15
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -58,6 +58,9 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
    protected final SuggestionsCache mSuggestionsCache = new SuggestionsCache();
    private final ContentObserver mObserver;

    private static final String quotesRegexp =
            "\\u0022|\\u0027|\\u0060|\\u00B4|\\u2018|\\u2018|\\u201C|\\u201D";

    private static final class SuggestionsParams {
        public final String[] mSuggestions;
        public final int mFlags;
@@ -224,12 +227,16 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
    protected SuggestionsInfo onGetSuggestionsInternal(
            final TextInfo textInfo, final NgramContext ngramContext, final int suggestionsLimit) {
        try {
            final String inText = textInfo.getText();
            final String text = textInfo.getText().
                    replaceAll(AndroidSpellCheckerService.APOSTROPHE,
                            AndroidSpellCheckerService.SINGLE_QUOTE).
                    replaceAll("^" + quotesRegexp, "").
                    replaceAll(quotesRegexp + "$", "");
            final SuggestionsParams cachedSuggestionsParams =
                    mSuggestionsCache.getSuggestionsFromCache(inText, ngramContext);
                    mSuggestionsCache.getSuggestionsFromCache(text, ngramContext);

            if (cachedSuggestionsParams != null) {
                Log.d(TAG, "onGetSuggestionsInternal() : Cache hit for [" + inText + "]");
                Log.d(TAG, "onGetSuggestionsInternal() : Cache hit for [" + text + "]");
                return new SuggestionsInfo(
                        cachedSuggestionsParams.mFlags, cachedSuggestionsParams.mSuggestions);
            }
@@ -241,10 +248,10 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
            }

            // Handle special patterns like email, URI, telephone number.
            final int checkability = getCheckabilityInScript(inText, mScript);
            final int checkability = getCheckabilityInScript(text, mScript);
            if (CHECKABILITY_CHECKABLE != checkability) {
                if (CHECKABILITY_CONTAINS_PERIOD == checkability) {
                    final String[] splitText = inText.split(Constants.REGEXP_PERIOD);
                    final String[] splitText = text.split(Constants.REGEXP_PERIOD);
                    boolean allWordsAreValid = true;
                    for (final String word : splitText) {
                        if (!mService.isValidWord(mLocale, word)) {
@@ -259,15 +266,13 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
                                        TextUtils.join(Constants.STRING_SPACE, splitText) });
                    }
                }
                return mService.isValidWord(mLocale, inText) ?
                return mService.isValidWord(mLocale, text) ?
                        AndroidSpellCheckerService.getInDictEmptySuggestions() :
                        AndroidSpellCheckerService.getNotInDictEmptySuggestions(
                                CHECKABILITY_CONTAINS_PERIOD == checkability /* reportAsTypo */);
            }

            // Handle normal words.
            final String text = inText.replaceAll(
                    AndroidSpellCheckerService.APOSTROPHE, AndroidSpellCheckerService.SINGLE_QUOTE);
            final int capitalizeType = StringUtils.getCapitalizationType(text);

            if (isInDictForAnyCapitalization(text, capitalizeType)) {