Loading java/src/com/android/inputmethod/latin/LatinIME.java +10 −35 Original line number Diff line number Diff line Loading @@ -1076,7 +1076,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return mConnection.getCursorCapsMode(inputType); } private void swapSwapperAndSpaceWhileInBatchEdit() { private void swapSwapperAndSpace() { CharSequence lastTwo = mConnection.getTextBeforeCursor(2, 0); // It is guaranteed lastTwo.charAt(1) is a swapper - else this method is not called. if (lastTwo != null && lastTwo.length() == 2 Loading @@ -1093,7 +1093,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } private boolean maybeDoubleSpaceWhileInBatchEdit() { private boolean maybeDoubleSpace() { if (mCorrectionMode == Suggest.CORRECTION_NONE) return false; final CharSequence lastThree = mConnection.getTextBeforeCursor(3, 0); if (lastThree != null && lastThree.length() == 3 Loading Loading @@ -1125,17 +1125,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen || codePoint == Keyboard.CODE_CLOSING_ANGLE_BRACKET; } private void removeTrailingSpace() { final CharSequence lastOne = mConnection.getTextBeforeCursor(1, 0); if (lastOne != null && lastOne.length() == 1 && lastOne.charAt(0) == Keyboard.CODE_SPACE) { mConnection.deleteSurroundingText(1, 0); if (ProductionFlag.IS_EXPERIMENTAL) { ResearchLogger.latinIME_deleteSurroundingText(1); } } } @Override public boolean addWordToDictionary(String word) { mUserDictionary.addWordToUserDictionary(word, 128); Loading Loading @@ -1487,7 +1476,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private boolean maybeStripSpace(final int code, final int spaceState, final boolean isFromSuggestionStrip) { if (Keyboard.CODE_ENTER == code && SPACE_STATE_SWAP_PUNCTUATION == spaceState) { removeTrailingSpace(); mConnection.removeTrailingSpace(); return false; } else if ((SPACE_STATE_WEAK == spaceState || SPACE_STATE_SWAP_PUNCTUATION == spaceState) Loading @@ -1496,7 +1485,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return true; } else { if (mSettingsValues.isWeakSpaceStripper(code)) { removeTrailingSpace(); mConnection.removeTrailingSpace(); } return false; } Loading @@ -1523,7 +1512,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // thread here. if (!isComposingWord && (isAlphabet(primaryCode) || mSettingsValues.isSymbolExcludedFromWordSeparators(primaryCode)) && isSuggestionsRequested() && !isCursorTouchingWord()) { && isSuggestionsRequested() && !mConnection.isCursorTouchingWord(mSettingsValues)) { // Reset entirely the composing state anyway, then start composing a new word unless // the character is a single quote. The idea here is, single quote is not a // separator and it should be treated as a normal character, except in the first Loading Loading @@ -1553,7 +1542,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen sendKeyCodePoint(primaryCode); if (swapWeakSpace) { swapSwapperAndSpaceWhileInBatchEdit(); swapSwapperAndSpace(); mSpaceState = SPACE_STATE_WEAK; } // Some characters are not word separators, yet they don't start a new Loading Loading @@ -1606,7 +1595,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (Keyboard.CODE_SPACE == primaryCode) { if (isSuggestionsRequested()) { if (maybeDoubleSpaceWhileInBatchEdit()) { if (maybeDoubleSpace()) { mSpaceState = SPACE_STATE_DOUBLE; } else if (!isShowingPunctuationList()) { mSpaceState = SPACE_STATE_WEAK; Loading @@ -1614,13 +1603,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } mHandler.startDoubleSpacesTimer(); if (!isCursorTouchingWord()) { if (!mConnection.isCursorTouchingWord(mSettingsValues)) { mHandler.cancelUpdateSuggestions(); mHandler.postUpdateBigramPredictions(); } } else { if (swapWeakSpace) { swapSwapperAndSpaceWhileInBatchEdit(); swapSwapperAndSpace(); mSpaceState = SPACE_STATE_SWAP_PUNCTUATION; } else if (SPACE_STATE_PHANTOM == spaceState) { // If we are in phantom space state, and the user presses a separator, we want to Loading Loading @@ -2033,20 +2022,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return null; } public boolean isCursorTouchingWord() { CharSequence before = mConnection.getTextBeforeCursor(1, 0); CharSequence after = mConnection.getTextAfterCursor(1, 0); if (!TextUtils.isEmpty(before) && !mSettingsValues.isWordSeparator(before.charAt(0)) && !mSettingsValues.isSymbolExcludedFromWordSeparators(before.charAt(0))) { return true; } if (!TextUtils.isEmpty(after) && !mSettingsValues.isWordSeparator(after.charAt(0)) && !mSettingsValues.isSymbolExcludedFromWordSeparators(after.charAt(0))) { return true; } return false; } private boolean sameAsTextBeforeCursor(final CharSequence text) { final CharSequence beforeText = mConnection.getTextBeforeCursor(text.length(), 0); return TextUtils.equals(text, beforeText); Loading Loading @@ -2230,7 +2205,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // Since we just changed languages, we should re-evaluate suggestions with whatever word // we are currently composing. If we are not composing anything, we may want to display // predictions or punctuation signs (which is done by updateBigramPredictions anyway). if (isCursorTouchingWord()) { if (mConnection.isCursorTouchingWord(mSettingsValues)) { mHandler.postUpdateSuggestions(); } else { mHandler.postUpdateBigramPredictions(); Loading java/src/com/android/inputmethod/latin/RichInputConnection.java +29 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.inputmethod.latin; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.inputmethod.CompletionInfo; Loading @@ -24,6 +25,9 @@ import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.define.ProductionFlag; import java.util.regex.Pattern; /** Loading Loading @@ -297,4 +301,29 @@ public class RichInputConnection { return null; } public boolean isCursorTouchingWord(final SettingsValues settingsValues) { CharSequence before = getTextBeforeCursor(1, 0); CharSequence after = getTextAfterCursor(1, 0); if (!TextUtils.isEmpty(before) && !settingsValues.isWordSeparator(before.charAt(0)) && !settingsValues.isSymbolExcludedFromWordSeparators(before.charAt(0))) { return true; } if (!TextUtils.isEmpty(after) && !settingsValues.isWordSeparator(after.charAt(0)) && !settingsValues.isSymbolExcludedFromWordSeparators(after.charAt(0))) { return true; } return false; } public void removeTrailingSpace() { final CharSequence lastOne = getTextBeforeCursor(1, 0); if (lastOne != null && lastOne.length() == 1 && lastOne.charAt(0) == Keyboard.CODE_SPACE) { deleteSurroundingText(1, 0); if (ProductionFlag.IS_EXPERIMENTAL) { ResearchLogger.latinIME_deleteSurroundingText(1); } } } } Loading
java/src/com/android/inputmethod/latin/LatinIME.java +10 −35 Original line number Diff line number Diff line Loading @@ -1076,7 +1076,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return mConnection.getCursorCapsMode(inputType); } private void swapSwapperAndSpaceWhileInBatchEdit() { private void swapSwapperAndSpace() { CharSequence lastTwo = mConnection.getTextBeforeCursor(2, 0); // It is guaranteed lastTwo.charAt(1) is a swapper - else this method is not called. if (lastTwo != null && lastTwo.length() == 2 Loading @@ -1093,7 +1093,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } private boolean maybeDoubleSpaceWhileInBatchEdit() { private boolean maybeDoubleSpace() { if (mCorrectionMode == Suggest.CORRECTION_NONE) return false; final CharSequence lastThree = mConnection.getTextBeforeCursor(3, 0); if (lastThree != null && lastThree.length() == 3 Loading Loading @@ -1125,17 +1125,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen || codePoint == Keyboard.CODE_CLOSING_ANGLE_BRACKET; } private void removeTrailingSpace() { final CharSequence lastOne = mConnection.getTextBeforeCursor(1, 0); if (lastOne != null && lastOne.length() == 1 && lastOne.charAt(0) == Keyboard.CODE_SPACE) { mConnection.deleteSurroundingText(1, 0); if (ProductionFlag.IS_EXPERIMENTAL) { ResearchLogger.latinIME_deleteSurroundingText(1); } } } @Override public boolean addWordToDictionary(String word) { mUserDictionary.addWordToUserDictionary(word, 128); Loading Loading @@ -1487,7 +1476,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private boolean maybeStripSpace(final int code, final int spaceState, final boolean isFromSuggestionStrip) { if (Keyboard.CODE_ENTER == code && SPACE_STATE_SWAP_PUNCTUATION == spaceState) { removeTrailingSpace(); mConnection.removeTrailingSpace(); return false; } else if ((SPACE_STATE_WEAK == spaceState || SPACE_STATE_SWAP_PUNCTUATION == spaceState) Loading @@ -1496,7 +1485,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return true; } else { if (mSettingsValues.isWeakSpaceStripper(code)) { removeTrailingSpace(); mConnection.removeTrailingSpace(); } return false; } Loading @@ -1523,7 +1512,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // thread here. if (!isComposingWord && (isAlphabet(primaryCode) || mSettingsValues.isSymbolExcludedFromWordSeparators(primaryCode)) && isSuggestionsRequested() && !isCursorTouchingWord()) { && isSuggestionsRequested() && !mConnection.isCursorTouchingWord(mSettingsValues)) { // Reset entirely the composing state anyway, then start composing a new word unless // the character is a single quote. The idea here is, single quote is not a // separator and it should be treated as a normal character, except in the first Loading Loading @@ -1553,7 +1542,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen sendKeyCodePoint(primaryCode); if (swapWeakSpace) { swapSwapperAndSpaceWhileInBatchEdit(); swapSwapperAndSpace(); mSpaceState = SPACE_STATE_WEAK; } // Some characters are not word separators, yet they don't start a new Loading Loading @@ -1606,7 +1595,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (Keyboard.CODE_SPACE == primaryCode) { if (isSuggestionsRequested()) { if (maybeDoubleSpaceWhileInBatchEdit()) { if (maybeDoubleSpace()) { mSpaceState = SPACE_STATE_DOUBLE; } else if (!isShowingPunctuationList()) { mSpaceState = SPACE_STATE_WEAK; Loading @@ -1614,13 +1603,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } mHandler.startDoubleSpacesTimer(); if (!isCursorTouchingWord()) { if (!mConnection.isCursorTouchingWord(mSettingsValues)) { mHandler.cancelUpdateSuggestions(); mHandler.postUpdateBigramPredictions(); } } else { if (swapWeakSpace) { swapSwapperAndSpaceWhileInBatchEdit(); swapSwapperAndSpace(); mSpaceState = SPACE_STATE_SWAP_PUNCTUATION; } else if (SPACE_STATE_PHANTOM == spaceState) { // If we are in phantom space state, and the user presses a separator, we want to Loading Loading @@ -2033,20 +2022,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return null; } public boolean isCursorTouchingWord() { CharSequence before = mConnection.getTextBeforeCursor(1, 0); CharSequence after = mConnection.getTextAfterCursor(1, 0); if (!TextUtils.isEmpty(before) && !mSettingsValues.isWordSeparator(before.charAt(0)) && !mSettingsValues.isSymbolExcludedFromWordSeparators(before.charAt(0))) { return true; } if (!TextUtils.isEmpty(after) && !mSettingsValues.isWordSeparator(after.charAt(0)) && !mSettingsValues.isSymbolExcludedFromWordSeparators(after.charAt(0))) { return true; } return false; } private boolean sameAsTextBeforeCursor(final CharSequence text) { final CharSequence beforeText = mConnection.getTextBeforeCursor(text.length(), 0); return TextUtils.equals(text, beforeText); Loading Loading @@ -2230,7 +2205,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // Since we just changed languages, we should re-evaluate suggestions with whatever word // we are currently composing. If we are not composing anything, we may want to display // predictions or punctuation signs (which is done by updateBigramPredictions anyway). if (isCursorTouchingWord()) { if (mConnection.isCursorTouchingWord(mSettingsValues)) { mHandler.postUpdateSuggestions(); } else { mHandler.postUpdateBigramPredictions(); Loading
java/src/com/android/inputmethod/latin/RichInputConnection.java +29 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.inputmethod.latin; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.inputmethod.CompletionInfo; Loading @@ -24,6 +25,9 @@ import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.define.ProductionFlag; import java.util.regex.Pattern; /** Loading Loading @@ -297,4 +301,29 @@ public class RichInputConnection { return null; } public boolean isCursorTouchingWord(final SettingsValues settingsValues) { CharSequence before = getTextBeforeCursor(1, 0); CharSequence after = getTextAfterCursor(1, 0); if (!TextUtils.isEmpty(before) && !settingsValues.isWordSeparator(before.charAt(0)) && !settingsValues.isSymbolExcludedFromWordSeparators(before.charAt(0))) { return true; } if (!TextUtils.isEmpty(after) && !settingsValues.isWordSeparator(after.charAt(0)) && !settingsValues.isSymbolExcludedFromWordSeparators(after.charAt(0))) { return true; } return false; } public void removeTrailingSpace() { final CharSequence lastOne = getTextBeforeCursor(1, 0); if (lastOne != null && lastOne.length() == 1 && lastOne.charAt(0) == Keyboard.CODE_SPACE) { deleteSurroundingText(1, 0); if (ProductionFlag.IS_EXPERIMENTAL) { ResearchLogger.latinIME_deleteSurroundingText(1); } } } }