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

Commit 6f721862 authored by satok's avatar satok
Browse files

Dim previously suggested words

Change-Id: Id673c03bfa22ea9ce1bedb5174d8309a37a2a460
parent a2ad96d9
Loading
Loading
Loading
Loading
+23 −5
Original line number Original line Diff line number Diff line
@@ -16,8 +16,11 @@


package com.android.inputmethod.latin;
package com.android.inputmethod.latin;


import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;

import android.content.Context;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.Typeface;
import android.os.Handler;
import android.os.Handler;
import android.os.Message;
import android.os.Message;
@@ -43,6 +46,7 @@ import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.TextView;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;


public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener {
public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener {


@@ -50,6 +54,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
    private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
    private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
    private static final int MAX_SUGGESTIONS = 16;
    private static final int MAX_SUGGESTIONS = 16;


    private static boolean DBG = LatinImeLogger.sDBG;

    private final ArrayList<View> mWords = new ArrayList<View>();
    private final ArrayList<View> mWords = new ArrayList<View>();
    private final boolean mConfigCandidateHighlightFontColorEnabled;
    private final boolean mConfigCandidateHighlightFontColorEnabled;
    private final CharacterStyle mInvertedForegroundColorSpan;
    private final CharacterStyle mInvertedForegroundColorSpan;
@@ -175,11 +181,12 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
        final SuggestedWords suggestions = mSuggestions;
        final SuggestedWords suggestions = mSuggestions;
        clear();
        clear();
        final int count = suggestions.size();
        final int count = suggestions.size();
        final Object[] debugInfo = suggestions.mDebugInfo;
        for (int i = 0; i < count; i++) {
        for (int i = 0; i < count; i++) {
            CharSequence word = suggestions.getWord(i);
            CharSequence word = suggestions.getWord(i);
            if (word == null) continue;
            if (word == null) continue;
            final int wordLength = word.length();
            final int wordLength = word.length();
            final List<SuggestedWordInfo> suggestedWordInfoList =
                    suggestions.mSuggestedWordInfoList;


            final View v = mWords.get(i);
            final View v = mWords.get(i);
            final TextView tv = (TextView)v.findViewById(R.id.candidate_word);
            final TextView tv = (TextView)v.findViewById(R.id.candidate_word);
@@ -209,10 +216,21 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
            }
            }
            tv.setText(word);
            tv.setText(word);
            tv.setClickable(true);
            tv.setClickable(true);
            if (debugInfo != null && i < debugInfo.length && debugInfo[i] != null

                    && !TextUtils.isEmpty(debugInfo[i].toString())) {
            if (suggestedWordInfoList != null && suggestedWordInfoList.get(i) != null) {
                dv.setText(debugInfo[i].toString());
                final SuggestedWordInfo info = suggestedWordInfoList.get(i);
                if (info.isPreviousSuggestedWord()) {
                    int color = tv.getCurrentTextColor();
                    tv.setTextColor(Color.argb((int)(Color.alpha(color) * 0.5f), Color.red(color),
                            Color.green(color), Color.blue(color)));
                }
                final String debugString = info.getDebugString();
                if (DBG) {
                    if (!TextUtils.isEmpty(debugString)) {
                        dv.setText(debugString);
                        dv.setVisibility(VISIBLE);
                        dv.setVisibility(VISIBLE);
                    }
                }
            } else {
            } else {
                dv.setVisibility(GONE);
                dv.setVisibility(GONE);
            }
            }
+1 −1
Original line number Original line Diff line number Diff line
@@ -1519,7 +1519,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies);
        mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies);


        boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted
        boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted
                && mSuggest.hasMinimalCorrection();
                && mSuggest.hasAutoCorrection();
        final CharSequence typedWord = word.getTypedWord();
        final CharSequence typedWord = word.getTypedWord();
        // If we're in basic correct
        // If we're in basic correct
        final boolean typedWordValid = mSuggest.isValidWord(typedWord) ||
        final boolean typedWordValid = mSuggest.isValidWord(typedWord) ||
