Change the voice checkboxes into a 3-state list.

Also add a language-switch hint
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 85de322..a19aa3b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -250,13 +250,34 @@
     <string name="ok">OK</string>
 
     <!-- Preferences item for enabling speech input -->
-    <string name="enable_voice">Voice input</string>
+    <string name="voice_input">Voice input</string>
 
-    <!-- Preferences item for speech icon on primary keyboard -->
-    <string name="voice_on_primary">Mic on primary</string>
+    <!-- Array of Voice Input modes -->
+    <string-array name="voice_input_modes">
+        <item>On main keyboard</item>
+        <item>On symbols keyboard</item>
+        <item>Off</item>
+    </string-array>
 
-    <!-- Preferences item summary for speech icon on primary keyboard -->
-    <string name="voice_on_primary_summary">Show the microphone on the primary keyboard</string>
+    <!-- Don't translate -->
+    <string name="voice_mode_main" translatable="false">0</string>
+    <!-- Don't translate -->
+    <string name="voice_mode_symbols" translatable="false">1</string>
+    <!-- Don't translate -->
+    <string name="voice_mode_off"  translatable="false">2</string>
+
+    <string-array name="voice_input_modes_values" translatable="false">
+        <item>@string/voice_mode_main</item>
+        <item>@string/voice_mode_symbols</item>
+        <item>@string/voice_mode_off</item>
+    </string-array>
+
+    <!-- Array of Voice Input modes summary -->
+    <string-array name="voice_input_modes_summary">
+        <item>Mic on main keyboard</item>
+        <item>Mic on symbols keyboard</item>
+        <item>Voice input is disabled</item>
+    </string-array>
 
     <!-- Press the "enter" key after the user speaks. Option on settings.-->
     <string name="auto_submit">Auto submit after voice</string>
@@ -293,4 +314,6 @@
     
     <!-- Title for input language selection screen -->
     <string name="language_selection_title">Select input languages</string>
+    <!-- Title summary for input language selection screen -->
+    <string name="language_selection_summary">Slide your finger across the spacebar to switch</string>
 </resources>
diff --git a/res/xml/prefs.xml b/res/xml/prefs.xml
index 4792c43..29c43cb 100644
--- a/res/xml/prefs.xml
+++ b/res/xml/prefs.xml
@@ -37,24 +37,18 @@
             android:defaultValue="true"
             />
 
-    <CheckBoxPreference
-            android:key="enable_voice_input"
-            android:title="@string/enable_voice"
-            android:persistent="false"
-            android:defaultValue="@bool/voice_input_default"
-            />
-
-    <CheckBoxPreference
-            android:key="voice_on_main"
-            android:title="@string/voice_on_primary"
-            android:summary="@string/voice_on_primary_summary"
+    <ListPreference
+            android:key="voice_mode"
+            android:title="@string/voice_input"
             android:persistent="true"
-            android:dependency="enable_voice_input"
-            android:defaultValue="@bool/voice_input_default"
+            android:entryValues="@array/voice_input_modes_values"
+            android:entries="@array/voice_input_modes"
+            android:defaultValue="@string/voice_mode_main"
             />
 
     <PreferenceScreen
-            android:title="@string/language_selection_title">
+            android:title="@string/language_selection_title"
+            android:summary="@string/language_selection_summary">
         <intent
                 android:action="android.intent.action.MAIN"
                 android:targetPackage="com.android.inputmethod.latin"
diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/src/com/android/inputmethod/latin/LatinIME.java
index 470b004..fb67a61 100644
--- a/src/com/android/inputmethod/latin/LatinIME.java
+++ b/src/com/android/inputmethod/latin/LatinIME.java
@@ -90,9 +90,8 @@
     private static final String PREF_QUICK_FIXES = "quick_fixes";
     private static final String PREF_SHOW_SUGGESTIONS = "show_suggestions";
     private static final String PREF_AUTO_COMPLETE = "auto_complete";
