From 16bfac9ff463ad9324d2ccc15817088e1cfd9eab Mon Sep 17 00:00:00 2001
From: Mohammadinamul Sheik <inamul@google.com>
Date: Tue, 16 Sep 2014 12:34:22 -0700
Subject: [PATCH] Add StatsUtils.onAutoCorrection method.

Change-Id: I9547b6c0f082ef7c09b251a6458badb65a841229
---
 .../android/inputmethod/latin/utils/StatsUtils.java |  6 ++++++
 .../com/android/inputmethod/latin/WordComposer.java | 11 ++++++++++-
 .../inputmethod/latin/inputlogic/InputLogic.java    | 13 +++++++++++--
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/java-overridable/src/com/android/inputmethod/latin/utils/StatsUtils.java b/java-overridable/src/com/android/inputmethod/latin/utils/StatsUtils.java
index 38735eccb5..2274852ce1 100644
--- a/java-overridable/src/com/android/inputmethod/latin/utils/StatsUtils.java
+++ b/java-overridable/src/com/android/inputmethod/latin/utils/StatsUtils.java
@@ -20,6 +20,8 @@ import com.android.inputmethod.latin.RichInputMethodManager;
 import com.android.inputmethod.latin.SuggestedWords;
 import com.android.inputmethod.latin.settings.SettingsValues;
 
+import javax.annotation.Nullable;
+
 public final class StatsUtils {
 
     private StatsUtils() {
@@ -63,4 +65,8 @@ public final class StatsUtils {
 
     public static void onStartInputView(int inputType, int displayOrientation, boolean restarting) {
     }
+
+    public static void onAutoCorrection(final String typedWord, final String autoCorrectionWord,
+            final boolean isBatchInput, @Nullable final String dictionaryType) {
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 32d1fe372c..567aa07f14 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -49,6 +49,7 @@ public final class WordComposer {
     private final ArrayList<Event> mEvents;
     private final InputPointers mInputPointers = new InputPointers(MAX_WORD_LENGTH);
     private String mAutoCorrection;
+    private String mAutoCorrectionDictionaryType;
     private boolean mIsResumed;
     private boolean mIsBatchMode;
     // A memory of the last rejected batch mode suggestion, if any. This goes like this: the user
@@ -418,8 +419,9 @@ public final class WordComposer {
     /**
      * Sets the auto-correction for this word.
      */
-    public void setAutoCorrection(final String correction) {
+    public void setAutoCorrection(final String correction, String dictType) {
         mAutoCorrection = correction;
+        mAutoCorrectionDictionaryType = dictType;
     }
 
     /**
@@ -429,6 +431,13 @@ public final class WordComposer {
         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
      */
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index c5e60d6770..0942c078fe 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -612,14 +612,21 @@ public final class InputLogic {
             final SettingsValues settingsValues, final LatinIME.UIHandler handler) {
         if (SuggestedWords.EMPTY != suggestedWords) {
             final String autoCorrection;
+            final String dictType;
             if (suggestedWords.mWillAutoCorrect) {
-                autoCorrection = suggestedWords.getWord(SuggestedWords.INDEX_OF_AUTO_CORRECTION);
+                SuggestedWordInfo info = suggestedWords.getInfo(
+                        SuggestedWords.INDEX_OF_AUTO_CORRECTION);
+                autoCorrection = info.mWord;
+                dictType = info.mSourceDict.mDictType;
             } 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;
             }
-            mWordComposer.setAutoCorrection(autoCorrection);
+            // TODO: Use the SuggestedWordInfo to set the auto correction when
+            // user typed word is available via SuggestedWordInfo.
+            mWordComposer.setAutoCorrection(autoCorrection, dictType);
         }
         mSuggestedWords = suggestedWords;
         final boolean newAutoCorrectionIndicator = suggestedWords.mWillAutoCorrect;
@@ -2100,6 +2107,8 @@ public final class InputLogic {
                 mConnection.commitCorrection(new CorrectionInfo(
                         mConnection.getExpectedSelectionEnd() - autoCorrection.length(),
                         typedWord, autoCorrection));
+                StatsUtils.onAutoCorrection(typedWord, autoCorrection, mWordComposer.isBatchMode(),
+                        mWordComposer.getAutoCorrectionDictionaryTypeOrNull());
             }
         }
     }
-- 
GitLab