Preserve punctuation character after canceling auto correction

Bug: 3230708
Change-Id: I939ca19c9c08d9b79658261b1e654a66af5cc493
main
Tadashi G. Takaoka 2011-01-13 17:14:27 +09:00
parent 67e08bb0fb
commit 504e8d5171
1 changed files with 21 additions and 9 deletions

View File

@ -1132,14 +1132,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private void handleBackspace() { private void handleBackspace() {
if (mVoiceConnector.logAndRevertVoiceInput()) return; if (mVoiceConnector.logAndRevertVoiceInput()) return;
boolean deleteChar = false;
InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
final InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
ic.beginBatchEdit(); ic.beginBatchEdit();
mVoiceConnector.handleBackspace(); mVoiceConnector.handleBackspace();
boolean deleteChar = false;
if (mHasValidSuggestions) { if (mHasValidSuggestions) {
final int length = mComposing.length(); final int length = mComposing.length();
if (length > 0) { if (length > 0) {
@ -1157,12 +1157,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
deleteChar = true; deleteChar = true;
} }
mHandler.postUpdateShiftKeyState(); mHandler.postUpdateShiftKeyState();
TextEntryState.backspace(); TextEntryState.backspace();
if (TextEntryState.getState() == TextEntryState.State.UNDO_COMMIT) { if (TextEntryState.getState() == TextEntryState.State.UNDO_COMMIT) {
revertLastWord(deleteChar); revertLastWord(deleteChar);
ic.endBatchEdit(); ic.endBatchEdit();
return; return;
} else if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) { }
if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) {
ic.deleteSurroundingText(mEnteredText.length(), 0); ic.deleteSurroundingText(mEnteredText.length(), 0);
} else if (deleteChar) { } else if (deleteChar) {
if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) { if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
@ -1796,16 +1799,25 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
final InputConnection ic = getCurrentInputConnection(); final InputConnection ic = getCurrentInputConnection();
mHasValidSuggestions = true; mHasValidSuggestions = true;
mJustReverted = true; mJustReverted = true;
final CharSequence punctuation = ic.getTextBeforeCursor(1, 0);
if (deleteChar) ic.deleteSurroundingText(1, 0); if (deleteChar) ic.deleteSurroundingText(1, 0);
int toDelete = mCommittedLength; int toDelete = mCommittedLength;
CharSequence toTheLeft = ic.getTextBeforeCursor(mCommittedLength, 0); final CharSequence toTheLeft = ic.getTextBeforeCursor(mCommittedLength, 0);
if (toTheLeft != null && toTheLeft.length() > 0 if (!TextUtils.isEmpty(toTheLeft) && isWordSeparator(toTheLeft.charAt(0))) {
&& isWordSeparator(toTheLeft.charAt(0))) {
toDelete--; toDelete--;
} }
ic.deleteSurroundingText(toDelete, 0); ic.deleteSurroundingText(toDelete, 0);
ic.setComposingText(mComposing, 1); if (deleteChar) {
TextEntryState.backspace(); ic.commitText(mComposing, 1);
TextEntryState.acceptedTyped(mComposing);
if (!TextUtils.isEmpty(punctuation) && isWordSeparator(punctuation.charAt(0))) {
ic.commitText(punctuation, 1);
TextEntryState.typedCharacter(punctuation.charAt(0), true);
}
} else {
ic.setComposingText(mComposing, 1);
TextEntryState.backspace();
}
mHandler.postUpdateSuggestions(); mHandler.postUpdateSuggestions();
} else { } else {
sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL); sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);