diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 4729585f6..01f3ba66c 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -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) { diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index 92bbe4362..3b898941f 100755 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -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); diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index fe4c68576..2e415b771 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -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(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,18 +138,26 @@ 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()); + } + /** * Stores the user's selected word, before it is actually committed to the text field. * @param preferred