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

Commit 0b4ae1f5 authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Capitalize the displayed text in the suggestion bar when all of the user typed chars are upper case

bug:3014227
Change-Id: Ic453e2fde57ce51be00f3a506e1c9328103ca99a
parent 3a2b9035
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1389,7 +1389,7 @@ public class LatinIME extends InputMethodService
            if (mKeyboardSwitcher.getInputView().isShifted()
                    && mKeyboardSwitcher.isAlphabetMode()
                    && mComposing.length() == 0) {
                mWord.setCapitalized(true);
                mWord.setFirstCharCapitalized(true);
            }
            mComposing.append((char) primaryCode);
            mWord.add(primaryCode, keyCodes);
@@ -2020,7 +2020,7 @@ public class LatinIME extends InputMethodService
                    touching.word.charAt(i)
                });
            }
            foundWord.setCapitalized(Character.isUpperCase(touching.word.charAt(0)));
            foundWord.setFirstCharCapitalized(Character.isUpperCase(touching.word.charAt(0)));
        }
        // Found a match, show suggestions
        if (foundWord != null || alternatives != null) {
@@ -2177,7 +2177,7 @@ public class LatinIME extends InputMethodService
    }

    public boolean preferCapitalization() {
        return mWord.isCapitalized();
        return mWord.isFirstCharCapitalized();
    }

    private void toggleLanguage(boolean reset, boolean next) {
+9 −3
Original line number Diff line number Diff line
@@ -96,7 +96,10 @@ public class Suggest implements Dictionary.WordCallback {
    private boolean mHaveCorrection;
    private CharSequence mOriginalWord;
    private String mLowerOriginalWord;
    private boolean mCapitalize;

    // TODO: Remove these member variables by passing more context to addWord() callback method
    private boolean mIsFirstCharCapitalized;
    private boolean mIsAllUpperCase;

    private int mCorrectionMode = CORRECTION_BASIC;

@@ -219,7 +222,8 @@ public class Suggest implements Dictionary.WordCallback {
            boolean includeTypedWordIfValid, CharSequence prevWordForBigram) {
        LatinImeLogger.onStartSuggestion(prevWordForBigram);
        mHaveCorrection = false;
        mCapitalize = wordComposer.isCapitalized();
        mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
        mIsAllUpperCase = wordComposer.isAllUpperCase();
        collectGarbage(mSuggestions, mPrefMaxSuggestions);
        Arrays.fill(mPriorities, 0);
        Arrays.fill(mNextLettersFrequencies, 0);
@@ -453,7 +457,9 @@ public class Suggest implements Dictionary.WordCallback {
        StringBuilder sb = poolSize > 0 ? (StringBuilder) mStringPool.remove(poolSize - 1) 
                : new StringBuilder(getApproxMaxWordLength());
        sb.setLength(0);
        if (mCapitalize) {
        if (mIsAllUpperCase) {
            sb.append(new String(word, offset, length).toUpperCase());
        } else if (mIsFirstCharCapitalized) {
            sb.append(Character.toUpperCase(word[offset]));
            if (length > 1) {
                sb.append(word, offset + 1, length - 1);
+17 −9
Original line number Diff line number Diff line
@@ -39,9 +39,9 @@ public class WordComposer {
    private boolean mAutoCapitalized;
    
    /**
     * Whether the user chose to capitalize the word.
     * Whether the user chose to capitalize the first char of the word.
     */
    private boolean mIsCapitalized;
    private boolean mIsFirstCharCapitalized;

    public WordComposer() {
        mCodes = new ArrayList<int[]>(12);
@@ -54,7 +54,7 @@ public class WordComposer {
        mTypedWord = new StringBuilder(copy.mTypedWord);
        mCapsCount = copy.mCapsCount;
        mAutoCapitalized = copy.mAutoCapitalized;
        mIsCapitalized = copy.mIsCapitalized;
        mIsFirstCharCapitalized = copy.mIsFirstCharCapitalized;
    }

    /**
@@ -62,7 +62,7 @@ public class WordComposer {
     */
    public void reset() {
        mCodes.clear();
        mIsCapitalized = false;
        mIsFirstCharCapitalized = false;
        mPreferredWord = null;
        mTypedWord.setLength(0);
        mCapsCount = 0;
@@ -138,16 +138,24 @@ public class WordComposer {
        return mTypedWord;
    }

    public void setCapitalized(boolean capitalized) {
        mIsCapitalized = capitalized;
    public void setFirstCharCapitalized(boolean capitalized) {
        mIsFirstCharCapitalized = capitalized;
    }
    
    /**
     * Whether or not the user typed a capital letter as the first letter in the word
     * @return capitalization preference
     */
    public boolean isCapitalized() {
        return mIsCapitalized;
    public boolean isFirstCharCapitalized() {
        return mIsFirstCharCapitalized;
    }

    /**
     * Whether or not all of the user typed chars are upper case
     * @return true if all user typed chars are upper case, false otherwise
     */
    public boolean isAllUpperCase() {
        return (mCapsCount > 0) && (mCapsCount == size());
    }

    /**