diff options
Diffstat (limited to 'src/com/android/settings/TextToSpeechSettings.java')
-rw-r--r-- | src/com/android/settings/TextToSpeechSettings.java | 90 |
1 files changed, 50 insertions, 40 deletions
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java index f77913f..94b256f 100644 --- a/src/com/android/settings/TextToSpeechSettings.java +++ b/src/com/android/settings/TextToSpeechSettings.java @@ -18,10 +18,10 @@ package com.android.settings; import static android.provider.Settings.Secure.TTS_USE_DEFAULTS; import static android.provider.Settings.Secure.TTS_DEFAULT_RATE; -import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH; import static android.provider.Settings.Secure.TTS_DEFAULT_LANG; import static android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY; import static android.provider.Settings.Secure.TTS_DEFAULT_VARIANT; +import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH; import android.content.ContentResolver; import android.content.Intent; @@ -51,7 +51,6 @@ public class TextToSpeechSettings extends PreferenceActivity implements private static final String KEY_TTS_INSTALL_DATA = "tts_install_data"; private static final String KEY_TTS_USE_DEFAULT = "toggle_use_default_tts_settings"; private static final String KEY_TTS_DEFAULT_RATE = "tts_default_rate"; - private static final String KEY_TTS_DEFAULT_PITCH = "tts_default_pitch"; 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"; @@ -65,7 +64,6 @@ public class TextToSpeechSettings extends PreferenceActivity implements private Preference mInstallData = null; private CheckBoxPreference mUseDefaultPref = null; private ListPreference mDefaultRatePref = null; - private ListPreference mDefaultPitchPref = null; private ListPreference mDefaultLocPref = null; private String mDefaultLanguage = null; private String mDefaultCountry = null; @@ -81,6 +79,11 @@ public class TextToSpeechSettings extends PreferenceActivity implements * startActivityForResult. */ private static final int VOICE_DATA_INTEGRITY_CHECK = 1977; + /** + * Request code (arbitrary value) for voice data installation through + * startActivityForResult. + */ + private static final int VOICE_DATA_INSTALLATION = 1980; @Override protected void onCreate(Bundle savedInstanceState) { @@ -88,6 +91,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements addPreferencesFromResource(R.xml.tts_settings); + mEnableDemo = false; initClickers(); initDefaultSettings(); } @@ -99,7 +103,6 @@ public class TextToSpeechSettings extends PreferenceActivity implements // whenever we return to this screen, we don't know the state of the // system, so we have to recheck that we can play the demo, or it must be disabled. // TODO make the TTS service listen to "changes in the system", i.e. sd card un/mount - mEnableDemo = false; initClickers(); updateWidgetState(); checkVoiceData(); @@ -144,7 +147,13 @@ public class TextToSpeechSettings extends PreferenceActivity implements mUseDefaultPref.setOnPreferenceChangeListener(this); // Default engine - mDefaultEng = FALLBACK_TTS_DEFAULT_SYNTH; + String engine = Settings.Secure.getString(resolver, TTS_DEFAULT_SYNTH); + if (engine == null) { + // TODO move FALLBACK_TTS_DEFAULT_SYNTH to TextToSpeech + engine = FALLBACK_TTS_DEFAULT_SYNTH; + Settings.Secure.putString(resolver, TTS_DEFAULT_SYNTH, engine); + } + mDefaultEng = engine; // Default rate mDefaultRatePref = (ListPreference) findPreference(KEY_TTS_DEFAULT_RATE); @@ -158,26 +167,13 @@ public class TextToSpeechSettings extends PreferenceActivity implements mDefaultRatePref.setValue(String.valueOf(intVal)); mDefaultRatePref.setOnPreferenceChangeListener(this); - // Default pitch - mDefaultPitchPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_PITCH); - try { - intVal = Settings.Secure.getInt(resolver, TTS_DEFAULT_PITCH); - } catch (SettingNotFoundException e) { - // default pitch setting not found, initialize it - intVal = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_PITCH; - Settings.Secure.putInt(resolver, TTS_DEFAULT_PITCH, intVal); - } - mDefaultPitchPref.setValue(String.valueOf(intVal)); - mDefaultPitchPref.setOnPreferenceChangeListener(this); - - // Default language / country / variant : these three values map to a single ListPref // representing the matching Locale String language = null; String country = null; String variant = null; mDefaultLocPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_LANG); - language = Settings.Secure.getString(resolver, KEY_TTS_DEFAULT_LANG); + language = Settings.Secure.getString(resolver, TTS_DEFAULT_LANG); if (language != null) { mDefaultLanguage = language; } else { @@ -185,9 +181,9 @@ public class TextToSpeechSettings extends PreferenceActivity implements language = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_LANG; country = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_COUNTRY; variant = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_VARIANT; - Settings.Secure.putString(resolver, KEY_TTS_DEFAULT_LANG, language); - Settings.Secure.putString(resolver, KEY_TTS_DEFAULT_COUNTRY, country); - Settings.Secure.putString(resolver, KEY_TTS_DEFAULT_VARIANT, variant); + Settings.Secure.putString(resolver, TTS_DEFAULT_LANG, language); + Settings.Secure.putString(resolver, TTS_DEFAULT_COUNTRY, country); + Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, variant); } if (country == null) { // country wasn't initialized yet because a default language was found @@ -198,8 +194,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements // default country setting not found, initialize it, as well as the variant; country = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_COUNTRY; variant = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_VARIANT; - Settings.Secure.putString(resolver, KEY_TTS_DEFAULT_COUNTRY, country); - Settings.Secure.putString(resolver, KEY_TTS_DEFAULT_VARIANT, variant); + Settings.Secure.putString(resolver, TTS_DEFAULT_COUNTRY, country); + Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, variant); } } if (variant == null) { @@ -210,7 +206,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements } else { // default variant setting not found, initialize it variant = TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_VARIANT; - Settings.Secure.putString(resolver, KEY_TTS_DEFAULT_VARIANT, variant); + Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, variant); } } // we now have the default lang/country/variant trio, build a string value from it @@ -230,6 +226,10 @@ public class TextToSpeechSettings extends PreferenceActivity implements } + /** + * Ask the current default engine to launch the matching CHECK_TTS_DATA activity + * to check the required TTS files are properly installed. + */ private void checkVoiceData() { PackageManager pm = getPackageManager(); Intent intent = new Intent(); @@ -247,6 +247,26 @@ public class TextToSpeechSettings extends PreferenceActivity implements /** + * Ask the current default engine to launch the matching INSTALL_TTS_DATA activity + * so the required TTS files are properly installed. + */ + private void installVoiceData() { + PackageManager pm = getPackageManager(); + Intent intent = new Intent(); + intent.setAction("android.intent.action.INSTALL_TTS_DATA"); + List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); + // query only the package that matches that of the default engine + for (int i = 0; i < resolveInfos.size(); i++) { + ActivityInfo currentActivityInfo = resolveInfos.get(i).activityInfo; + if (mDefaultEng.equals(currentActivityInfo.packageName)) { + intent.setClassName(mDefaultEng, currentActivityInfo.name); + this.startActivityForResult(intent, VOICE_DATA_INSTALLATION); + } + } + } + + + /** * Called when the TTS engine is initialized. */ public void onInit(int status) { @@ -273,7 +293,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements } } else { Log.v(TAG, "Voice data check failed"); - + mEnableDemo = false; + updateWidgetState(); } } } @@ -299,16 +320,6 @@ public class TextToSpeechSettings extends PreferenceActivity implements } catch (NumberFormatException e) { Log.e(TAG, "could not persist default TTS rate setting", e); } - } else if (KEY_TTS_DEFAULT_PITCH.equals(preference.getKey())) { - // Default pitch - int value = Integer.parseInt((String) objValue); - try { - Settings.Secure.putInt(getContentResolver(), - TTS_DEFAULT_PITCH, value); - Log.i(TAG, "TTS default pitch is "+value); - } catch (NumberFormatException e) { - Log.e(TAG, "could not persist default TTS pitch setting", e); - } } else if (KEY_TTS_DEFAULT_LANG.equals(preference.getKey())) { // Default locale ContentResolver resolver = getContentResolver(); @@ -337,9 +348,9 @@ public class TextToSpeechSettings extends PreferenceActivity implements return true; } if (preference == mInstallData) { - // Install data - // TODO launch request for installer - + installVoiceData(); + // quit this activity so it needs to be restarted after installation of the voice data + finish(); return true; } return false; @@ -350,7 +361,6 @@ public class TextToSpeechSettings extends PreferenceActivity implements mPlayExample.setEnabled(mEnableDemo); mUseDefaultPref.setEnabled(mEnableDemo); mDefaultRatePref.setEnabled(mEnableDemo); - mDefaultPitchPref.setEnabled(mEnableDemo); mDefaultLocPref.setEnabled(mEnableDemo); mInstallData.setEnabled(!mEnableDemo); |