diff --git a/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java b/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java index 75efa52f2..94615a71f 100644 --- a/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java +++ b/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java @@ -192,7 +192,6 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL new int[] { touching.mWord.charAt(i) }, WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE); } - foundWord.setFirstCharCapitalized(Character.isUpperCase(touching.mWord.charAt(0))); } // Found a match, show suggestions if (foundWord != null || alternatives != null) { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index b467a32a2..fdf58f6ef 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1408,10 +1408,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar } } if (mHasUncommittedTypedChars) { - if (mComposingStringBuilder.length() == 0 && switcher.isAlphabetMode() - && switcher.isShiftedOrShiftLocked()) { - mWordComposer.setFirstCharCapitalized(true); - } mComposingStringBuilder.append((char) code); mWordComposer.add(code, keyCodes, x, y); final InputConnection ic = getCurrentInputConnection(); diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index af5e4b179..24519ad92 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -33,15 +33,9 @@ public class WordComposer { */ private ArrayList mCodes; - private int mTypedLength; private int[] mXCoordinates; private int[] mYCoordinates; - /** - * The word chosen from the candidate list, until it is committed. - */ - private String mPreferredWord; - private StringBuilder mTypedWord; private int mCapsCount; @@ -57,7 +51,6 @@ public class WordComposer { final int N = BinaryDictionary.MAX_WORD_LENGTH; mCodes = new ArrayList(N); mTypedWord = new StringBuilder(N); - mTypedLength = 0; mXCoordinates = new int[N]; mYCoordinates = new int[N]; } @@ -68,14 +61,12 @@ public class WordComposer { public void init(WordComposer source) { mCodes = new ArrayList(source.mCodes); - mPreferredWord = source.mPreferredWord; mTypedWord = new StringBuilder(source.mTypedWord); - mCapsCount = source.mCapsCount; - mAutoCapitalized = source.mAutoCapitalized; - mIsFirstCharCapitalized = source.mIsFirstCharCapitalized; - mTypedLength = source.mTypedLength; mXCoordinates = source.mXCoordinates; mYCoordinates = source.mYCoordinates; + mCapsCount = source.mCapsCount; + mIsFirstCharCapitalized = source.mIsFirstCharCapitalized; + mAutoCapitalized = source.mAutoCapitalized; } /** @@ -83,19 +74,17 @@ public class WordComposer { */ public void reset() { mCodes.clear(); - mTypedLength = 0; - mIsFirstCharCapitalized = false; - mPreferredWord = null; mTypedWord.setLength(0); mCapsCount = 0; + mIsFirstCharCapitalized = false; } /** * Number of keystrokes in the composing word. * @return the number of keystrokes */ - public int size() { - return mCodes.size(); + public final int size() { + return mTypedWord.length(); } /** @@ -115,21 +104,28 @@ public class WordComposer { return mYCoordinates; } + private static boolean isFirstCharCapitalized(int index, int codePoint, boolean previous) { + if (index == 0) return Character.isUpperCase(codePoint); + return previous && Character.isLowerCase(codePoint); + } + /** * Add a new keystroke, with codes[0] containing the pressed key's unicode and the rest of * the array containing unicode for adjacent keys, sorted by reducing probability/proximity. * @param codes the array of unicode values */ public void add(int primaryCode, int[] codes, int x, int y) { + final int newIndex = size(); mTypedWord.append((char) primaryCode); correctPrimaryJuxtapos(primaryCode, codes); mCodes.add(codes); - if (mTypedLength < BinaryDictionary.MAX_WORD_LENGTH) { - mXCoordinates[mTypedLength] = x; - mYCoordinates[mTypedLength] = y; + if (newIndex < BinaryDictionary.MAX_WORD_LENGTH) { + mXCoordinates[newIndex] = x; + mYCoordinates[newIndex] = y; } - ++mTypedLength; - if (Character.isUpperCase((char) primaryCode)) mCapsCount++; + mIsFirstCharCapitalized = isFirstCharCapitalized( + newIndex, primaryCode, mIsFirstCharCapitalized); + if (Character.isUpperCase(primaryCode)) mCapsCount++; } /** @@ -151,16 +147,16 @@ public class WordComposer { * Delete the last keystroke as a result of hitting backspace. */ public void deleteLast() { - final int codesSize = mCodes.size(); - if (codesSize > 0) { - mCodes.remove(codesSize - 1); - final int lastPos = mTypedWord.length() - 1; - char last = mTypedWord.charAt(lastPos); + final int size = size(); + if (size > 0) { + final int lastPos = size - 1; + char lastChar = mTypedWord.charAt(lastPos); + mCodes.remove(lastPos); mTypedWord.deleteCharAt(lastPos); - if (Character.isUpperCase(last)) mCapsCount--; + if (Character.isUpperCase(lastChar)) mCapsCount--; } - if (mTypedLength > 0) { - --mTypedLength; + if (size() == 0) { + mIsFirstCharCapitalized = false; } } @@ -169,17 +165,12 @@ public class WordComposer { * @return the word that was typed so far */ public CharSequence getTypedWord() { - int wordSize = mCodes.size(); - if (wordSize == 0) { + if (size() == 0) { return null; } return mTypedWord; } - 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 @@ -196,22 +187,6 @@ public class WordComposer { return (mCapsCount > 0) && (mCapsCount == size()); } - /** - * Stores the user's selected word, before it is actually committed to the text field. - * @param preferred - */ - public void setPreferredWord(String preferred) { - mPreferredWord = preferred; - } - - /** - * Return the word chosen by the user, or the typed word if no other word was chosen. - * @return the preferred word - */ - public CharSequence getPreferredWord() { - return mPreferredWord != null ? mPreferredWord : getTypedWord(); - } - /** * Returns true if more than one character is upper case, otherwise returns false. */