Loading java/src/com/android/inputmethod/event/InputTransaction.java +25 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public class InputTransaction { // Outputs private int mRequiredShiftUpdate = SHIFT_NO_UPDATE; private boolean mRequiresUpdateSuggestions = false; public InputTransaction(final SettingsValues settingsValues, final Event event, final long timestamp, final int spaceState, final int shiftState) { Loading @@ -50,10 +51,34 @@ public class InputTransaction { mShiftState = shiftState; } /** * Indicate that this transaction requires some type of shift update. * @param updateType What type of shift update this requires. */ public void requireShiftUpdate(final int updateType) { mRequiredShiftUpdate = Math.max(mRequiredShiftUpdate, updateType); } /** * Gets what type of shift update this transaction requires. * @return The shift update type. */ public int getRequiredShiftUpdate() { return mRequiredShiftUpdate; } /** * Indicate that this transaction requires updating the suggestions. */ public void setRequiresUpdateSuggestions() { mRequiresUpdateSuggestions = true; } /** * Find out whether this transaction requires updating the suggestions. * @return Whether this transaction requires updating the suggestions. */ public boolean requiresUpdateSuggestions() { return mRequiresUpdateSuggestions; } } java/src/com/android/inputmethod/latin/LatinIME.java +13 −5 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ import android.net.ConnectivityManager; import android.os.Debug; import android.os.IBinder; import android.os.Message; import android.os.SystemClock; import android.preference.PreferenceManager; import android.text.InputType; import android.text.TextUtils; Loading Loading @@ -1230,7 +1229,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final InputTransaction completeInputTransaction = mInputLogic.onCodeInput(mSettings.getCurrent(), event, mKeyboardSwitcher.getKeyboardShiftMode(), mHandler); updateShiftModeAfterInputTransaction(completeInputTransaction.getRequiredShiftUpdate()); updateStateAfterInputTransaction(completeInputTransaction); mKeyboardSwitcher.onCodeInput(codePoint); } Loading Loading @@ -1450,7 +1449,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final InputTransaction completeInputTransaction = mInputLogic.onPickSuggestionManually( mSettings.getCurrent(), index, suggestionInfo, mKeyboardSwitcher.getKeyboardShiftMode(), mHandler); updateShiftModeAfterInputTransaction(completeInputTransaction.getRequiredShiftUpdate()); updateStateAfterInputTransaction(completeInputTransaction); } @Override Loading Loading @@ -1488,8 +1487,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } private void updateShiftModeAfterInputTransaction(final int requiredShiftUpdate) { switch (requiredShiftUpdate) { /** * After an input transaction has been executed, some state must be updated. This includes * the shift state of the keyboard and suggestions. This method looks at the finished * inputTransaction to find out what is necessary and updates the state accordingly. * @param inputTransaction The transaction that has been executed. */ private void updateStateAfterInputTransaction(final InputTransaction inputTransaction) { switch (inputTransaction.getRequiredShiftUpdate()) { case InputTransaction.SHIFT_UPDATE_LATER: mHandler.postUpdateShiftState(); break; Loading @@ -1498,6 +1503,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen break; default: // SHIFT_NO_UPDATE } if (inputTransaction.requiresUpdateSuggestions()) { mHandler.postUpdateSuggestionStrip(); } } private void hapticAndAudioFeedback(final int code, final int repeatCount) { Loading java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +16 −21 Original line number Diff line number Diff line Loading @@ -405,7 +405,7 @@ public final class InputLogic { // A special key, like delete, shift, emoji, or the settings key. switch (event.mKeyCode) { case Constants.CODE_DELETE: handleBackspace(inputTransaction, handler); handleBackspace(inputTransaction); LatinImeLogger.logOnDelete(event.mX, event.mY); break; case Constants.CODE_SHIFT: Loading Loading @@ -674,7 +674,7 @@ public final class InputLogic { commitTyped(inputTransaction.mSettingsValues, LastComposedWord.NOT_A_SEPARATOR); } } handleNonSeparator(inputTransaction.mSettingsValues, inputTransaction, handler); handleNonSeparator(inputTransaction.mSettingsValues, inputTransaction); } return didAutoCorrect; } Loading @@ -685,9 +685,7 @@ public final class InputLogic { * @param inputTransaction The transaction in progress. */ private void handleNonSeparator(final SettingsValues settingsValues, final InputTransaction inputTransaction, // TODO: Remove this argument final LatinIME.UIHandler handler) { final InputTransaction inputTransaction) { final int codePoint = inputTransaction.mEvent.mCodePoint; // TODO: refactor this method to stop flipping isComposingWord around all the time, and // make it shorter (possibly cut into several pieces). Also factor handleNonSpecialCharacter Loading Loading @@ -763,7 +761,7 @@ public final class InputLogic { // In case the "add to dictionary" hint was still displayed. mSuggestionStripViewAccessor.dismissAddToDictionaryHint(); } handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); if (settingsValues.mIsInternal) { LatinImeLoggerUtils.onNonSeparator((char)codePoint, inputTransaction.mEvent.mX, inputTransaction.mEvent.mY); Loading Loading @@ -845,7 +843,7 @@ public final class InputLogic { } startDoubleSpacePeriodCountdown(inputTransaction); handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); } else { if (swapWeakSpace) { swapSwapperAndSpace(inputTransaction); Loading Loading @@ -881,9 +879,7 @@ public final class InputLogic { * Handle a press on the backspace key. * @param inputTransaction The transaction in progress. */ private void handleBackspace(final InputTransaction inputTransaction, // TODO: remove this argument final LatinIME.UIHandler handler) { private void handleBackspace(final InputTransaction inputTransaction) { mSpaceState = SpaceState.NONE; mDeleteCount++; Loading Loading @@ -912,7 +908,7 @@ public final class InputLogic { mWordComposer.deleteLast(inputTransaction.mEvent); } mConnection.setComposingText(getTextWithUnderline(mWordComposer.getTypedWord()), 1); handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); if (!mWordComposer.isComposingWord()) { // If we just removed the last character, auto-caps mode may have changed so we // need to re-evaluate. Loading @@ -923,7 +919,7 @@ public final class InputLogic { if (inputTransaction.mSettingsValues.mIsInternal) { LatinImeLoggerUtils.onAutoCorrectionCancellation(); } revertCommit(inputTransaction.mSettingsValues, handler); revertCommit(inputTransaction); return; } if (mEnteredText != null && mConnection.sameAsTextBeforeCursor(mEnteredText)) { Loading Loading @@ -1402,11 +1398,9 @@ public final class InputLogic { * * This is triggered upon pressing backspace just after a commit with auto-correction. * * @param settingsValues the current settings values. * @param inputTransaction The transaction in progress. */ private void revertCommit(final SettingsValues settingsValues, // TODO: remove this argument final LatinIME.UIHandler handler) { private void revertCommit(final InputTransaction inputTransaction) { final String previousWord = mLastComposedWord.mPrevWord; final CharSequence originallyTypedWord = mLastComposedWord.mTypedWord; final CharSequence committedWord = mLastComposedWord.mCommittedWord; Loading Loading @@ -1450,7 +1444,8 @@ public final class InputLogic { // Given this, we add it to the list of suggestions, otherwise we discard it. if (span instanceof SuggestionSpan) { final SuggestionSpan suggestionSpan = (SuggestionSpan)span; if (!suggestionSpan.getLocale().equals(settingsValues.mLocale.toString())) { if (!suggestionSpan.getLocale().equals( inputTransaction.mSettingsValues.mLocale.toString())) { continue; } for (final String suggestion : suggestionSpan.getSuggestions()) { Loading @@ -1465,11 +1460,11 @@ public final class InputLogic { } } // Add the suggestion list to the list of suggestions. textToCommit.setSpan(new SuggestionSpan(settingsValues.mLocale, textToCommit.setSpan(new SuggestionSpan(inputTransaction.mSettingsValues.mLocale, suggestions.toArray(new String[suggestions.size()]), 0 /* flags */), 0 /* start */, lastCharIndex /* end */, 0 /* flags */); } if (settingsValues.mSpacingAndPunctuations.mCurrentLanguageHasSpaces) { if (inputTransaction.mSettingsValues.mSpacingAndPunctuations.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. Loading @@ -1482,7 +1477,7 @@ public final class InputLogic { mLatinIME.getCoordinatesForCurrentKeyboard(codePoints), previousWord); mConnection.setComposingText(textToCommit, 1); } if (settingsValues.mIsInternal) { if (inputTransaction.mSettingsValues.mIsInternal) { LatinImeLoggerUtils.onSeparator(mLastComposedWord.mSeparatorString, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE); } Loading @@ -1495,7 +1490,7 @@ public final class InputLogic { // separator. mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD; // We have a separator between the word and the cursor: we should show predictions. handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); } /** Loading Loading
java/src/com/android/inputmethod/event/InputTransaction.java +25 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public class InputTransaction { // Outputs private int mRequiredShiftUpdate = SHIFT_NO_UPDATE; private boolean mRequiresUpdateSuggestions = false; public InputTransaction(final SettingsValues settingsValues, final Event event, final long timestamp, final int spaceState, final int shiftState) { Loading @@ -50,10 +51,34 @@ public class InputTransaction { mShiftState = shiftState; } /** * Indicate that this transaction requires some type of shift update. * @param updateType What type of shift update this requires. */ public void requireShiftUpdate(final int updateType) { mRequiredShiftUpdate = Math.max(mRequiredShiftUpdate, updateType); } /** * Gets what type of shift update this transaction requires. * @return The shift update type. */ public int getRequiredShiftUpdate() { return mRequiredShiftUpdate; } /** * Indicate that this transaction requires updating the suggestions. */ public void setRequiresUpdateSuggestions() { mRequiresUpdateSuggestions = true; } /** * Find out whether this transaction requires updating the suggestions. * @return Whether this transaction requires updating the suggestions. */ public boolean requiresUpdateSuggestions() { return mRequiresUpdateSuggestions; } }
java/src/com/android/inputmethod/latin/LatinIME.java +13 −5 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ import android.net.ConnectivityManager; import android.os.Debug; import android.os.IBinder; import android.os.Message; import android.os.SystemClock; import android.preference.PreferenceManager; import android.text.InputType; import android.text.TextUtils; Loading Loading @@ -1230,7 +1229,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final InputTransaction completeInputTransaction = mInputLogic.onCodeInput(mSettings.getCurrent(), event, mKeyboardSwitcher.getKeyboardShiftMode(), mHandler); updateShiftModeAfterInputTransaction(completeInputTransaction.getRequiredShiftUpdate()); updateStateAfterInputTransaction(completeInputTransaction); mKeyboardSwitcher.onCodeInput(codePoint); } Loading Loading @@ -1450,7 +1449,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final InputTransaction completeInputTransaction = mInputLogic.onPickSuggestionManually( mSettings.getCurrent(), index, suggestionInfo, mKeyboardSwitcher.getKeyboardShiftMode(), mHandler); updateShiftModeAfterInputTransaction(completeInputTransaction.getRequiredShiftUpdate()); updateStateAfterInputTransaction(completeInputTransaction); } @Override Loading Loading @@ -1488,8 +1487,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } private void updateShiftModeAfterInputTransaction(final int requiredShiftUpdate) { switch (requiredShiftUpdate) { /** * After an input transaction has been executed, some state must be updated. This includes * the shift state of the keyboard and suggestions. This method looks at the finished * inputTransaction to find out what is necessary and updates the state accordingly. * @param inputTransaction The transaction that has been executed. */ private void updateStateAfterInputTransaction(final InputTransaction inputTransaction) { switch (inputTransaction.getRequiredShiftUpdate()) { case InputTransaction.SHIFT_UPDATE_LATER: mHandler.postUpdateShiftState(); break; Loading @@ -1498,6 +1503,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen break; default: // SHIFT_NO_UPDATE } if (inputTransaction.requiresUpdateSuggestions()) { mHandler.postUpdateSuggestionStrip(); } } private void hapticAndAudioFeedback(final int code, final int repeatCount) { Loading
java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +16 −21 Original line number Diff line number Diff line Loading @@ -405,7 +405,7 @@ public final class InputLogic { // A special key, like delete, shift, emoji, or the settings key. switch (event.mKeyCode) { case Constants.CODE_DELETE: handleBackspace(inputTransaction, handler); handleBackspace(inputTransaction); LatinImeLogger.logOnDelete(event.mX, event.mY); break; case Constants.CODE_SHIFT: Loading Loading @@ -674,7 +674,7 @@ public final class InputLogic { commitTyped(inputTransaction.mSettingsValues, LastComposedWord.NOT_A_SEPARATOR); } } handleNonSeparator(inputTransaction.mSettingsValues, inputTransaction, handler); handleNonSeparator(inputTransaction.mSettingsValues, inputTransaction); } return didAutoCorrect; } Loading @@ -685,9 +685,7 @@ public final class InputLogic { * @param inputTransaction The transaction in progress. */ private void handleNonSeparator(final SettingsValues settingsValues, final InputTransaction inputTransaction, // TODO: Remove this argument final LatinIME.UIHandler handler) { final InputTransaction inputTransaction) { final int codePoint = inputTransaction.mEvent.mCodePoint; // TODO: refactor this method to stop flipping isComposingWord around all the time, and // make it shorter (possibly cut into several pieces). Also factor handleNonSpecialCharacter Loading Loading @@ -763,7 +761,7 @@ public final class InputLogic { // In case the "add to dictionary" hint was still displayed. mSuggestionStripViewAccessor.dismissAddToDictionaryHint(); } handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); if (settingsValues.mIsInternal) { LatinImeLoggerUtils.onNonSeparator((char)codePoint, inputTransaction.mEvent.mX, inputTransaction.mEvent.mY); Loading Loading @@ -845,7 +843,7 @@ public final class InputLogic { } startDoubleSpacePeriodCountdown(inputTransaction); handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); } else { if (swapWeakSpace) { swapSwapperAndSpace(inputTransaction); Loading Loading @@ -881,9 +879,7 @@ public final class InputLogic { * Handle a press on the backspace key. * @param inputTransaction The transaction in progress. */ private void handleBackspace(final InputTransaction inputTransaction, // TODO: remove this argument final LatinIME.UIHandler handler) { private void handleBackspace(final InputTransaction inputTransaction) { mSpaceState = SpaceState.NONE; mDeleteCount++; Loading Loading @@ -912,7 +908,7 @@ public final class InputLogic { mWordComposer.deleteLast(inputTransaction.mEvent); } mConnection.setComposingText(getTextWithUnderline(mWordComposer.getTypedWord()), 1); handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); if (!mWordComposer.isComposingWord()) { // If we just removed the last character, auto-caps mode may have changed so we // need to re-evaluate. Loading @@ -923,7 +919,7 @@ public final class InputLogic { if (inputTransaction.mSettingsValues.mIsInternal) { LatinImeLoggerUtils.onAutoCorrectionCancellation(); } revertCommit(inputTransaction.mSettingsValues, handler); revertCommit(inputTransaction); return; } if (mEnteredText != null && mConnection.sameAsTextBeforeCursor(mEnteredText)) { Loading Loading @@ -1402,11 +1398,9 @@ public final class InputLogic { * * This is triggered upon pressing backspace just after a commit with auto-correction. * * @param settingsValues the current settings values. * @param inputTransaction The transaction in progress. */ private void revertCommit(final SettingsValues settingsValues, // TODO: remove this argument final LatinIME.UIHandler handler) { private void revertCommit(final InputTransaction inputTransaction) { final String previousWord = mLastComposedWord.mPrevWord; final CharSequence originallyTypedWord = mLastComposedWord.mTypedWord; final CharSequence committedWord = mLastComposedWord.mCommittedWord; Loading Loading @@ -1450,7 +1444,8 @@ public final class InputLogic { // Given this, we add it to the list of suggestions, otherwise we discard it. if (span instanceof SuggestionSpan) { final SuggestionSpan suggestionSpan = (SuggestionSpan)span; if (!suggestionSpan.getLocale().equals(settingsValues.mLocale.toString())) { if (!suggestionSpan.getLocale().equals( inputTransaction.mSettingsValues.mLocale.toString())) { continue; } for (final String suggestion : suggestionSpan.getSuggestions()) { Loading @@ -1465,11 +1460,11 @@ public final class InputLogic { } } // Add the suggestion list to the list of suggestions. textToCommit.setSpan(new SuggestionSpan(settingsValues.mLocale, textToCommit.setSpan(new SuggestionSpan(inputTransaction.mSettingsValues.mLocale, suggestions.toArray(new String[suggestions.size()]), 0 /* flags */), 0 /* start */, lastCharIndex /* end */, 0 /* flags */); } if (settingsValues.mSpacingAndPunctuations.mCurrentLanguageHasSpaces) { if (inputTransaction.mSettingsValues.mSpacingAndPunctuations.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. Loading @@ -1482,7 +1477,7 @@ public final class InputLogic { mLatinIME.getCoordinatesForCurrentKeyboard(codePoints), previousWord); mConnection.setComposingText(textToCommit, 1); } if (settingsValues.mIsInternal) { if (inputTransaction.mSettingsValues.mIsInternal) { LatinImeLoggerUtils.onSeparator(mLastComposedWord.mSeparatorString, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE); } Loading @@ -1495,7 +1490,7 @@ public final class InputLogic { // separator. mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD; // We have a separator between the word and the cursor: we should show predictions. handler.postUpdateSuggestionStrip(); inputTransaction.setRequiresUpdateSuggestions(); } /** Loading