+8 −8
Original line number Original line Diff line number Diff line
@@ -95,7 +95,7 @@ public class Suggest implements Dictionary.WordCallback {
    private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>();
    private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>();
    ArrayList<CharSequence> mBigramSuggestions  = new ArrayList<CharSequence>();
    ArrayList<CharSequence> mBigramSuggestions  = new ArrayList<CharSequence>();
    private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>();
    private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>();
    private boolean mHaveAutoCorrection;
    private boolean mHasAutoCorrection;
    private String mLowerOriginalWord;
    private String mLowerOriginalWord;


    // TODO: Remove these member variables by passing more context to addWord() callback method
    // TODO: Remove these member variables by passing more context to addWord() callback method
@@ -200,7 +200,7 @@ public class Suggest implements Dictionary.WordCallback {
    public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer,
    public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer,
            CharSequence prevWordForBigram) {
            CharSequence prevWordForBigram) {
        LatinImeLogger.onStartSuggestion(prevWordForBigram);
        LatinImeLogger.onStartSuggestion(prevWordForBigram);
        mHaveAutoCorrection = false;
        mHasAutoCorrection = false;
        mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
        mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
        mIsAllUpperCase = wordComposer.isAllUpperCase();
        mIsAllUpperCase = wordComposer.isAllUpperCase();
        collectGarbage(mSuggestions, mPrefMaxSuggestions);
        collectGarbage(mSuggestions, mPrefMaxSuggestions);
@@ -278,7 +278,7 @@ public class Suggest implements Dictionary.WordCallback {
                    if (DBG) {
                    if (DBG) {
                        Log.d(TAG, "Auto corrected by CORRECTION_FULL.");
                        Log.d(TAG, "Auto corrected by CORRECTION_FULL.");
                    }
                    }
                    mHaveAutoCorrection = true;
                    mHasAutoCorrection = true;
                }
                }
            }
            }
            if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies);
            if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies);
@@ -297,7 +297,7 @@ public class Suggest implements Dictionary.WordCallback {
                    if (DBG) {
                    if (DBG) {
                        Log.d(TAG, "Auto corrected by S-threthhold.");
                        Log.d(TAG, "Auto corrected by S-threthhold.");
                    }
                    }
                    mHaveAutoCorrection = true;
                    mHasAutoCorrection = true;
                }
                }
            }
            }
        }
        }
@@ -342,7 +342,7 @@ public class Suggest implements Dictionary.WordCallback {
                    if (DBG) {
                    if (DBG) {
                        Log.d(TAG, "Auto corrected by AUTOTEXT.");
                        Log.d(TAG, "Auto corrected by AUTOTEXT.");
                    }
                    }
                    mHaveAutoCorrection = true;
                    mHasAutoCorrection = true;
                    mSuggestions.add(i + 1, autoText);
                    mSuggestions.add(i + 1, autoText);
                    i++;
                    i++;
                }
                }
