summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/TextToSpeechSettings.java178
1 files changed, 100 insertions, 78 deletions
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index 12286c1..d4ffe65 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -55,6 +55,10 @@ public class TextToSpeechSettings extends PreferenceActivity implements
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";
+ // TODO move default Locale values to TextToSpeech.Engine
+ private static final String DEFAULT_LANG_VAL = "eng";
+ private static final String DEFAULT_COUNTRY_VAL = "USA";
+ private static final String DEFAULT_VARIANT_VAL = "";
private static final String LOCALE_DELIMITER = "-";
@@ -70,6 +74,12 @@ public class TextToSpeechSettings extends PreferenceActivity implements
private String mDefaultCountry = null;
private String mDefaultLocVariant = null;
private String mDefaultEng = "";
+ private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
+
+ // Array of strings used to demonstrate TTS in the different languages.
+ private String[] mDemoStrings;
+ // Index of the current string to use for the demo.
+ private int mDemoStringIndex = 0;
private boolean mEnableDemo = false;
@@ -92,6 +102,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements
addPreferencesFromResource(R.xml.tts_settings);
+ mDemoStrings = getResources().getStringArray(R.array.tts_demo_strings);
+
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
mEnableDemo = false;
@@ -132,21 +144,21 @@ public class TextToSpeechSettings extends PreferenceActivity implements
private void initDefaultSettings() {
ContentResolver resolver = getContentResolver();
- int intVal = 0;
// Find the default TTS values in the settings, initialize and store the
// settings if they are not found.
// "Use Defaults"
+ int useDefault = 0;
mUseDefaultPref = (CheckBoxPreference) findPreference(KEY_TTS_USE_DEFAULT);
try {
- intVal = Settings.Secure.getInt(resolver, TTS_USE_DEFAULTS);
+ useDefault = Settings.Secure.getInt(resolver, TTS_USE_DEFAULTS);
} catch (SettingNotFoundException e) {
// "use default" setting not found, initialize it
- intVal = TextToSpeech.Engine.USE_DEFAULTS;
- Settings.Secure.putInt(resolver, TTS_USE_DEFAULTS, intVal);
+ useDefault = TextToSpeech.Engine.USE_DEFAULTS;
+ Settings.Secure.putInt(resolver, TTS_USE_DEFAULTS, useDefault);
}
- mUseDefaultPref.setChecked(intVal == 1);
+ mUseDefaultPref.setChecked(useDefault == 1);
mUseDefaultPref.setOnPreferenceChangeListener(this);
// Default engine
@@ -161,59 +173,19 @@ public class TextToSpeechSettings extends PreferenceActivity implements
// Default rate
mDefaultRatePref = (ListPreference) findPreference(KEY_TTS_DEFAULT_RATE);
try {
- intVal = Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
+ mDefaultRate = Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
} catch (SettingNotFoundException e) {
// default rate setting not found, initialize it
- intVal = TextToSpeech.Engine.DEFAULT_RATE;
- Settings.Secure.putInt(resolver, TTS_DEFAULT_RATE, intVal);
+ mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
+ Settings.Secure.putInt(resolver, TTS_DEFAULT_RATE, mDefaultRate);
}
- mDefaultRatePref.setValue(String.valueOf(intVal));
+ mDefaultRatePref.setValue(String.valueOf(mDefaultRate));
mDefaultRatePref.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, TTS_DEFAULT_LANG);
- if (language == null) {
- // the default language property isn't set, use that of the current locale
- Locale currentLocale = Locale.getDefault();
- language = currentLocale.getISO3Language();
- country = currentLocale.getISO3Country();
- variant = currentLocale.getVariant();
- Settings.Secure.putString(resolver, TTS_DEFAULT_LANG, language);
- Settings.Secure.putString(resolver, TTS_DEFAULT_COUNTRY, country);
- Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, variant);
- }
- mDefaultLanguage = language;
- if (country == null) {
- // country wasn't initialized yet because a default language was found
- country = Settings.Secure.getString(resolver, KEY_TTS_DEFAULT_COUNTRY);
- if (country == null) {
- // default country setting not found, initialize it, as well as the variant;
- Locale currentLocale = Locale.getDefault();
- country = currentLocale.getISO3Country();
- variant = currentLocale.getVariant();
- Settings.Secure.putString(resolver, TTS_DEFAULT_COUNTRY, country);
- Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, variant);
- }
- }
- mDefaultCountry = country;
- if (variant == null) {
- // variant wasn't initialized yet because a default country was found
- variant = Settings.Secure.getString(resolver, KEY_TTS_DEFAULT_VARIANT);
- if (variant == null) {
- // default variant setting not found, initialize it
- Locale currentLocale = Locale.getDefault();
- variant = currentLocale.getVariant();
- Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, variant);
- }
- }
- mDefaultLocVariant = variant;
-
- setDefaultLocalePref(language, country, variant);
+ initDefaultLang();
mDefaultLocPref.setOnPreferenceChangeListener(this);
}
@@ -265,12 +237,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements
if (status == TextToSpeech.SUCCESS) {
Log.v(TAG, "TTS engine for settings screen initialized.");
mEnableDemo = true;
- // check to see if the current locale is supported
- if (mTts.isLanguageAvailable(Locale.getDefault()) == TextToSpeech.LANG_NOT_SUPPORTED) {
- mTts.setLanguage(Locale.US);
- } else {
- mTts.setLanguage(Locale.getDefault());
- }
+ mTts.setLanguage(new Locale(mDefaultLanguage, mDefaultCountry));
+ mTts.setSpeechRate((float)(mDefaultRate/100.0f));
} else {
Log.v(TAG, "TTS engine for settings screen failed to initialize successfully.");
mEnableDemo = false;
@@ -307,14 +275,14 @@ public class TextToSpeechSettings extends PreferenceActivity implements
Log.i(TAG, "TTS use default settings is "+objValue.toString());
} else if (KEY_TTS_DEFAULT_RATE.equals(preference.getKey())) {
// Default rate
- int value = Integer.parseInt((String) objValue);
+ mDefaultRate = Integer.parseInt((String) objValue);
try {
Settings.Secure.putInt(getContentResolver(),
- TTS_DEFAULT_RATE, value);
+ TTS_DEFAULT_RATE, mDefaultRate);
if (mTts != null) {
- mTts.setSpeechRate((float)(value/100.0f));
+ mTts.setSpeechRate((float)(mDefaultRate/100.0f));
}
- Log.i(TAG, "TTS default rate is "+value);
+ Log.i(TAG, "TTS default rate is " + mDefaultRate);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist default TTS rate setting", e);
}
@@ -330,6 +298,9 @@ public class TextToSpeechSettings extends PreferenceActivity implements
if (mTts != null) {
mTts.setLanguage(new Locale(mDefaultLanguage, mDefaultCountry));
}
+ int newIndex = mDefaultLocPref.findIndexOfValue((String)objValue);
+ Log.v("Settings", " selected is " + newIndex);
+ mDemoStringIndex = newIndex > -1 ? newIndex : 0;
}
return true;
@@ -343,8 +314,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements
if (preference == mPlayExample) {
// Play example
if (mTts != null) {
- mTts.speak(getResources().getString(R.string.tts_demo),
- TextToSpeech.QUEUE_FLUSH, null);
+ mTts.speak(mDemoStrings[mDemoStringIndex], TextToSpeech.QUEUE_FLUSH, null);
}
return true;
}
@@ -385,25 +355,77 @@ public class TextToSpeechSettings extends PreferenceActivity implements
}
- private void setDefaultLocalePref(String language, String country, String variant) {
- // build a string from the default lang/country/variant trio,
- String localeString = new String(language);
- if (country.compareTo("") != 0) {
- localeString += LOCALE_DELIMITER + country;
- } else {
- localeString += LOCALE_DELIMITER + " ";
- }
- if (variant.compareTo("") != 0) {
- localeString += LOCALE_DELIMITER + variant;
+ /**
+ * Initialize the default language in the UI and in the preferences.
+ * After this method has been invoked, the default language is a supported Locale.
+ */
+ private void initDefaultLang() {
+ // if there isn't already a default language preference
+ if (!hasLangPref()) {
+ // if the current Locale is supported
+ if (isCurrentLocSupported()) {
+ // then use the current Locale as the default language
+ useCurrentLocAsDefault();
+ } else {
+ // otherwise use a default supported Locale as the default language
+ useSupportedLocAsDefault();
+ }
}
- if (mDefaultLocPref.findIndexOfValue(localeString) > -1) {
- mDefaultLocPref.setValue(localeString);
- } else {
- mDefaultLocPref.setValueIndex(0);
- }
+ // Update the language preference list with the default language and the matching
+ // demo string (at this stage there is a default language pref)
+ ContentResolver resolver = getContentResolver();
+ mDefaultLanguage = Settings.Secure.getString(resolver, TTS_DEFAULT_LANG);
+ mDefaultCountry = Settings.Secure.getString(resolver, KEY_TTS_DEFAULT_COUNTRY);
+ mDefaultLocVariant = Settings.Secure.getString(resolver, KEY_TTS_DEFAULT_VARIANT);
+
+ // update the demo string
+ mDemoStringIndex = mDefaultLocPref.findIndexOfValue(mDefaultLanguage + LOCALE_DELIMITER
+ + mDefaultCountry);
+ mDefaultLocPref.setValueIndex(mDemoStringIndex);
+ }
+
+ /**
+ * (helper function for initDefaultLang() )
+ * Returns whether there is a default language in the TTS settings.
+ */
+ private boolean hasLangPref() {
+ String language = Settings.Secure.getString(getContentResolver(), TTS_DEFAULT_LANG);
+ return (language != null);
+ }
+
+ /**
+ * (helper function for initDefaultLang() )
+ * Returns whether the current Locale is supported by this Settings screen
+ */
+ private boolean isCurrentLocSupported() {
+ String currentLocID = Locale.getDefault().getISO3Language() + LOCALE_DELIMITER
+ + Locale.getDefault().getISO3Country();
+ return (mDefaultLocPref.findIndexOfValue(currentLocID) > -1);
+ }
- Log.v(TAG, "In initDefaultSettings: localeString=" + localeString);
+ /**
+ * (helper function for initDefaultLang() )
+ * Sets the default language in TTS settings to be the current Locale.
+ * This should only be used after checking that the current Locale is supported.
+ */
+ private void useCurrentLocAsDefault() {
+ Locale currentLocale = Locale.getDefault();
+ ContentResolver resolver = getContentResolver();
+ Settings.Secure.putString(resolver, TTS_DEFAULT_LANG, currentLocale.getISO3Language());
+ Settings.Secure.putString(resolver, TTS_DEFAULT_COUNTRY, currentLocale.getISO3Country());
+ Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, currentLocale.getVariant());
+ }
+
+ /**
+ * (helper function for initDefaultLang() )
+ * Sets the default language in TTS settings to be one known to be supported
+ */
+ private void useSupportedLocAsDefault() {
+ ContentResolver resolver = getContentResolver();
+ Settings.Secure.putString(resolver, TTS_DEFAULT_LANG, DEFAULT_LANG_VAL);
+ Settings.Secure.putString(resolver, TTS_DEFAULT_COUNTRY, DEFAULT_COUNTRY_VAL);
+ Settings.Secure.putString(resolver, TTS_DEFAULT_VARIANT, DEFAULT_VARIANT_VAL);
}
}