Merge commit '089e08d8c9b323064a75434a68dd76bbbcddbe9f' * commit '089e08d8c9b323064a75434a68dd76bbbcddbe9f': Fix bug 2088099 where the TTS example doesn't play in the Settings app
This commit is contained in:
@@ -129,6 +129,15 @@
|
|||||||
<item>ita-ITA</item>
|
<item>ita-ITA</item>
|
||||||
<item>spa-ESP</item>
|
<item>spa-ESP</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<!-- Do not translate. -->
|
||||||
|
<string-array name="tts_demo_strings">
|
||||||
|
<item>This is an example of speech synthesis in English.</item>
|
||||||
|
<item>This is an example of speech synthesis in English.</item>
|
||||||
|
<item>Voici un échantillon de synthèse vocale en français.</item>
|
||||||
|
<item>Dies ist ein Beispiel für Sprachsynthese in Deutsch.</item>
|
||||||
|
<item>Questo è un esempio di sintesi vocale in italiano.</item>
|
||||||
|
<item>Este es un ejemplo de síntesis de voz en español.</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<!-- Wi-Fi settings -->
|
<!-- Wi-Fi settings -->
|
||||||
|
|
||||||
|
@@ -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_LANG = "tts_default_lang";
|
||||||
private static final String KEY_TTS_DEFAULT_COUNTRY = "tts_default_country";
|
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_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 = "-";
|
private static final String LOCALE_DELIMITER = "-";
|
||||||
|
|
||||||
@@ -70,6 +74,12 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
private String mDefaultCountry = null;
|
private String mDefaultCountry = null;
|
||||||
private String mDefaultLocVariant = null;
|
private String mDefaultLocVariant = null;
|
||||||
private String mDefaultEng = "";
|
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;
|
private boolean mEnableDemo = false;
|
||||||
|
|
||||||
@@ -92,6 +102,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
|
|
||||||
addPreferencesFromResource(R.xml.tts_settings);
|
addPreferencesFromResource(R.xml.tts_settings);
|
||||||
|
|
||||||
|
mDemoStrings = getResources().getStringArray(R.array.tts_demo_strings);
|
||||||
|
|
||||||
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
||||||
|
|
||||||
mEnableDemo = false;
|
mEnableDemo = false;
|
||||||
@@ -132,21 +144,21 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
|
|
||||||
private void initDefaultSettings() {
|
private void initDefaultSettings() {
|
||||||
ContentResolver resolver = getContentResolver();
|
ContentResolver resolver = getContentResolver();
|
||||||
int intVal = 0;
|
|
||||||
|
|
||||||
// Find the default TTS values in the settings, initialize and store the
|
// Find the default TTS values in the settings, initialize and store the
|
||||||
// settings if they are not found.
|
// settings if they are not found.
|
||||||
|
|
||||||
// "Use Defaults"
|
// "Use Defaults"
|
||||||
|
int useDefault = 0;
|
||||||
mUseDefaultPref = (CheckBoxPreference) findPreference(KEY_TTS_USE_DEFAULT);
|
mUseDefaultPref = (CheckBoxPreference) findPreference(KEY_TTS_USE_DEFAULT);
|
||||||
try {
|
try {
|
||||||
intVal = Settings.Secure.getInt(resolver, TTS_USE_DEFAULTS);
|
useDefault = Settings.Secure.getInt(resolver, TTS_USE_DEFAULTS);
|
||||||
} catch (SettingNotFoundException e) {
|
} catch (SettingNotFoundException e) {
|
||||||
// "use default" setting not found, initialize it
|
// "use default" setting not found, initialize it
|
||||||
intVal = TextToSpeech.Engine.USE_DEFAULTS;
|
useDefault = TextToSpeech.Engine.USE_DEFAULTS;
|
||||||
Settings.Secure.putInt(resolver, TTS_USE_DEFAULTS, intVal);
|
Settings.Secure.putInt(resolver, TTS_USE_DEFAULTS, useDefault);
|
||||||
}
|
}
|
||||||
mUseDefaultPref.setChecked(intVal == 1);
|
mUseDefaultPref.setChecked(useDefault == 1);
|
||||||
mUseDefaultPref.setOnPreferenceChangeListener(this);
|
mUseDefaultPref.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
// Default engine
|
// Default engine
|
||||||
@@ -161,59 +173,19 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
// Default rate
|
// Default rate
|
||||||
mDefaultRatePref = (ListPreference) findPreference(KEY_TTS_DEFAULT_RATE);
|
mDefaultRatePref = (ListPreference) findPreference(KEY_TTS_DEFAULT_RATE);
|
||||||
try {
|
try {
|
||||||
intVal = Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
|
mDefaultRate = Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
|
||||||
} catch (SettingNotFoundException e) {
|
} catch (SettingNotFoundException e) {
|
||||||
// default rate setting not found, initialize it
|
// default rate setting not found, initialize it
|
||||||
intVal = TextToSpeech.Engine.DEFAULT_RATE;
|
mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
|
||||||
Settings.Secure.putInt(resolver, TTS_DEFAULT_RATE, intVal);
|
Settings.Secure.putInt(resolver, TTS_DEFAULT_RATE, mDefaultRate);
|
||||||
}
|
}
|
||||||
mDefaultRatePref.setValue(String.valueOf(intVal));
|
mDefaultRatePref.setValue(String.valueOf(mDefaultRate));
|
||||||
mDefaultRatePref.setOnPreferenceChangeListener(this);
|
mDefaultRatePref.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
// Default language / country / variant : these three values map to a single ListPref
|
// Default language / country / variant : these three values map to a single ListPref
|
||||||
// representing the matching Locale
|
// representing the matching Locale
|
||||||
String language = null;
|
|
||||||
String country = null;
|
|
||||||
String variant = null;
|
|
||||||
mDefaultLocPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_LANG);
|
mDefaultLocPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_LANG);
|
||||||
language = Settings.Secure.getString(resolver, TTS_DEFAULT_LANG);
|
initDefaultLang();
|
||||||
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);
|
|
||||||
mDefaultLocPref.setOnPreferenceChangeListener(this);
|
mDefaultLocPref.setOnPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,12 +237,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
if (status == TextToSpeech.SUCCESS) {
|
if (status == TextToSpeech.SUCCESS) {
|
||||||
Log.v(TAG, "TTS engine for settings screen initialized.");
|
Log.v(TAG, "TTS engine for settings screen initialized.");
|
||||||
mEnableDemo = true;
|
mEnableDemo = true;
|
||||||
// check to see if the current locale is supported
|
mTts.setLanguage(new Locale(mDefaultLanguage, mDefaultCountry));
|
||||||
if (mTts.isLanguageAvailable(Locale.getDefault()) == TextToSpeech.LANG_NOT_SUPPORTED) {
|
mTts.setSpeechRate((float)(mDefaultRate/100.0f));
|
||||||
mTts.setLanguage(Locale.US);
|
|
||||||
} else {
|
|
||||||
mTts.setLanguage(Locale.getDefault());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Log.v(TAG, "TTS engine for settings screen failed to initialize successfully.");
|
Log.v(TAG, "TTS engine for settings screen failed to initialize successfully.");
|
||||||
mEnableDemo = false;
|
mEnableDemo = false;
|
||||||
@@ -307,14 +275,14 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
Log.i(TAG, "TTS use default settings is "+objValue.toString());
|
Log.i(TAG, "TTS use default settings is "+objValue.toString());
|
||||||
} else if (KEY_TTS_DEFAULT_RATE.equals(preference.getKey())) {
|
} else if (KEY_TTS_DEFAULT_RATE.equals(preference.getKey())) {
|
||||||
// Default rate
|
// Default rate
|
||||||
int value = Integer.parseInt((String) objValue);
|
mDefaultRate = Integer.parseInt((String) objValue);
|
||||||
try {
|
try {
|
||||||
Settings.Secure.putInt(getContentResolver(),
|
Settings.Secure.putInt(getContentResolver(),
|
||||||
TTS_DEFAULT_RATE, value);
|
TTS_DEFAULT_RATE, mDefaultRate);
|
||||||
if (mTts != null) {
|
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) {
|
} catch (NumberFormatException e) {
|
||||||
Log.e(TAG, "could not persist default TTS rate setting", 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) {
|
if (mTts != null) {
|
||||||
mTts.setLanguage(new Locale(mDefaultLanguage, mDefaultCountry));
|
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;
|
return true;
|
||||||
@@ -343,8 +314,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements
|
|||||||
if (preference == mPlayExample) {
|
if (preference == mPlayExample) {
|
||||||
// Play example
|
// Play example
|
||||||
if (mTts != null) {
|
if (mTts != null) {
|
||||||
mTts.speak(getResources().getString(R.string.tts_demo),
|
mTts.speak(mDemoStrings[mDemoStringIndex], TextToSpeech.QUEUE_FLUSH, null);
|
||||||
TextToSpeech.QUEUE_FLUSH, null);
|
|
||||||
}
|
}
|
||||||
return true;
|
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,
|
* Initialize the default language in the UI and in the preferences.
|
||||||
String localeString = new String(language);
|
* After this method has been invoked, the default language is a supported Locale.
|
||||||
if (country.compareTo("") != 0) {
|
*/
|
||||||
localeString += LOCALE_DELIMITER + country;
|
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 {
|
} else {
|
||||||
localeString += LOCALE_DELIMITER + " ";
|
// otherwise use a default supported Locale as the default language
|
||||||
|
useSupportedLocAsDefault();
|
||||||
}
|
}
|
||||||
if (variant.compareTo("") != 0) {
|
|
||||||
localeString += LOCALE_DELIMITER + variant;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mDefaultLocPref.findIndexOfValue(localeString) > -1) {
|
// Update the language preference list with the default language and the matching
|
||||||
mDefaultLocPref.setValue(localeString);
|
// demo string (at this stage there is a default language pref)
|
||||||
} else {
|
ContentResolver resolver = getContentResolver();
|
||||||
mDefaultLocPref.setValueIndex(0);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.v(TAG, "In initDefaultSettings: localeString=" + localeString);
|
/**
|
||||||
|
* (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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user