Loading java/src/com/android/inputmethod/latin/LatinIME.java +24 −6 Original line number Diff line number Diff line Loading @@ -201,8 +201,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private static final int MSG_RESET_CACHES = 7; private static final int MSG_WAIT_FOR_DICTIONARY_LOAD = 8; private static final int MSG_DEALLOCATE_MEMORY = 9; private static final int MSG_RESUME_SUGGESTIONS_FOR_START_INPUT = 10; // Update this when adding new messages private static final int MSG_LAST = MSG_DEALLOCATE_MEMORY; private static final int MSG_LAST = MSG_RESUME_SUGGESTIONS_FOR_START_INPUT; private static final int ARG1_NOT_GESTURE_INPUT = 0; private static final int ARG1_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT = 1; Loading Loading @@ -257,7 +258,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen break; case MSG_RESUME_SUGGESTIONS: latinIme.mInputLogic.restartSuggestionsOnWordTouchedByCursor( latinIme.mSettings.getCurrent(), latinIme.mSettings.getCurrent(), false /* forStartInput */, latinIme.mKeyboardSwitcher.getCurrentKeyboardScriptId()); break; case MSG_RESUME_SUGGESTIONS_FOR_START_INPUT: latinIme.mInputLogic.restartSuggestionsOnWordTouchedByCursor( latinIme.mSettings.getCurrent(), true /* forStartInput */, latinIme.mKeyboardSwitcher.getCurrentKeyboardScriptId()); break; case MSG_REOPEN_DICTIONARIES: Loading Loading @@ -303,7 +309,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen sendMessage(obtainMessage(MSG_REOPEN_DICTIONARIES)); } public void postResumeSuggestions(final boolean shouldDelay) { private void postResumeSuggestionsInternal(final boolean shouldDelay, final boolean forStartInput) { final LatinIME latinIme = getOwnerInstance(); if (latinIme == null) { return; Loading @@ -312,14 +319,25 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return; } removeMessages(MSG_RESUME_SUGGESTIONS); removeMessages(MSG_RESUME_SUGGESTIONS_FOR_START_INPUT); final int message = forStartInput ? MSG_RESUME_SUGGESTIONS_FOR_START_INPUT : MSG_RESUME_SUGGESTIONS; if (shouldDelay) { sendMessageDelayed(obtainMessage(MSG_RESUME_SUGGESTIONS), sendMessageDelayed(obtainMessage(message), mDelayInMillisecondsToUpdateSuggestions); } else { sendMessage(obtainMessage(MSG_RESUME_SUGGESTIONS)); sendMessage(obtainMessage(message)); } } public void postResumeSuggestions(final boolean shouldDelay) { postResumeSuggestionsInternal(shouldDelay, false /* forStartInput */); } public void postResumeSuggestionsForStartInput(final boolean shouldDelay) { postResumeSuggestionsInternal(shouldDelay, true /* forStartInput */); } public void postResetCaches(final boolean tryResumeSuggestions, final int remainingTries) { removeMessages(MSG_RESET_CACHES); sendMessage(obtainMessage(MSG_RESET_CACHES, tryResumeSuggestions ? 1 : 0, Loading Loading @@ -969,7 +987,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // initialSelStart and initialSelEnd sometimes are lying. Make a best effort to // work around this bug. mInputLogic.mConnection.tryFixLyingCursorPosition(); mHandler.postResumeSuggestions(true /* shouldDelay */); mHandler.postResumeSuggestionsForStartInput(true /* shouldDelay */); needToCallLoadKeyboardLater = false; } } else { Loading java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +9 −5 Original line number Diff line number Diff line Loading @@ -1178,14 +1178,13 @@ public final class InputLogic { StatsUtils.onBackspacePressed(totalDeletedLength); } } if (inputTransaction.mSettingsValues .isSuggestionsEnabledPerUserSettings() if (inputTransaction.mSettingsValues.isSuggestionsEnabledPerUserSettings() && inputTransaction.mSettingsValues.mSpacingAndPunctuations .mCurrentLanguageHasSpaces && !mConnection.isCursorFollowedByWordCharacter( inputTransaction.mSettingsValues.mSpacingAndPunctuations)) { restartSuggestionsOnWordTouchedByCursor(inputTransaction.mSettingsValues, currentKeyboardScriptId); false /* forStartInput */, currentKeyboardScriptId); } } } Loading Loading @@ -1441,10 +1440,13 @@ public final class InputLogic { * do nothing. * * @param settingsValues the current values of the settings. * suggestions in the suggestion list. * @param forStartInput whether we're doing this in answer to starting the input (as opposed * to a cursor move, for example). In ICS, there is a platform bug that we need to work * around only when we come here at input start time. */ // TODO: make this private. public void restartSuggestionsOnWordTouchedByCursor(final SettingsValues settingsValues, final boolean forStartInput, // TODO: remove this argument, put it into settingsValues final int currentKeyboardScriptId) { // HACK: We may want to special-case some apps that exhibit bad behavior in case of Loading Loading @@ -1520,7 +1522,9 @@ public final class InputLogic { mLatinIME.getCoordinatesForCurrentKeyboard(codePoints)); mWordComposer.setCursorPositionWithinWord( typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor)); if (forStartInput) { mConnection.maybeMoveTheCursorAroundAndRestoreToWorkaroundABug(); } mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor, expectedCursorPosition + range.getNumberOfCharsInWordAfterCursor()); if (suggestions.size() <= 1) { Loading Loading
java/src/com/android/inputmethod/latin/LatinIME.java +24 −6 Original line number Diff line number Diff line Loading @@ -201,8 +201,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private static final int MSG_RESET_CACHES = 7; private static final int MSG_WAIT_FOR_DICTIONARY_LOAD = 8; private static final int MSG_DEALLOCATE_MEMORY = 9; private static final int MSG_RESUME_SUGGESTIONS_FOR_START_INPUT = 10; // Update this when adding new messages private static final int MSG_LAST = MSG_DEALLOCATE_MEMORY; private static final int MSG_LAST = MSG_RESUME_SUGGESTIONS_FOR_START_INPUT; private static final int ARG1_NOT_GESTURE_INPUT = 0; private static final int ARG1_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT = 1; Loading Loading @@ -257,7 +258,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen break; case MSG_RESUME_SUGGESTIONS: latinIme.mInputLogic.restartSuggestionsOnWordTouchedByCursor( latinIme.mSettings.getCurrent(), latinIme.mSettings.getCurrent(), false /* forStartInput */, latinIme.mKeyboardSwitcher.getCurrentKeyboardScriptId()); break; case MSG_RESUME_SUGGESTIONS_FOR_START_INPUT: latinIme.mInputLogic.restartSuggestionsOnWordTouchedByCursor( latinIme.mSettings.getCurrent(), true /* forStartInput */, latinIme.mKeyboardSwitcher.getCurrentKeyboardScriptId()); break; case MSG_REOPEN_DICTIONARIES: Loading Loading @@ -303,7 +309,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen sendMessage(obtainMessage(MSG_REOPEN_DICTIONARIES)); } public void postResumeSuggestions(final boolean shouldDelay) { private void postResumeSuggestionsInternal(final boolean shouldDelay, final boolean forStartInput) { final LatinIME latinIme = getOwnerInstance(); if (latinIme == null) { return; Loading @@ -312,14 +319,25 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return; } removeMessages(MSG_RESUME_SUGGESTIONS); removeMessages(MSG_RESUME_SUGGESTIONS_FOR_START_INPUT); final int message = forStartInput ? MSG_RESUME_SUGGESTIONS_FOR_START_INPUT : MSG_RESUME_SUGGESTIONS; if (shouldDelay) { sendMessageDelayed(obtainMessage(MSG_RESUME_SUGGESTIONS), sendMessageDelayed(obtainMessage(message), mDelayInMillisecondsToUpdateSuggestions); } else { sendMessage(obtainMessage(MSG_RESUME_SUGGESTIONS)); sendMessage(obtainMessage(message)); } } public void postResumeSuggestions(final boolean shouldDelay) { postResumeSuggestionsInternal(shouldDelay, false /* forStartInput */); } public void postResumeSuggestionsForStartInput(final boolean shouldDelay) { postResumeSuggestionsInternal(shouldDelay, true /* forStartInput */); } public void postResetCaches(final boolean tryResumeSuggestions, final int remainingTries) { removeMessages(MSG_RESET_CACHES); sendMessage(obtainMessage(MSG_RESET_CACHES, tryResumeSuggestions ? 1 : 0, Loading Loading @@ -969,7 +987,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // initialSelStart and initialSelEnd sometimes are lying. Make a best effort to // work around this bug. mInputLogic.mConnection.tryFixLyingCursorPosition(); mHandler.postResumeSuggestions(true /* shouldDelay */); mHandler.postResumeSuggestionsForStartInput(true /* shouldDelay */); needToCallLoadKeyboardLater = false; } } else { Loading
java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +9 −5 Original line number Diff line number Diff line Loading @@ -1178,14 +1178,13 @@ public final class InputLogic { StatsUtils.onBackspacePressed(totalDeletedLength); } } if (inputTransaction.mSettingsValues .isSuggestionsEnabledPerUserSettings() if (inputTransaction.mSettingsValues.isSuggestionsEnabledPerUserSettings() && inputTransaction.mSettingsValues.mSpacingAndPunctuations .mCurrentLanguageHasSpaces && !mConnection.isCursorFollowedByWordCharacter( inputTransaction.mSettingsValues.mSpacingAndPunctuations)) { restartSuggestionsOnWordTouchedByCursor(inputTransaction.mSettingsValues, currentKeyboardScriptId); false /* forStartInput */, currentKeyboardScriptId); } } } Loading Loading @@ -1441,10 +1440,13 @@ public final class InputLogic { * do nothing. * * @param settingsValues the current values of the settings. * suggestions in the suggestion list. * @param forStartInput whether we're doing this in answer to starting the input (as opposed * to a cursor move, for example). In ICS, there is a platform bug that we need to work * around only when we come here at input start time. */ // TODO: make this private. public void restartSuggestionsOnWordTouchedByCursor(final SettingsValues settingsValues, final boolean forStartInput, // TODO: remove this argument, put it into settingsValues final int currentKeyboardScriptId) { // HACK: We may want to special-case some apps that exhibit bad behavior in case of Loading Loading @@ -1520,7 +1522,9 @@ public final class InputLogic { mLatinIME.getCoordinatesForCurrentKeyboard(codePoints)); mWordComposer.setCursorPositionWithinWord( typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor)); if (forStartInput) { mConnection.maybeMoveTheCursorAroundAndRestoreToWorkaroundABug(); } mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor, expectedCursorPosition + range.getNumberOfCharsInWordAfterCursor()); if (suggestions.size() <= 1) { Loading