-    private static final String PREF_ENABLE_VOICE = "enable_voice_input";
+    private static final String PREF_VOICE_MODE = "voice_mode";
     private static final String PREF_VOICE_SERVER_URL = "voice_server_url";
-    private static final String PREF_VOICE_MAIN = "voice_on_main";
 
     // Whether or not the user has used voice input before (and thus, whether to show the
     // first-run warning dialog or not).
@@ -1771,8 +1770,9 @@
         mShowSuggestions = sp.getBoolean(PREF_SHOW_SUGGESTIONS, true) & mQuickFixes;
 
         if (VOICE_INSTALLED) {
-            boolean enableVoice = sp.getBoolean(PREF_ENABLE_VOICE, true);
-            boolean voiceOnPrimary = sp.getBoolean(PREF_VOICE_MAIN, true);
+            final String voiceMode = sp.getString(PREF_VOICE_MODE, "");
+            boolean enableVoice = !voiceMode.equals(getString(R.string.voice_mode_off));
+            boolean voiceOnPrimary = voiceMode.equals(getString(R.string.voice_mode_main));
             if (mKeyboardSwitcher != null &&
                     (enableVoice != mEnableVoice || voiceOnPrimary != mVoiceOnPrimary)) {
                 mKeyboardSwitcher.setVoiceMode(enableVoice, voiceOnPrimary);
diff --git a/src/com/android/inputmethod/latin/LatinIMESettings.java b/src/com/android/inputmethod/latin/LatinIMESettings.java
index 14725cb..4dff9c0 100644
--- a/src/com/android/inputmethod/latin/LatinIMESettings.java
+++ b/src/com/android/inputmethod/latin/LatinIMESettings.java
@@ -16,6 +16,9 @@
 
 package com.android.inputmethod.latin;
 
+import java.util.ArrayList;
+import java.util.Locale;
+
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.backup.BackupManager;
@@ -23,6 +26,7 @@
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceGroup;
@@ -31,23 +35,18 @@
 import android.text.AutoText;
 import android.util.Log;
 
-import com.google.android.collect.Lists;
-
 import com.android.inputmethod.voice.SettingsUtil;
 import com.android.inputmethod.voice.VoiceInputLogger;
-
-import java.util.ArrayList;
-import java.util.Locale;
+import com.google.android.collect.Lists;
 
 public class LatinIMESettings extends PreferenceActivity
         implements SharedPreferences.OnSharedPreferenceChangeListener,
-        OnPreferenceClickListener,
         DialogInterface.OnDismissListener {
 
     private static final String QUICK_FIXES_KEY = "quick_fixes";
     private static final String SHOW_SUGGESTIONS_KEY = "show_suggestions";
     private static final String PREDICTION_SETTINGS_KEY = "prediction_settings";
-    private static final String VOICE_SETTINGS_KEY = "enable_voice_input";
+    private static final String VOICE_SETTINGS_KEY = "voice_mode";
     private static final String VOICE_ON_PRIMARY_KEY = "voice_on_main";
     private static final String VOICE_SERVER_KEY = "voice_server_url";
 
@@ -58,12 +57,13 @@
 
     private CheckBoxPreference mQuickFixes;
     private CheckBoxPreference mShowSuggestions;
-    private CheckBoxPreference mVoicePreference;
-    private CheckBoxPreference mVoiceOnPrimary;
+    private ListPreference mVoicePreference;
+    private boolean mVoiceOn;
 
     private VoiceInputLogger mLogger;
 
     private boolean mOkClicked = false;
+    private String mVoiceModeOff;
 
     @Override
     protected void onCreate(Bundle icicle) {
@@ -71,15 +71,12 @@
         addPreferencesFromResource(R.xml.prefs);
         mQuickFixes = (CheckBoxPreference) findPreference(QUICK_FIXES_KEY);
         mShowSuggestions = (CheckBoxPreference) findPreference(SHOW_SUGGESTIONS_KEY);
-        mVoicePreference = (CheckBoxPreference) findPreference(VOICE_SETTINGS_KEY);
-        mVoiceOnPrimary = (CheckBoxPreference) findPreference(VOICE_ON_PRIMARY_KEY);
+        mVoicePreference = (ListPreference) findPreference(VOICE_SETTINGS_KEY);
         SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
         prefs.registerOnSharedPreferenceChangeListener(this);
 
-        mVoicePreference.setOnPreferenceClickListener(this);
-        mVoicePreference.setChecked(prefs.getBoolean(
-                VOICE_SETTINGS_KEY, getResources().getBoolean(R.bool.voice_input_default)));
-
+        mVoiceModeOff = getString(R.string.voice_mode_off);
+        mVoiceOn = !(prefs.getString(VOICE_SETTINGS_KEY, mVoiceModeOff).equals(mVoiceModeOff));
         mLogger = VoiceInputLogger.getLogger(this);
     }
 
@@ -95,12 +92,10 @@
         }
         if (!LatinIME.VOICE_INSTALLED
                 || !RecognitionManager.isRecognitionAvailable(this)) {
-            getPreferenceScreen().removePreference(mVoiceOnPrimary);
             getPreferenceScreen().removePreference(mVoicePreference);
+        } else {
+            updateVoiceModeSummary();
         }
-
-        mVoicePreference.setChecked(
-                getPreferenceManager().getSharedPreferences().getBoolean(VOICE_SETTINGS_KEY, true));
     }
 
     @Override
@@ -110,21 +105,28 @@
         super.onDestroy();
     }
 
