DO NOT MERGE: Logging for the VoiceSearch alternates

Log which voice-based alternates were selected, and what
word in the recognition results were replaced.
This change was commited in master, but was never
merged into GB.

Bug: 3243768
Change-Id: I8f624517990cc77c5cd714bd68ce32ac1b64489f
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index b6fee11..ffca22e 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1864,13 +1864,14 @@
     }
 
     public void pickSuggestionManually(int index, CharSequence suggestion) {
-        if (mAfterVoiceInput && mShowingVoiceSuggestions) mVoiceInput.logNBestChoose(index);
         List<CharSequence> suggestions = mCandidateView.getSuggestions();
 
-        if (mAfterVoiceInput && !mShowingVoiceSuggestions) {
+        if (mAfterVoiceInput && mShowingVoiceSuggestions) {
             mVoiceInput.flushAllTextModificationCounters();
             // send this intent AFTER logging any prior aggregated edits.
-            mVoiceInput.logTextModifiedByChooseSuggestion(suggestion.length());
+            mVoiceInput.logTextModifiedByChooseSuggestion(suggestion.toString(), index,
+                                                          mWordSeparators,
+                                                          getCurrentInputConnection());
         }
 
         final boolean correcting = TextEntryState.isCorrecting();
diff --git a/java/src/com/android/inputmethod/voice/VoiceInput.java b/java/src/com/android/inputmethod/voice/VoiceInput.java
index f24c180..4c54dd3 100644
--- a/java/src/com/android/inputmethod/voice/VoiceInput.java
+++ b/java/src/com/android/inputmethod/voice/VoiceInput.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.voice;
 
+import com.android.inputmethod.latin.EditingUtil;
 import com.android.inputmethod.latin.R;
 
 import android.content.ContentResolver;
@@ -30,6 +31,7 @@
 import android.speech.SpeechRecognizer;
 import android.speech.RecognizerIntent;
 import android.util.Log;
+import android.view.inputmethod.InputConnection;
 import android.view.View;
 import android.view.View.OnClickListener;
 
@@ -423,8 +425,14 @@
         mLogger.textModifiedByTypingDeletion(length);
     }
 
-    public void logTextModifiedByChooseSuggestion(int length) {
-        mLogger.textModifiedByChooseSuggestion(length);
+    public void logTextModifiedByChooseSuggestion(String suggestion, int index,
+                                                  String wordSeparators, InputConnection ic) {
+        EditingUtil.Range range = new EditingUtil.Range();
+        String wordToBeReplaced = EditingUtil.getWordAtCursor(ic, wordSeparators, range);
+        // If we enable phrase-based alternatives, only send up the first word
+        // in suggestion and wordToBeReplaced.
+        mLogger.textModifiedByChooseSuggestion(suggestion.length(), wordToBeReplaced.length(),
+                                               index, wordToBeReplaced, suggestion);
     }
 
     public void logKeyboardWarningDialogShown() {
@@ -455,10 +463,6 @@
         mLogger.voiceInputDelivered(length);
     }
 
-    public void logNBestChoose(int index) {
-        mLogger.nBestChoose(index);
-    }
-
     public void logInputEnded() {
         mLogger.inputEnded();
     }
diff --git a/java/src/com/android/inputmethod/voice/VoiceInputLogger.java b/java/src/com/android/inputmethod/voice/VoiceInputLogger.java
index 188d137..0d21133 100644
--- a/java/src/com/android/inputmethod/voice/VoiceInputLogger.java
+++ b/java/src/com/android/inputmethod/voice/VoiceInputLogger.java
@@ -205,22 +205,20 @@
         mContext.sendBroadcast(i);
     }
 
-    public void textModifiedByChooseSuggestion(int length) {
+    public void textModifiedByChooseSuggestion(int suggestionLength, int replacedPhraseLength,
+                                               int index, String before, String after) {
         setHasLoggingInfo(true);
         Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
-        i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
         i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
-                LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_CHOOSE_SUGGESTION);
+                   LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_CHOOSE_SUGGESTION);
+        i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, suggestionLength);
+        i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_REPLACED_LENGTH, replacedPhraseLength);
+        i.putExtra(LoggingEvents.VoiceIme.EXTRA_N_BEST_CHOOSE_INDEX, index);
+        i.putExtra(LoggingEvents.VoiceIme.EXTRA_BEFORE_N_BEST_CHOOSE, before);
+        i.putExtra(LoggingEvents.VoiceIme.EXTRA_AFTER_N_BEST_CHOOSE, after);
         mContext.sendBroadcast(i);
     }
 
-    public void nBestChoose(int index) {
-        setHasLoggingInfo(true);
-        Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.N_BEST_CHOOSE);
-        i.putExtra(LoggingEvents.VoiceIme.EXTRA_N_BEST_CHOOSE_INDEX, index);
-        mContext.sendBroadcast(i);
-    }
-    
     public void inputEnded() {
         setHasLoggingInfo(true);
         mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.INPUT_ENDED));