[ML18] Make WordComposer#getAutoCorrection a word info

Bug: 11230254
Change-Id: I6ad2e7f89862fbfe7af5502961643320c782347f
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 2be99a9..e4e9a3c 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1536,7 +1536,7 @@
 
     private void setSuggestedWords(final SuggestedWords suggestedWords) {
         final SettingsValues currentSettingsValues = mSettings.getCurrent();
-        mInputLogic.setSuggestedWords(suggestedWords, currentSettingsValues, mHandler);
+        mInputLogic.setSuggestedWords(suggestedWords);
         // TODO: Modify this when we support suggestions with hard keyboard
         if (!hasSuggestionStripView()) {
             return;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 157bd15..5eb338e 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -18,6 +18,7 @@
 
 import com.android.inputmethod.event.CombinerChain;
 import com.android.inputmethod.event.Event;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.define.DebugFlags;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
@@ -48,8 +49,7 @@
     // The list of events that served to compose this string.
     private final ArrayList<Event> mEvents;
     private final InputPointers mInputPointers = new InputPointers(MAX_WORD_LENGTH);
-    private String mAutoCorrection;
-    private String mAutoCorrectionDictionaryType;
+    private SuggestedWordInfo mAutoCorrection;
     private boolean mIsResumed;
     private boolean mIsBatchMode;
     // A memory of the last rejected batch mode suggestion, if any. This goes like this: the user
@@ -418,26 +418,18 @@
     /**
      * Sets the auto-correction for this word.
      */
-    public void setAutoCorrection(final String correction, String dictType) {
-        mAutoCorrection = correction;
-        mAutoCorrectionDictionaryType = dictType;
+    public void setAutoCorrection(final SuggestedWordInfo autoCorrection) {
+        mAutoCorrection = autoCorrection;
     }
 
     /**
      * @return the auto-correction for this word, or null if none.
      */
-    public String getAutoCorrectionOrNull() {
+    public SuggestedWordInfo getAutoCorrectionOrNull() {
         return mAutoCorrection;
     }
 
     /**
-     * @return the auto-correction dictionary type or null if none.
-     */
-    public String getAutoCorrectionDictionaryTypeOrNull() {
-        return mAutoCorrectionDictionaryType;
-    }
-
-    /**
      * @return whether we started composing this word by resuming suggestion on an existing string
      */
     public boolean isResumed() {
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 07bfd0d..07f2ed3 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -607,25 +607,21 @@
 
     // TODO: on the long term, this method should become private, but it will be difficult.
     // Especially, how do we deal with InputMethodService.onDisplayCompletions?
-    public void setSuggestedWords(final SuggestedWords suggestedWords,
-            final SettingsValues settingsValues, final LatinIME.UIHandler handler) {
+    public void setSuggestedWords(final SuggestedWords suggestedWords) {
         if (!suggestedWords.isEmpty()) {
-            final String autoCorrection;
-            final String dictType;
+            final SuggestedWordInfo suggestedWordInfo;
             if (suggestedWords.mWillAutoCorrect) {
-                SuggestedWordInfo info = suggestedWords.getInfo(
-                        SuggestedWords.INDEX_OF_AUTO_CORRECTION);
-                autoCorrection = info.mWord;
-                dictType = info.mSourceDict.mDictType;
+                suggestedWordInfo = suggestedWords.getInfo(SuggestedWords.INDEX_OF_AUTO_CORRECTION);
             } else {
                 // We can't use suggestedWords.getWord(SuggestedWords.INDEX_OF_TYPED_WORD)
                 // because it may differ from mWordComposer.mTypedWord.
-                autoCorrection = suggestedWords.mTypedWord;
-                dictType = Dictionary.TYPE_USER_TYPED;
+                suggestedWordInfo = new SuggestedWordInfo(suggestedWords.mTypedWord,
+                        SuggestedWordInfo.MAX_SCORE,
+                        SuggestedWordInfo.KIND_TYPED, Dictionary.DICTIONARY_USER_TYPED,
+                        SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
+                        SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */);
             }
-            // TODO: Use the SuggestedWordInfo to set the auto correction when
-            // user typed word is available via SuggestedWordInfo.
-            mWordComposer.setAutoCorrection(autoCorrection, dictType);
+            mWordComposer.setAutoCorrection(suggestedWordInfo);
         }
         mSuggestedWords = suggestedWords;
         final boolean newAutoCorrectionIndicator = suggestedWords.mWillAutoCorrect;
@@ -2092,19 +2088,19 @@
             // INPUT_STYLE_TYPING.
             performUpdateSuggestionStripSync(settingsValues, SuggestedWords.INPUT_STYLE_TYPING);
         }
-        final String typedAutoCorrection = mWordComposer.getAutoCorrectionOrNull();
+        final SuggestedWordInfo autoCorrectionOrNull = mWordComposer.getAutoCorrectionOrNull();
         final String typedWord = mWordComposer.getTypedWord();
-        final String autoCorrection = (typedAutoCorrection != null)
-                ? typedAutoCorrection : typedWord;
-        if (autoCorrection != null) {
+        final String stringToCommit = (autoCorrectionOrNull != null)
+                ? autoCorrectionOrNull.mWord : typedWord;
+        if (stringToCommit != null) {
             if (TextUtils.isEmpty(typedWord)) {
                 throw new RuntimeException("We have an auto-correction but the typed word "
                         + "is empty? Impossible! I must commit suicide.");
             }
             final boolean isBatchMode = mWordComposer.isBatchMode();
-            commitChosenWord(settingsValues, autoCorrection,
+            commitChosenWord(settingsValues, stringToCommit,
                     LastComposedWord.COMMIT_TYPE_DECIDED_WORD, separator);
-            if (!typedWord.equals(autoCorrection)) {
+            if (!typedWord.equals(stringToCommit)) {
                 // This will make the correction flash for a short while as a visual clue
                 // to the user that auto-correction happened. It has no other effect; in particular
                 // note that this won't affect the text inside the text field AT ALL: it only makes
@@ -2112,13 +2108,14 @@
                 // of the auto-correction flash. At this moment, the "typedWord" argument is
                 // ignored by TextView.
                 mConnection.commitCorrection(new CorrectionInfo(
-                        mConnection.getExpectedSelectionEnd() - autoCorrection.length(),
-                        typedWord, autoCorrection));
-                StatsUtils.onAutoCorrection(typedWord, autoCorrection, isBatchMode,
-                        mWordComposer.getAutoCorrectionDictionaryTypeOrNull());
-                StatsUtils.onWordCommitAutoCorrect(autoCorrection, isBatchMode);
+                        mConnection.getExpectedSelectionEnd() - stringToCommit.length(),
+                        typedWord, stringToCommit));
+                StatsUtils.onAutoCorrection(typedWord, stringToCommit, isBatchMode,
+                        null == autoCorrectionOrNull
+                                ? null : autoCorrectionOrNull.mSourceDict.mDictType);
+                StatsUtils.onWordCommitAutoCorrect(stringToCommit, isBatchMode);
             } else {
-                StatsUtils.onWordCommitUserTyped(autoCorrection, isBatchMode);
+                StatsUtils.onWordCommitUserTyped(stringToCommit, isBatchMode);
             }
         }
     }