-    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
-            String key) {
+    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
         (new BackupManager(this)).dataChanged();
-    }
-
-    public boolean onPreferenceClick(Preference preference) {
-        if (preference == mVoicePreference) {
-            if (mVoicePreference.isChecked()) {
-                mOkClicked = false;
-                showDialog(VOICE_INPUT_CONFIRM_DIALOG);
-            } else {
-                updateVoicePreference();
+        // If turning on voice input, show dialog
+        if (key.equals(VOICE_SETTINGS_KEY) && !mVoiceOn) {
+            if (! prefs.getString(VOICE_SETTINGS_KEY, mVoiceModeOff)
+                    .equals(mVoiceModeOff)) {
+                showVoiceConfirmation();
             }
         }
-        return false;
+        mVoiceOn = !(prefs.getString(VOICE_SETTINGS_KEY, mVoiceModeOff).equals(mVoiceModeOff));
+        updateVoiceModeSummary();
+    }
+
+    private void showVoiceConfirmation() {
+        mOkClicked = false;
+        showDialog(VOICE_INPUT_CONFIRM_DIALOG);
+    }
+
+    private void updateVoiceModeSummary() {
+        mVoicePreference.setSummary(
+                getResources().getStringArray(R.array.voice_input_modes_summary)
+                [mVoicePreference.findIndexOfValue(mVoicePreference.getValue())]);
     }
 
     @Override
@@ -134,7 +136,7 @@
                 DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int whichButton) {
                         if (whichButton == DialogInterface.BUTTON_NEGATIVE) {
-                            mVoicePreference.setChecked(false);
+                            mVoicePreference.setValue(mVoiceModeOff);
                             mLogger.settingsWarningDialogCancel();
                         } else if (whichButton == DialogInterface.BUTTON_POSITIVE) {
                             mOkClicked = true;
@@ -186,19 +188,16 @@
         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.setChecked(false);
+            mVoicePreference.setValue(mVoiceModeOff);
         }
     }
 
     private void updateVoicePreference() {
-        SharedPreferences.Editor editor = getPreferenceManager().getSharedPreferences().edit();
-        boolean isChecked = mVoicePreference.isChecked();
+        boolean isChecked = !mVoicePreference.getValue().equals(mVoiceModeOff);
         if (isChecked) {
             mLogger.voiceInputSettingEnabled();
         } else {
             mLogger.voiceInputSettingDisabled();
         }
-        editor.putBoolean(VOICE_SETTINGS_KEY, isChecked);
-        editor.commit();
     }
 }