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

Commit f4c7eb47 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Fix showing important notice even at beginning of sentence

This is a cherry-pick of Ic72d6fecc3 from lmp-dev.

Bug: 17536096
Change-Id: Id76b8f8dc85d03bc7ed5f24800301c081a82a8d2
parent 90f06760
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -595,8 +595,9 @@ public class DictionaryFacilitator {
            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
            final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId) {
        final DictionaryGroup[] dictionaryGroups = mDictionaryGroups;
        final SuggestionResults suggestionResults =
                new SuggestionResults(SuggestedWords.MAX_SUGGESTIONS);
        final SuggestionResults suggestionResults = new SuggestionResults(
                SuggestedWords.MAX_SUGGESTIONS,
                prevWordsInfo.mPrevWordsInfo[0].mIsBeginningOfSentence);
        final float[] languageWeight = new float[] { Dictionary.NOT_A_LANGUAGE_WEIGHT };
        for (final DictionaryGroup dictionaryGroup : dictionaryGroups) {
            for (final String dictType : DICT_TYPES_ORDERED_TO_GET_SUGGESTIONS) {
+9 −5
Original line number Diff line number Diff line
@@ -1516,19 +1516,23 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        final boolean isEmptyApplicationSpecifiedCompletions =
                currentSettingsValues.isApplicationSpecifiedCompletionsOn()
                && suggestedWords.isEmpty();
        final boolean noSuggestionsToShow = (SuggestedWords.EMPTY == suggestedWords)
        final boolean noSuggestionsFromDictionaries = (SuggestedWords.EMPTY == suggestedWords)
                || suggestedWords.isPunctuationSuggestions()
                || isEmptyApplicationSpecifiedCompletions;
        if (shouldShowImportantNotice && noSuggestionsToShow) {
        final boolean isBeginningOfSentencePrediction = (suggestedWords.mInputStyle
                == SuggestedWords.INPUT_STYLE_BEGINNING_OF_SENTENCE_PREDICTION);
        final boolean noSuggestionsToOverrideImportantNotice = noSuggestionsFromDictionaries
                || isBeginningOfSentencePrediction;
        if (shouldShowImportantNotice && noSuggestionsToOverrideImportantNotice) {
            if (mSuggestionStripView.maybeShowImportantNoticeTitle()) {
                return;
            }
        }

        if (currentSettingsValues.isSuggestionsEnabledPerUserSettings()
                // We should clear suggestions if there is no suggestion to show.
                || noSuggestionsToShow
                || currentSettingsValues.isApplicationSpecifiedCompletionsOn()) {
                || currentSettingsValues.isApplicationSpecifiedCompletionsOn()
                // We should clear the contextual strip if there is no suggestion from dictionaries.
                || noSuggestionsFromDictionaries) {
            mSuggestionStripView.setSuggestions(suggestedWords,
                    SubtypeLocaleUtils.isRtlLanguage(mSubtypeSwitcher.getCurrentSubtype()));
        }
+10 −2
Original line number Diff line number Diff line
@@ -188,8 +188,14 @@ public final class Suggest {
            suggestionsList = suggestionsContainer;
        }

        final int inputStyle = resultsArePredictions ? SuggestedWords.INPUT_STYLE_PREDICTION :
                inputStyleIfNotPrediction;
        final int inputStyle;
        if (resultsArePredictions) {
            inputStyle = suggestionResults.mIsBeginningOfSentence
                    ? SuggestedWords.INPUT_STYLE_BEGINNING_OF_SENTENCE_PREDICTION
                    : SuggestedWords.INPUT_STYLE_PREDICTION;
        } else {
            inputStyle = inputStyleIfNotPrediction;
        }
        callback.onGetSuggestedWords(new SuggestedWords(suggestionsList,
                suggestionResults.mRawSuggestions,
                // TODO: this first argument is lying. If this is a whitelisted word which is an
@@ -244,6 +250,8 @@ public final class Suggest {

        // In the batch input mode, the most relevant suggested word should act as a "typed word"
        // (typedWordValid=true), not as an "auto correct word" (willAutoCorrect=false).
        // Note that because this method is never used to get predictions, there is no need to
        // modify inputType such in getSuggestedWordsForNonBatchInput.
        callback.onGetSuggestedWords(new SuggestedWords(suggestionsContainer,
                suggestionResults.mRawSuggestions,
                true /* typedWordValid */,
+10 −4
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ public class SuggestedWords {
    public static final int INPUT_STYLE_APPLICATION_SPECIFIED = 4;
    public static final int INPUT_STYLE_RECORRECTION = 5;
    public static final int INPUT_STYLE_PREDICTION = 6;
    public static final int INPUT_STYLE_BEGINNING_OF_SENTENCE_PREDICTION = 7;

    // The maximum number of suggestions available.
    public static final int MAX_SUGGESTIONS = 18;
@@ -80,10 +81,9 @@ public class SuggestedWords {
            final int inputStyle,
            final int sequenceNumber) {
        this(suggestedWordInfoList, rawSuggestions,
                (suggestedWordInfoList.isEmpty() || INPUT_STYLE_PREDICTION == inputStyle) ? null
                (suggestedWordInfoList.isEmpty() || isPrediction(inputStyle)) ? null
                        : suggestedWordInfoList.get(INDEX_OF_TYPED_WORD).mWord,
                typedWordValid, willAutoCorrect, isObsoleteSuggestions, inputStyle,
                sequenceNumber);
                typedWordValid, willAutoCorrect, isObsoleteSuggestions, inputStyle, sequenceNumber);
    }

    public SuggestedWords(final ArrayList<SuggestedWordInfo> suggestedWordInfoList,
@@ -180,6 +180,7 @@ public class SuggestedWords {
        return "SuggestedWords:"
                + " mTypedWordValid=" + mTypedWordValid
                + " mWillAutoCorrect=" + mWillAutoCorrect
                + " mInputStyle=" + mInputStyle
                + " words=" + Arrays.toString(mSuggestedWordInfoList.toArray());
    }

@@ -386,8 +387,13 @@ public class SuggestedWords {
        }
    }

    private static boolean isPrediction(final int inputStyle) {
        return INPUT_STYLE_PREDICTION == inputStyle
                || INPUT_STYLE_BEGINNING_OF_SENTENCE_PREDICTION == inputStyle;
    }

    public boolean isPrediction() {
        return INPUT_STYLE_PREDICTION == mInputStyle;
        return isPrediction(mInputStyle);
    }

    // SuggestedWords is an immutable object, as much as possible. We must not just remove
+8 −5
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import com.android.inputmethod.latin.define.ProductionFlags;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Locale;
import java.util.TreeSet;

/**
@@ -31,14 +30,17 @@ import java.util.TreeSet;
 */
public final class SuggestionResults extends TreeSet<SuggestedWordInfo> {
    public final ArrayList<SuggestedWordInfo> mRawSuggestions;
    // TODO: Instead of a boolean , we may want to include the context of this suggestion results,
    // such as {@link PrevWordsInfo}.
    public final boolean mIsBeginningOfSentence;
    private final int mCapacity;

    public SuggestionResults(final int capacity) {
        this(sSuggestedWordInfoComparator, capacity);
    public SuggestionResults(final int capacity, final boolean isBeginningOfSentence) {
        this(sSuggestedWordInfoComparator, capacity, isBeginningOfSentence);
    }

    public SuggestionResults(final Comparator<SuggestedWordInfo> comparator,
            final int capacity) {
    private SuggestionResults(final Comparator<SuggestedWordInfo> comparator,
            final int capacity, final boolean isBeginningOfSentence) {
        super(comparator);
        mCapacity = capacity;
        if (ProductionFlags.INCLUDE_RAW_SUGGESTIONS) {
@@ -46,6 +48,7 @@ public final class SuggestionResults extends TreeSet<SuggestedWordInfo> {
        } else {
            mRawSuggestions = null;
        }
        mIsBeginningOfSentence = isBeginningOfSentence;
    }

    @Override