Exposing the ability to select a default TTS engine to the
user by adding it into Settings.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8ccb8bf..c63ad6e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2012,6 +2012,10 @@
     <string name="use_default_tts_settings_summary">Default settings below override application settings</string>
     <!-- On main TTS Settings screen, section header for default TTS settings -->
     <string name="tts_default_settings_section">Default settings</string>
+    <!-- On main TTS Settings screen, in default settings section, setting default synthesis engine for synthesized voice -->
+    <string name="tts_default_synth_title">Default Engine</string>
+    <!-- On main TTS Settings screen, summary for default synthesis engine for synthesized voice -->
+    <string name="tts_default_synth_summary">Sets the speech synthesis engine to be used for spoken text</string>
     <!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice -->
     <string name="tts_default_rate_title">Speech rate</string>
     <!-- On main TTS Settings screen, summary for default speech rate for synthesized voice -->
diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index d94d575..6b1a843 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -37,6 +37,11 @@
                     
         <PreferenceCategory
             android:title="@string/tts_default_settings_section">
+            <ListPreference
+                android:key="tts_default_synth"
+                android:title="@string/tts_default_synth_title"
+                android:summary="@string/tts_default_synth_summary"
+                android:persistent="false" />
             
             <ListPreference
                 android:key="tts_default_rate"
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index f60d0f2..edc09e6 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -55,6 +55,7 @@
     private static final String KEY_TTS_DEFAULT_LANG = "tts_default_lang";
     private static final String KEY_TTS_DEFAULT_COUNTRY = "tts_default_country";
     private static final String KEY_TTS_DEFAULT_VARIANT = "tts_default_variant";
+    private static final String KEY_TTS_DEFAULT_SYNTH = "tts_default_synth";
     // TODO move default Locale values to TextToSpeech.Engine
     private static final String DEFAULT_LANG_VAL = "eng";
     private static final String DEFAULT_COUNTRY_VAL = "USA";
@@ -70,6 +71,7 @@
     private CheckBoxPreference mUseDefaultPref = null;
     private ListPreference     mDefaultRatePref = null;
     private ListPreference     mDefaultLocPref = null;
+    private ListPreference     mDefaultSynthPref = null;
     private String             mDefaultLanguage = null;
     private String             mDefaultCountry = null;
     private String             mDefaultLocVariant = null;
@@ -156,7 +158,10 @@
         mUseDefaultPref.setChecked(useDefault == 1);
         mUseDefaultPref.setOnPreferenceChangeListener(this);
 
-        // Default engine
+        // Default synthesis engine
+        mDefaultSynthPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
+        loadEngines();
+        mDefaultSynthPref.setOnPreferenceChangeListener(this);
         String engine = Settings.Secure.getString(resolver, TTS_DEFAULT_SYNTH);
         if (engine == null) {
             // TODO move FALLBACK_TTS_DEFAULT_SYNTH to TextToSpeech
@@ -297,6 +302,14 @@
             int newIndex = mDefaultLocPref.findIndexOfValue((String)objValue);
             Log.v("Settings", " selected is " + newIndex);
             mDemoStringIndex = newIndex > -1 ? newIndex : 0;
+        } else if (KEY_TTS_DEFAULT_SYNTH.equals(preference.getKey())) {
+            // TODO: Do a data check here
+            mDefaultEng = objValue.toString();
+            Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, mDefaultEng);
+            if (mTts != null) {
+                mTts.setEngineByPackageName(mDefaultEng);
+            }
+            Log.v("Settings", "The default synth is: " + objValue.toString());
         }
 
         return true;
@@ -424,4 +437,23 @@
         Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, DEFAULT_VARIANT_VAL);
     }
 
+
+  private void loadEngines() {
+    ListPreference enginesPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
+
+    Intent intent = new Intent("android.intent.action.START_TTS_ENGINE");
+
+    ResolveInfo[] enginesArray = new ResolveInfo[0];
+    PackageManager pm = getPackageManager();
+    enginesArray = pm.queryIntentActivities(intent, 0).toArray(enginesArray);
+    CharSequence entries[] = new CharSequence[enginesArray.length];
+    CharSequence values[] = new CharSequence[enginesArray.length];
+    for (int i = 0; i < enginesArray.length; i++) {
+      entries[i] = enginesArray[i].loadLabel(pm);
+      values[i] = enginesArray[i].activityInfo.packageName;
+    }
+    enginesPref.setEntries(entries);
+    enginesPref.setEntryValues(values);
+  }
+
 }