diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java index c41d24529..dc27769ab 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java @@ -64,6 +64,20 @@ public interface KeyboardActionListener { */ public void onTextInput(CharSequence text); + // TODO: Should move this method to some more appropriate interface. + /** + * Called when user started batch input. + */ + public void onStartBatchInput(); + + // TODO: Should move this method to some more appropriate interface. + /** + * Sends a sequence of characters to the listener as batch input. + * + * @param text the sequence of characters to be displayed as composing text. + */ + public void onEndBatchInput(CharSequence text); + /** * Called when user released a finger outside any key. */ @@ -85,6 +99,10 @@ public interface KeyboardActionListener { @Override public void onTextInput(CharSequence text) {} @Override + public void onStartBatchInput() {} + @Override + public void onEndBatchInput(CharSequence text) {} + @Override public void onCancelInput() {} @Override public boolean onCustomRequest(int requestCode) { diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java index be7644fb5..9c8069194 100644 --- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java @@ -57,6 +57,16 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel mListener.onTextInput(text); } + @Override + public void onStartBatchInput() { + mListener.onStartBatchInput(); + } + + @Override + public void onEndBatchInput(CharSequence text) { + mListener.onEndBatchInput(text); + } + @Override public void onCancelInput() { mListener.onCancelInput(); diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index e36a5a795..243a5f64e 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1272,6 +1272,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (mCurrentSettings.isWordSeparator(primaryCode)) { didAutoCorrect = handleSeparator(primaryCode, x, y, spaceState); } else { + if (SPACE_STATE_PHANTOM == spaceState) { + commitTyped(LastComposedWord.NOT_A_SEPARATOR); + } final Keyboard keyboard = mKeyboardSwitcher.getKeyboard(); if (keyboard != null && keyboard.hasProximityCharsCorrection(primaryCode)) { handleCharacter(primaryCode, x, y, spaceState); @@ -1313,6 +1316,31 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen resetComposingState(true /* alsoResetLastComposedWord */); } + @Override + public void onStartBatchInput() { + mConnection.beginBatchEdit(); + if (mWordComposer.isComposingWord()) { + commitTyped(LastComposedWord.NOT_A_SEPARATOR); + mExpectingUpdateSelection = true; + // TODO: Can we remove this? + mSpaceState = SPACE_STATE_PHANTOM; + } + mConnection.endBatchEdit(); + } + + @Override + public void onEndBatchInput(CharSequence text) { + mConnection.beginBatchEdit(); + if (SPACE_STATE_PHANTOM == mSpaceState) { + sendKeyCodePoint(Keyboard.CODE_SPACE); + } + mConnection.setComposingText(text, 1); + mExpectingUpdateSelection = true; + mConnection.endBatchEdit(); + mKeyboardSwitcher.updateShiftState(); + mSpaceState = SPACE_STATE_PHANTOM; + } + private CharSequence specificTldProcessingOnTextInput(final CharSequence text) { if (text.length() <= 1 || text.charAt(0) != Keyboard.CODE_PERIOD || !Character.isLetter(text.charAt(1))) { @@ -1359,7 +1387,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen if (mWordComposer.isComposingWord()) { final int length = mWordComposer.size(); if (length > 0) { - mWordComposer.deleteLast(); + // Immediately after a batch input. + if (SPACE_STATE_PHANTOM == spaceState) { + mWordComposer.reset(); + } else { + mWordComposer.deleteLast(); + } mConnection.setComposingText(getTextWithUnderline(mWordComposer.getTypedWord()), 1); // If we have deleted the last remaining character of a word, then we are not // isComposingWord() any more.