From 055265684bdc049db54c3ec2a7fa5404ff36a608 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Thu, 21 Jul 2011 02:18:35 -0700
Subject: [PATCH] Revert "Guard unused voice functions"

This reverts commit 795a712ecf1847251c2da02351e0812a2b5d4bb9.
Bug: 4985273
---
 .../inputmethod/deprecated/VoiceProxy.java    | 125 ++++++++----------
 .../android/inputmethod/latin/LatinIME.java   |  21 ++-
 .../android/inputmethod/latin/Settings.java   |  15 ++-
 3 files changed, 79 insertions(+), 82 deletions(-)

diff --git a/java/src/com/android/inputmethod/deprecated/VoiceProxy.java b/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
index 28646214b8..c82c570ee7 100644
--- a/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
+++ b/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
@@ -17,11 +17,11 @@
 package com.android.inputmethod.deprecated;
 
 import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
-import com.android.inputmethod.compat.InputMethodServiceCompatWrapper;
 import com.android.inputmethod.deprecated.voice.FieldContext;
 import com.android.inputmethod.deprecated.voice.Hints;
 import com.android.inputmethod.deprecated.voice.SettingsUtil;
 import com.android.inputmethod.deprecated.voice.VoiceInput;
+import com.android.inputmethod.deprecated.voice.VoiceInputLogger;
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
 import com.android.inputmethod.latin.EditingUtils;
 import com.android.inputmethod.latin.LatinIME;
