Merge "Move some editing methods to RichInputConnection."
This commit is contained in:
commit
aa564e336e
2 changed files with 39 additions and 35 deletions
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -1496,7 +1485,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
return true;
|
||||
} else {
|
||||
if (mSettingsValues.isWeakSpaceStripper(code)) {
|
||||
removeTrailingSpace();
|
||||
mConnection.removeTrailingSpace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
/**
|
||||
|
@ -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…
Reference in a new issue