From 1a58c47ebe137ee1d5b3a2567b97802946945d38 Mon Sep 17 00:00:00 2001 From: Tom Ouyang Date: Wed, 1 Apr 2015 17:05:37 -0700 Subject: [PATCH] Unlearn word when the user moves the cursor in to correct it. Change-Id: I36358e551d6c51e786b6e09b1a1368ebf3c48f69 --- .../latin/inputlogic/InputLogic.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java index 5b3b28d75..cf4064b72 100644 --- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java @@ -476,6 +476,9 @@ public final class InputLogic { if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) { // If we are in the middle of a recorrection, we need to commit the recorrection // first so that we can insert the batch input at the current cursor position. + // We also need to unlearn the original word that is now being corrected. + unlearnWord(mWordComposer.getTypedWord(), settingsValues, + Constants.EVENT_BACKSPACE); resetEntireInputState(mConnection.getExpectedSelectionStart(), mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); } else if (mWordComposer.isSingleLetter()) { @@ -742,6 +745,9 @@ public final class InputLogic { if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) { // If we are in the middle of a recorrection, we need to commit the recorrection // first so that we can insert the character at the current cursor position. + // We also need to unlearn the original word that is now being corrected. + unlearnWord(mWordComposer.getTypedWord(), inputTransaction.mSettingsValues, + Constants.EVENT_BACKSPACE); resetEntireInputState(mConnection.getExpectedSelectionStart(), mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); } else { @@ -781,6 +787,9 @@ public final class InputLogic { if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) { // If we are in the middle of a recorrection, we need to commit the recorrection // first so that we can insert the character at the current cursor position. + // We also need to unlearn the original word that is now being corrected. + unlearnWord(mWordComposer.getTypedWord(), inputTransaction.mSettingsValues, + Constants.EVENT_BACKSPACE); resetEntireInputState(mConnection.getExpectedSelectionStart(), mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); isComposingWord = false; @@ -847,6 +856,9 @@ public final class InputLogic { if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) { // If we are in the middle of a recorrection, we need to commit the recorrection // first so that we can insert the separator at the current cursor position. + // We also need to unlearn the original word that is now being corrected. + unlearnWord(mWordComposer.getTypedWord(), inputTransaction.mSettingsValues, + Constants.EVENT_BACKSPACE); resetEntireInputState(mConnection.getExpectedSelectionStart(), mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); } @@ -962,6 +974,9 @@ public final class InputLogic { if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) { // If we are in the middle of a recorrection, we need to commit the recorrection // first so that we can remove the character at the current cursor position. + // We also need to unlearn the original word that is now being corrected. + unlearnWord(mWordComposer.getTypedWord(), inputTransaction.mSettingsValues, + Constants.EVENT_BACKSPACE); resetEntireInputState(mConnection.getExpectedSelectionStart(), mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); // When we exit this if-clause, mWordComposer.isComposingWord() will return false. @@ -1046,6 +1061,10 @@ public final class InputLogic { // We should backspace one char and restart suggestion if at the end of a word. if (mConnection.hasSelection()) { // If there is a selection, remove it. + // We also need to unlearn the selected text. + final CharSequence selection = mConnection.getSelectedText(0 /* 0 for no styles */); + unlearnWord(selection.toString(), inputTransaction.mSettingsValues, + Constants.EVENT_BACKSPACE); final int numCharsDeleted = mConnection.getExpectedSelectionEnd() - mConnection.getExpectedSelectionStart(); mConnection.setSelection(mConnection.getExpectedSelectionEnd(),