@@ -350,7 +350,7 @@ public class Suggest implements Dictionary.WordCallback {
            }
            }
        }
        }
        removeDupes();
        removeDupes();
        return new SuggestedWords.Builder().addWords(mSuggestions);
        return new SuggestedWords.Builder().addWords(mSuggestions, null);
    }
    }


    public int[] getNextLettersFrequencies() {
    public int[] getNextLettersFrequencies() {
@@ -384,8 +384,8 @@ public class Suggest implements Dictionary.WordCallback {
        }
        }
    }
    }


    public boolean hasMinimalCorrection() {
    public boolean hasAutoCorrection() {
        return mHaveAutoCorrection;
        return mHasAutoCorrection;
    }
    }


    private boolean compareCaseInsensitive(final String mLowerOriginalWord,
    private boolean compareCaseInsensitive(final String mLowerOriginalWord,
+61 −24
Original line number Original line Diff line number Diff line
@@ -29,10 +29,11 @@ public class SuggestedWords {
    public final boolean mIsApplicationSpecifiedCompletions;
    public final boolean mIsApplicationSpecifiedCompletions;
    public final boolean mTypedWordValid;
    public final boolean mTypedWordValid;
    public final boolean mHasMinimalSuggestion;
    public final boolean mHasMinimalSuggestion;
    public final Object[] mDebugInfo;
    public final List<SuggestedWordInfo> mSuggestedWordInfoList;


    private SuggestedWords(List<CharSequence> words, boolean isApplicationSpecifiedCompletions,
    private SuggestedWords(List<CharSequence> words, boolean isApplicationSpecifiedCompletions,
            boolean typedWordValid, boolean hasMinamlSuggestion, Object[] debugInfo) {
            boolean typedWordValid, boolean hasMinamlSuggestion,
            List<SuggestedWordInfo> suggestedWordInfoList) {
        if (words != null) {
        if (words != null) {
            mWords = words;
            mWords = words;
        } else {
        } else {
@@ -41,7 +42,7 @@ public class SuggestedWords {
        mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions;
        mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions;
        mTypedWordValid = typedWordValid;
        mTypedWordValid = typedWordValid;
        mHasMinimalSuggestion = hasMinamlSuggestion;
        mHasMinimalSuggestion = hasMinamlSuggestion;
        mDebugInfo = debugInfo;
        mSuggestedWordInfoList = suggestedWordInfoList;
    }
    }


    public int size() {
    public int size() {
@@ -61,38 +62,46 @@ public class SuggestedWords {
    }
    }


    public static class Builder {
    public static class Builder {
        private List<CharSequence> mWords;
        private List<CharSequence> mWords = new ArrayList<CharSequence>();
        private boolean mIsCompletions;
        private boolean mIsCompletions;
        private boolean mTypedWordValid;
        private boolean mTypedWordValid;
        private boolean mHasMinimalSuggestion;
        private boolean mHasMinimalSuggestion;
        private Object[] mDebugInfo;
        private List<SuggestedWordInfo> mSuggestedWordInfoList =
                new ArrayList<SuggestedWordInfo>();


        public Builder() {
        public Builder() {
            // Nothing to do here.
            // Nothing to do here.
        }
        }


        public Builder addWords(List<CharSequence> words) {
        public Builder addWords(List<CharSequence> words,
            for (final CharSequence word : words)
                List<SuggestedWordInfo> suggestedWordInfoList) {
                addWord(word);
            final int N = words.size();
            for (int i = 0; i < N; ++i) {
                SuggestedWordInfo suggestedWordInfo = null;
                if (suggestedWordInfoList != null) {
                    suggestedWordInfo = suggestedWordInfoList.get(i);
                }
                if (suggestedWordInfo == null) {
                    suggestedWordInfo = new SuggestedWordInfo();
                }
                addWord(words.get(i), suggestedWordInfo);
            }
            return this;
            return this;
        }
        }


        public Builder setDebugInfo(Object[] debuginfo) {
        public Builder addWord(CharSequence word) {
            mDebugInfo = debuginfo;
            return addWord(word, null, false);
            return this;
        }
        }


        public Builder addWord(int pos, CharSequence word) {
        public Builder addWord(CharSequence word, CharSequence debugString,
            if (mWords == null)
                boolean isPreviousSuggestedWord) {
                mWords = new ArrayList<CharSequence>();
            SuggestedWordInfo info = new SuggestedWordInfo(debugString, isPreviousSuggestedWord);
            mWords.add(pos, word);
            return addWord(word, info);
            return this;
        }
        }


        public Builder addWord(CharSequence word) {
        private Builder addWord(CharSequence word, SuggestedWordInfo suggestedWordInfo) {
            if (mWords == null)
                mWords = new ArrayList<CharSequence>();
            mWords.add(word);
            mWords.add(word);
            mSuggestedWordInfoList.add(suggestedWordInfo);
            return this;
            return this;
        }
        }


@@ -117,11 +126,12 @@ public class SuggestedWords {
        // and replace it with what the user currently typed.
        // and replace it with what the user currently typed.
        public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord,
        public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord,
                SuggestedWords previousSuggestions) {
                SuggestedWords previousSuggestions) {
            if (mWords != null) mWords.clear();
            mWords.clear();
            addWord(typedWord);
            mSuggestedWordInfoList.clear();
            addWord(typedWord, null, false);
            final int previousSize = previousSuggestions.size();
            final int previousSize = previousSuggestions.size();
            for (int pos = 1; pos < previousSize; pos++)
            for (int pos = 1; pos < previousSize; pos++)
                addWord(previousSuggestions.getWord(pos));
                addWord(previousSuggestions.getWord(pos), null, true);
            mIsCompletions = false;
            mIsCompletions = false;
            mTypedWordValid = false;
            mTypedWordValid = false;
            mHasMinimalSuggestion = false;
            mHasMinimalSuggestion = false;
@@ -130,15 +140,42 @@ public class SuggestedWords {


        public SuggestedWords build() {
        public SuggestedWords build() {
            return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid,
            return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid,
                    mHasMinimalSuggestion, mDebugInfo);
                    mHasMinimalSuggestion, mSuggestedWordInfoList);
        }
        }


        public int size() {
        public int size() {
            return mWords == null ? 0 : mWords.size();
            return mWords.size();
        }
        }


        public CharSequence getWord(int pos) {
        public CharSequence getWord(int pos) {
            return mWords.get(pos);
            return mWords.get(pos);
        }
        }
    }
    }

    public static class SuggestedWordInfo {
        private final CharSequence mDebugString;
        private final boolean mPreviousSuggestedWord;

        public SuggestedWordInfo() {
            mDebugString = "";
            mPreviousSuggestedWord = false;
        }

        public SuggestedWordInfo(CharSequence debugString, boolean previousSuggestedWord) {
            mDebugString = debugString;
            mPreviousSuggestedWord = previousSuggestedWord;
        }

        public String getDebugString() {
            if (mDebugString == null) {
                return "";
            } else {
                return mDebugString.toString();
            }
        }

        public boolean isPreviousSuggestedWord () {
            return mPreviousSuggestedWord;
        }
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -437,7 +437,7 @@ public class VoiceIMEConnector implements VoiceInput.UiListener {
                    builder.addWord(word);
                    builder.addWord(word);
                }
                }
            } else {
            } else {
                builder.addWords(suggestions);
                builder.addWords(suggestions, null);
            }
            }
            builder.setTypedWordValid(true).setHasMinimalSuggestion(true);
            builder.setTypedWordValid(true).setHasMinimalSuggestion(true);
            mService.setSuggestions(builder.build());
            mService.setSuggestions(builder.build());