[IL10] Move revertCommit to InputLogic
Bug: 8636060 Change-Id: Ia5788b365f05ae880bad957cbef00ecc93abb5d1
This commit is contained in:
parent
69a57bcdcd
commit
060e292628
2 changed files with 67 additions and 61 deletions
|
@ -117,7 +117,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
Suggest.SuggestInitializationListener {
|
Suggest.SuggestInitializationListener {
|
||||||
private static final String TAG = LatinIME.class.getSimpleName();
|
private static final String TAG = LatinIME.class.getSimpleName();
|
||||||
private static final boolean TRACE = false;
|
private static final boolean TRACE = false;
|
||||||
private static boolean DEBUG;
|
// TODO[IL]: Make this private
|
||||||
|
public static boolean DEBUG;
|
||||||
|
|
||||||
private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
|
private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
|
||||||
|
|
||||||
|
@ -2280,65 +2281,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
if (tryResumeSuggestions) mHandler.postResumeSuggestions();
|
if (tryResumeSuggestions) mHandler.postResumeSuggestions();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO[IL]: Move this to InputLogic and make it private again.
|
|
||||||
public void revertCommit() {
|
|
||||||
final String previousWord = mInputLogic.mLastComposedWord.mPrevWord;
|
|
||||||
final String originallyTypedWord = mInputLogic.mLastComposedWord.mTypedWord;
|
|
||||||
final String committedWord = mInputLogic.mLastComposedWord.mCommittedWord;
|
|
||||||
final int cancelLength = committedWord.length();
|
|
||||||
// We want java chars, not codepoints for the following.
|
|
||||||
final int separatorLength = mInputLogic.mLastComposedWord.mSeparatorString.length();
|
|
||||||
// TODO: should we check our saved separator against the actual contents of the text view?
|
|
||||||
final int deleteLength = cancelLength + separatorLength;
|
|
||||||
if (DEBUG) {
|
|
||||||
if (mInputLogic.mWordComposer.isComposingWord()) {
|
|
||||||
throw new RuntimeException("revertCommit, but we are composing a word");
|
|
||||||
}
|
|
||||||
final CharSequence wordBeforeCursor =
|
|
||||||
mInputLogic.mConnection.getTextBeforeCursor(deleteLength, 0).subSequence(0,
|
|
||||||
cancelLength);
|
|
||||||
if (!TextUtils.equals(committedWord, wordBeforeCursor)) {
|
|
||||||
throw new RuntimeException("revertCommit check failed: we thought we were "
|
|
||||||
+ "reverting \"" + committedWord
|
|
||||||
+ "\", but before the cursor we found \"" + wordBeforeCursor + "\"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mInputLogic.mConnection.deleteSurroundingText(deleteLength, 0);
|
|
||||||
if (!TextUtils.isEmpty(previousWord) && !TextUtils.isEmpty(committedWord)) {
|
|
||||||
if (mInputLogic.mSuggest != null) {
|
|
||||||
mInputLogic.mSuggest.cancelAddingUserHistory(previousWord, committedWord);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final String stringToCommit =
|
|
||||||
originallyTypedWord + mInputLogic.mLastComposedWord.mSeparatorString;
|
|
||||||
if (mSettings.getCurrent().mCurrentLanguageHasSpaces) {
|
|
||||||
// For languages with spaces, we revert to the typed string, but the cursor is still
|
|
||||||
// after the separator so we don't resume suggestions. If the user wants to correct
|
|
||||||
// the word, they have to press backspace again.
|
|
||||||
mInputLogic.mConnection.commitText(stringToCommit, 1);
|
|
||||||
} else {
|
|
||||||
// For languages without spaces, we revert the typed string but the cursor is flush
|
|
||||||
// with the typed word, so we need to resume suggestions right away.
|
|
||||||
mInputLogic.mWordComposer.setComposingWord(stringToCommit, previousWord,
|
|
||||||
mKeyboardSwitcher.getKeyboard());
|
|
||||||
mInputLogic.mConnection.setComposingText(stringToCommit, 1);
|
|
||||||
}
|
|
||||||
if (mSettings.isInternal()) {
|
|
||||||
LatinImeLoggerUtils.onSeparator(mInputLogic.mLastComposedWord.mSeparatorString,
|
|
||||||
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
|
|
||||||
}
|
|
||||||
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
|
||||||
ResearchLogger.latinIME_revertCommit(committedWord, originallyTypedWord,
|
|
||||||
mInputLogic.mWordComposer.isBatchMode(),
|
|
||||||
mInputLogic.mLastComposedWord.mSeparatorString);
|
|
||||||
}
|
|
||||||
// Don't restart suggestion yet. We'll restart if the user deletes the
|
|
||||||
// separator.
|
|
||||||
mInputLogic.mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
|
|
||||||
// We have a separator between the word and the cursor: we should show predictions.
|
|
||||||
mHandler.postUpdateSuggestionStrip();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Make this private
|
// TODO: Make this private
|
||||||
// Outside LatinIME, only used by the {@link InputTestsBase} test suite.
|
// Outside LatinIME, only used by the {@link InputTestsBase} test suite.
|
||||||
@UsedForTesting
|
@UsedForTesting
|
||||||
|
|
|
@ -511,7 +511,7 @@ public final class InputLogic {
|
||||||
if (settingsValues.mIsInternal) {
|
if (settingsValues.mIsInternal) {
|
||||||
LatinImeLoggerUtils.onAutoCorrectionCancellation();
|
LatinImeLoggerUtils.onAutoCorrectionCancellation();
|
||||||
}
|
}
|
||||||
mLatinIME.revertCommit();
|
revertCommit(settingsValues, keyboardSwitcher, handler);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mEnteredText != null && mConnection.sameAsTextBeforeCursor(mEnteredText)) {
|
if (mEnteredText != null && mConnection.sameAsTextBeforeCursor(mEnteredText)) {
|
||||||
|
@ -756,6 +756,70 @@ public final class InputLogic {
|
||||||
keyboardSwitcher.updateShiftState();
|
keyboardSwitcher.updateShiftState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverts a previous commit with auto-correction.
|
||||||
|
*
|
||||||
|
* This is triggered upon pressing backspace just after a commit with auto-correction.
|
||||||
|
*
|
||||||
|
* @param settingsValues the current settings values.
|
||||||
|
*/
|
||||||
|
private void revertCommit(final SettingsValues settingsValues,
|
||||||
|
// TODO: remove these arguments
|
||||||
|
final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler) {
|
||||||
|
final String previousWord = mLastComposedWord.mPrevWord;
|
||||||
|
final String originallyTypedWord = mLastComposedWord.mTypedWord;
|
||||||
|
final String committedWord = mLastComposedWord.mCommittedWord;
|
||||||
|
final int cancelLength = committedWord.length();
|
||||||
|
// We want java chars, not codepoints for the following.
|
||||||
|
final int separatorLength = mLastComposedWord.mSeparatorString.length();
|
||||||
|
// TODO: should we check our saved separator against the actual contents of the text view?
|
||||||
|
final int deleteLength = cancelLength + separatorLength;
|
||||||
|
if (LatinIME.DEBUG) {
|
||||||
|
if (mWordComposer.isComposingWord()) {
|
||||||
|
throw new RuntimeException("revertCommit, but we are composing a word");
|
||||||
|
}
|
||||||
|
final CharSequence wordBeforeCursor =
|
||||||
|
mConnection.getTextBeforeCursor(deleteLength, 0).subSequence(0, cancelLength);
|
||||||
|
if (!TextUtils.equals(committedWord, wordBeforeCursor)) {
|
||||||
|
throw new RuntimeException("revertCommit check failed: we thought we were "
|
||||||
|
+ "reverting \"" + committedWord
|
||||||
|
+ "\", but before the cursor we found \"" + wordBeforeCursor + "\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mConnection.deleteSurroundingText(deleteLength, 0);
|
||||||
|
if (!TextUtils.isEmpty(previousWord) && !TextUtils.isEmpty(committedWord)) {
|
||||||
|
if (mSuggest != null) {
|
||||||
|
mSuggest.cancelAddingUserHistory(previousWord, committedWord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final String stringToCommit = originallyTypedWord + mLastComposedWord.mSeparatorString;
|
||||||
|
if (settingsValues.mCurrentLanguageHasSpaces) {
|
||||||
|
// For languages with spaces, we revert to the typed string, but the cursor is still
|
||||||
|
// after the separator so we don't resume suggestions. If the user wants to correct
|
||||||
|
// the word, they have to press backspace again.
|
||||||
|
mConnection.commitText(stringToCommit, 1);
|
||||||
|
} else {
|
||||||
|
// For languages without spaces, we revert the typed string but the cursor is flush
|
||||||
|
// with the typed word, so we need to resume suggestions right away.
|
||||||
|
mWordComposer.setComposingWord(stringToCommit, previousWord,
|
||||||
|
keyboardSwitcher.getKeyboard());
|
||||||
|
mConnection.setComposingText(stringToCommit, 1);
|
||||||
|
}
|
||||||
|
if (settingsValues.mIsInternal) {
|
||||||
|
LatinImeLoggerUtils.onSeparator(mLastComposedWord.mSeparatorString,
|
||||||
|
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
|
||||||
|
}
|
||||||
|
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
||||||
|
ResearchLogger.latinIME_revertCommit(committedWord, originallyTypedWord,
|
||||||
|
mWordComposer.isBatchMode(), mLastComposedWord.mSeparatorString);
|
||||||
|
}
|
||||||
|
// Don't restart suggestion yet. We'll restart if the user deletes the
|
||||||
|
// separator.
|
||||||
|
mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
|
||||||
|
// We have a separator between the word and the cursor: we should show predictions.
|
||||||
|
handler.postUpdateSuggestionStrip();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factor in auto-caps and manual caps and compute the current caps mode.
|
* Factor in auto-caps and manual caps and compute the current caps mode.
|
||||||
* @param keyboardSwitcher the keyboard switcher. Caps mode depends on its mode.
|
* @param keyboardSwitcher the keyboard switcher. Caps mode depends on its mode.
|
||||||
|
|
Loading…
Reference in a new issue