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

Commit d5b63605 authored by Tadashi Takaoka's avatar Tadashi Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Revert "Make SuggestedWords immutable""

parents 6a830277 d62fa834
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -1827,8 +1827,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
                builder.addTypedWordAndPreviousSuggestions(typedWord, previousSuggestions);
            }
        }
        if (Utils.shouldBlockAutoCorrectionBySafetyNet(builder, mSuggest)) {
            builder.setShouldBlockAutoCorrectionBySafetyNet();
        final SuggestedWords suggestedWords = builder.build();
        if (Utils.shouldBlockAutoCorrectionBySafetyNet(suggestedWords, mSuggest)) {
            suggestedWords.setShouldBlockAutoCorrectionBySatefyNet();
        }
        showSuggestions(builder.build(), typedWord);
    }
@@ -1836,7 +1837,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
    public void showSuggestions(final SuggestedWords suggestedWords, final CharSequence typedWord) {
        final CharSequence autoCorrection;
        if (suggestedWords.size() > 0) {
            if (!suggestedWords.mShouldBlockAutoCorrectionBySafetyNet
            if (!suggestedWords.shouldBlockAutoCorrectionBySafetyNet()
                    && suggestedWords.hasAutoCorrectionWord()) {
                autoCorrection = suggestedWords.getWord(1);
            } else {
@@ -1909,7 +1910,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
        if (suggestion.length() == 1 && isShowingPunctuationList()) {
            // Word separators are suggested before the user inputs something.
            // So, LatinImeLogger logs "" as a user's input.
            LatinImeLogger.logOnManualSuggestion("", suggestion.toString(), index, suggestions);
            LatinImeLogger.logOnManualSuggestion(
                    "", suggestion.toString(), index, suggestions.mWords);
            // Rely on onCodeInput to do the complicated swapping/stripping logic consistently.
            final int primaryCode = suggestion.charAt(0);
            onCodeInput(primaryCode, new int[] { primaryCode },
@@ -1920,7 +1922,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
        // We need to log before we commit, because the word composer will store away the user
        // typed word.
        LatinImeLogger.logOnManualSuggestion(mWordComposer.getTypedWord().toString(),
                suggestion.toString(), index, suggestions);
                suggestion.toString(), index, suggestions.mWords);
        mExpectingUpdateSelection = true;
        commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK,
                LastComposedWord.NOT_A_SEPARATOR);
+3 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.view.inputmethod.EditorInfo;

import com.android.inputmethod.keyboard.Keyboard;

import java.util.List;

public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChangeListener {

    public static boolean sDBG = false;
@@ -42,7 +44,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
    }

    public static void logOnManualSuggestion(
            String before, String after, int position, SuggestedWords suggestions) {
            String before, String after, int position, List<CharSequence> suggestions) {
    }

    public static void logOnAutoCorrection(String before, String after, int separatorCode) {
+29 −40
Original line number Diff line number Diff line
@@ -20,25 +20,22 @@ import android.text.TextUtils;
import android.view.inputmethod.CompletionInfo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

public class SuggestedWords {
    public static final SuggestedWords EMPTY = new SuggestedWords(null, false, false, false, false,
            null);
    public static final SuggestedWords EMPTY = new SuggestedWords(null, false, false, false, null);

    private final List<CharSequence> mWords;
    public final List<CharSequence> mWords;
    public final boolean mTypedWordValid;
    public final boolean mHasAutoCorrectionCandidate;
    public final boolean mIsPunctuationSuggestions;
    public final boolean mShouldBlockAutoCorrectionBySafetyNet;
    private final List<SuggestedWordInfo> mSuggestedWordInfoList;
    private boolean mShouldBlockAutoCorrectionBySafetyNet;

    SuggestedWords(List<CharSequence> words, boolean typedWordValid,
    private SuggestedWords(List<CharSequence> words, boolean typedWordValid,
            boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions,
            boolean shouldBlockAutoCorrectionBySafetyNet,
            List<SuggestedWordInfo> suggestedWordInfoList) {
        if (words != null) {
            mWords = words;
@@ -48,8 +45,8 @@ public class SuggestedWords {
        mTypedWordValid = typedWordValid;
        mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate;
        mIsPunctuationSuggestions = isPunctuationSuggestions;
        mShouldBlockAutoCorrectionBySafetyNet = shouldBlockAutoCorrectionBySafetyNet;
        mSuggestedWordInfoList = suggestedWordInfoList;
        mShouldBlockAutoCorrectionBySafetyNet = false;
    }

    public int size() {
@@ -65,23 +62,24 @@ public class SuggestedWords {
    }

    public boolean hasAutoCorrectionWord() {
        return mHasAutoCorrectionCandidate && size() > 1 && mTypedWordValid;
        return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid;
    }

    public boolean willAutoCorrect() {
        return !mTypedWordValid && mHasAutoCorrectionCandidate
                && !mShouldBlockAutoCorrectionBySafetyNet;
    public boolean isPunctuationSuggestions() {
        return mIsPunctuationSuggestions;
    }

    @Override
    public String toString() {
        // Pretty-print method to help debug
        return "SuggestedWords.Builder:"
                + " mTypedWordValid = " + mTypedWordValid
                + " mHasAutoCorrectionCandidate = " + mHasAutoCorrectionCandidate
                + " mIsPunctuationSuggestions = " + mIsPunctuationSuggestions
                + " mShouldBlockAutoCorrectionBySafetyNet" + mShouldBlockAutoCorrectionBySafetyNet
                + " mWords=" + Arrays.toString(mWords.toArray());
    public void setShouldBlockAutoCorrectionBySatefyNet() {
        mShouldBlockAutoCorrectionBySafetyNet = true;
    }

    public boolean shouldBlockAutoCorrectionBySafetyNet() {
        return mShouldBlockAutoCorrectionBySafetyNet;
    }

    public boolean willAutoCorrect() {
        return !mTypedWordValid && mHasAutoCorrectionCandidate
                && !shouldBlockAutoCorrectionBySafetyNet();
    }

    public static class Builder {
@@ -89,7 +87,6 @@ public class SuggestedWords {
        private boolean mTypedWordValid;
        private boolean mHasMinimalSuggestion;
        private boolean mIsPunctuationSuggestions;
        private boolean mShouldBlockAutoCorrectionBySafetyNet;
        private List<SuggestedWordInfo> mSuggestedWordInfoList =
                new ArrayList<SuggestedWordInfo>();

@@ -154,11 +151,6 @@ public class SuggestedWords {
            return this;
        }

        public Builder setShouldBlockAutoCorrectionBySafetyNet() {
            mShouldBlockAutoCorrectionBySafetyNet = true;
            return this;
        }

        // Should get rid of the first one (what the user typed previously) from suggestions
        // and replace it with what the user currently typed.
        public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord,
@@ -184,8 +176,7 @@ public class SuggestedWords {

        public SuggestedWords build() {
            return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion,
                    mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet,
                    mSuggestedWordInfoList);
                    mIsPunctuationSuggestions, mSuggestedWordInfoList);
        }

        public int size() {
@@ -196,20 +187,18 @@ public class SuggestedWords {
            return mWords.get(pos);
        }

        public boolean isTypedWordValid() {
            return mTypedWordValid;
        }

        @Override
        public String toString() {
            // Pretty-print method to help debug
            return "SuggestedWords.Builder:"
                    + " mTypedWordValid = " + mTypedWordValid
                    + " mHasMinimalSuggestion = " + mHasMinimalSuggestion
                    + " mIsPunctuationSuggestions = " + mIsPunctuationSuggestions
                    + " mShouldBlockAutoCorrectionBySafetyNet"
                    + mShouldBlockAutoCorrectionBySafetyNet
                    + " mWords=" + Arrays.toString(mWords.toArray());
            final StringBuilder sb = new StringBuilder("StringBuilder: mTypedWordValid = "
                    + mTypedWordValid + " ; mHasMinimalSuggestion = " + mHasMinimalSuggestion
                    + " ; mIsPunctuationSuggestions = " + mIsPunctuationSuggestions
                    + " --- ");
            for (CharSequence s : mWords) {
                sb.append(s);
                sb.append(" ; ");
            }
            return sb.toString();
        }
    }

+2 −2
Original line number Diff line number Diff line
@@ -190,11 +190,11 @@ public class Utils {

    // TODO: Resolve the inconsistencies between the native auto correction algorithms and
    // this safety net
    public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords.Builder suggestions,
    public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords suggestions,
            Suggest suggest) {
        // Safety net for auto correction.
        // Actually if we hit this safety net, it's actually a bug.
        if (suggestions.size() <= 1 || suggestions.isTypedWordValid()) return false;
        if (suggestions.size() <= 1 || suggestions.mTypedWordValid) return false;
        // If user selected aggressive auto correction mode, there is no need to use the safety
        // net.
        if (suggest.isAggressiveAutoCorrectionMode()) return false;
+2 −2
Original line number Diff line number Diff line
@@ -307,7 +307,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
            }
            if (LatinImeLogger.sDBG) {
                if (index == mCenterSuggestionIndex && suggestions.mHasAutoCorrectionCandidate
                        && suggestions.mShouldBlockAutoCorrectionBySafetyNet) {
                        && suggestions.shouldBlockAutoCorrectionBySafetyNet()) {
                    return 0xFFFF0000;
                }
            }
@@ -335,7 +335,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,

        public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer,
                int stripWidth) {
            if (suggestions.mIsPunctuationSuggestions) {
            if (suggestions.isPunctuationSuggestions()) {
                layoutPunctuationSuggestions(suggestions, stripView);
                return;
            }