@@ -71,8 +71,7 @@ import java.util.Map;
 public class VoiceProxy implements VoiceInput.UiListener {
     private static final VoiceProxy sInstance = new VoiceProxy();
 
-    public static final boolean VOICE_INSTALLED =
-            !InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED;
+    public static final boolean VOICE_INSTALLED = true;
     private static final boolean ENABLE_VOICE_BUTTON = true;
     private static final String PREF_VOICE_MODE = "voice_mode";
     // Whether or not the user has used voice input before (and thus, whether to show the
@@ -126,23 +125,24 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     private void initInternal(LatinIME service, SharedPreferences prefs, UIHandler h) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         mService = service;
         mHandler = h;
         mMinimumVoiceRecognitionViewHeightPixel = Utils.dipToPixel(
                 Utils.getDipScale(service), RECOGNITIONVIEW_MINIMUM_HEIGHT_DIP);
         mImm = InputMethodManagerCompatWrapper.getInstance();
         mSubtypeSwitcher = SubtypeSwitcher.getInstance();
-        mVoiceInput = new VoiceInput(service, this);
-        mHints = new Hints(service, prefs, new Hints.Display() {
-            @Override
-            public void showHint(int viewResource) {
-                View view = LayoutInflater.from(mService).inflate(viewResource, null);
-                mIsShowingHint = true;
-            }
-        });
+        if (VOICE_INSTALLED) {
+            mVoiceInput = new VoiceInput(service, this);
+            mHints = new Hints(service, prefs, new Hints.Display() {
+                @Override
+                public void showHint(int viewResource) {
+                    View view = LayoutInflater.from(mService).inflate(viewResource, null);
+//                    mService.setCandidatesView(view);
+//                    mService.setCandidatesViewShown(true);
+                    mIsShowingHint = true;
+                }
+              });
+        }
     }
 
     private VoiceProxy() {
@@ -170,9 +170,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
 
     public void flushAndLogAllTextModificationCounters(int index, CharSequence suggestion,
             String wordSeparators) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (mAfterVoiceInput && mShowingVoiceSuggestions) {
             mVoiceInput.flushAllTextModificationCounters();
             // send this intent AFTER logging any prior aggregated edits.
@@ -311,9 +308,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void hideVoiceWindow(boolean configurationChanging) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (!configurationChanging) {
             if (mAfterVoiceInput)
                 mVoiceInput.logInputEnded();
@@ -330,9 +324,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void setCursorAndSelection(int newSelEnd, int newSelStart) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (mAfterVoiceInput) {
             mVoiceInput.setCursorPos(newSelEnd);
             mVoiceInput.setSelectionSpan(newSelEnd - newSelStart);
@@ -375,9 +366,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     private void revertVoiceInput() {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         InputConnection ic = mService.getCurrentInputConnection();
         if (ic != null) ic.commitText("", 1);
         mService.updateSuggestions();
@@ -405,9 +393,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void rememberReplacedWord(CharSequence suggestion,String wordSeparators) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (mShowingVoiceSuggestions) {
             // Retain the replaced word in the alternatives array.
             String wordToBeReplaced = EditingUtils.getWordAtCursor(
@@ -434,9 +419,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
      * @return true if an alternative was found, false otherwise.
      */
     public boolean applyVoiceAlternatives(EditingUtils.SelectedWord touching) {
-        if (!VOICE_INSTALLED) {
-            return false;
-        }
         // Search for result in spoken word alternatives
         String selectedWord = touching.mWord.toString().trim();
         if (!mWordToSuggestions.containsKey(selectedWord)) {
@@ -466,9 +448,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void handleBackspace() {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (mAfterVoiceInput) {
             // Don't log delete if the user is pressing delete at
             // the beginning of the text box (hence not deleting anything)
@@ -483,9 +462,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void handleCharacter() {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         commitVoiceInput();
         if (mAfterVoiceInput) {
             // Assume input length is 1. This assumption fails for smiley face insertions.
@@ -494,9 +470,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void handleSeparator() {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         commitVoiceInput();
         if (mAfterVoiceInput){
             // Assume input length is 1. This assumption fails for smiley face insertions.
@@ -512,9 +485,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
 
 
     public void handleVoiceResults(boolean capitalizeFirstWord) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         mAfterVoiceInput = true;
         mImmediatelyAfterVoiceInput = true;
 
@@ -690,9 +660,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void loadSettings(EditorInfo attribute, SharedPreferences sp) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         mHasUsedVoiceInput = sp.getBoolean(PREF_HAS_USED_VOICE_INPUT, false);
         mHasUsedVoiceInputUnsupportedLocale =
                 sp.getBoolean(PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE, false);
@@ -716,9 +683,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void onStartInputView(IBinder keyboardViewToken) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         // If keyboardViewToken is null, keyboardView is not attached but voiceView is attached.
         IBinder windowToken = keyboardViewToken != null ? keyboardViewToken
                 : mVoiceInput.getView().getWindowToken();
@@ -735,18 +699,12 @@ public class VoiceProxy implements VoiceInput.UiListener {
     }
 
     public void onAttachedToWindow() {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         // After onAttachedToWindow, we can show the voice warning dialog. See startListening()
         // above.
         VoiceInputWrapper.getInstance().setVoiceInput(mVoiceInput, mSubtypeSwitcher);
     }
 
     public void onConfigurationChanged(Configuration configuration) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (mRecognizing) {
             switchToRecognitionStatusView(configuration);
         }
@@ -754,9 +712,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
 
     @Override
     public void onCancelVoice() {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (mRecognizing) {
             if (mSubtypeSwitcher.isVoiceMode()) {
                 // If voice mode is being canceled within LatinIME (i.e. time-out or user
@@ -778,9 +733,6 @@ public class VoiceProxy implements VoiceInput.UiListener {
     @Override
     public void onVoiceResults(List<String> candidates,
             Map<String, List<CharSequence>> alternatives) {
-        if (!VOICE_INSTALLED) {
-            return;
-        }
         if (!mRecognizing) {
             return;
         }
@@ -796,22 +748,59 @@ public class VoiceProxy implements VoiceInput.UiListener {
                 switcher.getEnabledLanguages());
     }
 
-    // TODO: make this private (proguard issue)
-    public static class VoiceResults {
+    private class VoiceResults {
         List<String> candidates;
         Map<String, List<CharSequence>> alternatives;
     }
 
+    public static class VoiceLoggerWrapper {
+        private static final VoiceLoggerWrapper sLoggerWrapperInstance = new VoiceLoggerWrapper();
+        private VoiceInputLogger mLogger;
+
+        public static VoiceLoggerWrapper getInstance(Context context) {
+            if (sLoggerWrapperInstance.mLogger == null) {
+                // Not thread safe, but it's ok.
+                sLoggerWrapperInstance.mLogger = VoiceInputLogger.getLogger(context);
+            }
+            return sLoggerWrapperInstance;
+        }
+
+        // private for the singleton
+        private VoiceLoggerWrapper() {
+        }
+
+        public void settingsWarningDialogCancel() {
+            mLogger.settingsWarningDialogCancel();
+        }
+
+        public void settingsWarningDialogOk() {
+            mLogger.settingsWarningDialogOk();
+        }
+
+        public void settingsWarningDialogShown() {
+            mLogger.settingsWarningDialogShown();
+        }
+
+        public void settingsWarningDialogDismissed() {
+            mLogger.settingsWarningDialogDismissed();
+        }
+
+        public void voiceInputSettingEnabled(boolean enabled) {
+            if (enabled) {
+                mLogger.voiceInputSettingEnabled();
+            } else {
+                mLogger.voiceInputSettingDisabled();
+            }
+        }
+    }
+
     public static class VoiceInputWrapper {
         private static final VoiceInputWrapper sInputWrapperInstance = new VoiceInputWrapper();
         private VoiceInput mVoiceInput;
         public static VoiceInputWrapper getInstance() {
             return sInputWrapperInstance;
         }
-        private void setVoiceInput(VoiceInput voiceInput, SubtypeSwitcher switcher) {
-            if (!VOICE_INSTALLED) {
-                return;
-            }
+        public void setVoiceInput(VoiceInput voiceInput, SubtypeSwitcher switcher) {
             if (mVoiceInput == null && voiceInput != null) {
                 mVoiceInput = voiceInput;
             }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index e5d2f75789..5d8fd34110 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -542,15 +542,12 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
 
         TextEntryState.reset();
 
-        if (attribute != null) {
-            // Most such things we decide below in initializeInputAttributesAndGetMode, but we need
-            // to know now whether this is a password text field, because we need to know now
-            // whether we want to enable the voice button.
-            mVoiceProxy.resetVoiceStates(
-                    InputTypeCompatUtils.isPasswordInputType(attribute.inputType)
-                            || InputTypeCompatUtils.isVisiblePasswordInputType(
-                                    attribute.inputType));
-        }
+        // Most such things we decide below in initializeInputAttributesAndGetMode, but we need to
+        // know now whether this is a password text field, because we need to know now whether we
+        // want to enable the voice button.
+        final VoiceProxy voiceIme = mVoiceProxy;
+        voiceIme.resetVoiceStates(InputTypeCompatUtils.isPasswordInputType(attribute.inputType)
+                || InputTypeCompatUtils.isVisiblePasswordInputType(attribute.inputType));
 
         initializeInputAttributes(attribute);
 
@@ -576,8 +573,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
 
         if (mSubtypeSwitcher.isKeyboardMode()) {
             switcher.loadKeyboard(attribute,
-                    mSubtypeSwitcher.isShortcutImeEnabled() && mVoiceProxy.isVoiceButtonEnabled(),
-                    mVoiceProxy.isVoiceButtonOnPrimary());
+                    mSubtypeSwitcher.isShortcutImeEnabled() && voiceIme.isVoiceButtonEnabled(),
+                    voiceIme.isVoiceButtonOnPrimary());
             switcher.updateShiftState();
         }
 
@@ -595,7 +592,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
         // If we just entered a text field, maybe it has some old text that requires correction
         mRecorrection.checkRecorrectionOnStart();
 
-        mVoiceProxy.onStartInputView(inputView.getWindowToken());
+        voiceIme.onStartInputView(inputView.getWindowToken());
 
         if (TRACE) Debug.startMethodTracing("/data/trace/latinime");
     }
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index e665ee2f53..54f0a1b4de 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -304,6 +304,8 @@ public class Settings extends InputMethodSettingsActivity
 
     private AlertDialog mDialog;
 
+    private VoiceProxy.VoiceLoggerWrapper mVoiceLogger;
+
     private boolean mOkClicked = false;
     private String mVoiceModeOff;
 
@@ -347,6 +349,7 @@ public class Settings extends InputMethodSettingsActivity
         mVoiceModeOff = getString(R.string.voice_mode_off);
         mVoiceOn = !(prefs.getString(PREF_VOICE_SETTINGS_KEY, mVoiceModeOff)
                 .equals(mVoiceModeOff));
+        mVoiceLogger = VoiceProxy.VoiceLoggerWrapper.getInstance(context);
 
         mAutoCorrectionThreshold = (ListPreference) findPreference(PREF_AUTO_CORRECTION_THRESHOLD);
         mBigramSuggestion = (CheckBoxPreference) findPreference(PREF_BIGRAM_SUGGESTIONS);
@@ -444,7 +447,6 @@ public class Settings extends InputMethodSettingsActivity
         }
     }
 
-    @SuppressWarnings("unused")
     @Override
     public void onResume() {
         super.onResume();
@@ -539,7 +541,6 @@ public class Settings extends InputMethodSettingsActivity
                 [mVoicePreference.findIndexOfValue(mVoicePreference.getValue())]);
     }
 
-    @Override
     protected Dialog onCreateDialog(int id) {
         switch (id) {
             case VOICE_INPUT_CONFIRM_DIALOG:
@@ -548,9 +549,12 @@ public class Settings extends InputMethodSettingsActivity
                     public void onClick(DialogInterface dialog, int whichButton) {
                         if (whichButton == DialogInterface.BUTTON_NEGATIVE) {
                             mVoicePreference.setValue(mVoiceModeOff);
+                            mVoiceLogger.settingsWarningDialogCancel();
                         } else if (whichButton == DialogInterface.BUTTON_POSITIVE) {
                             mOkClicked = true;
+                            mVoiceLogger.settingsWarningDialogOk();
                         }
+                        updateVoicePreference();
                     }
                 };
                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivityInternal())
@@ -579,6 +583,7 @@ public class Settings extends InputMethodSettingsActivity
                 AlertDialog dialog = builder.create();
                 mDialog = dialog;
                 dialog.setOnDismissListener(this);
+                mVoiceLogger.settingsWarningDialogShown();
                 return dialog;
             default:
                 Log.e(TAG, "unknown dialog " + id);
@@ -588,10 +593,16 @@ public class Settings extends InputMethodSettingsActivity
 
     @Override
     public void onDismiss(DialogInterface dialog) {
+        mVoiceLogger.settingsWarningDialogDismissed();
         if (!mOkClicked) {
             // This assumes that onPreferenceClick gets called first, and this if the user
             // agreed after the warning, we set the mOkClicked value to true.
             mVoicePreference.setValue(mVoiceModeOff);
         }
     }
+
+    private void updateVoicePreference() {
+        boolean isChecked = !mVoicePreference.getValue().equals(mVoiceModeOff);
+        mVoiceLogger.voiceInputSettingEnabled(isChecked);
+    }
 }
-- 
GitLab