From 8ca7d88c1bdb7e2a233e48f67477c56d6c7f42a3 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Mon, 12 Apr 2010 18:32:33 -0700 Subject: [PATCH 1/2] Fixing bug #2591288 The language pref needs to be set after populating the entries based on the selected engine. Change-Id: I16db4428eee83052ff7c5115942eef4bf3d87454 --- .../android/settings/TextToSpeechSettings.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java index 84b14a191a5..04287beb219 100644 --- a/src/com/android/settings/TextToSpeechSettings.java +++ b/src/com/android/settings/TextToSpeechSettings.java @@ -408,7 +408,17 @@ public class TextToSpeechSettings extends PreferenceActivity implements (ListPreference) findPreference("tts_default_lang"); CharSequence[] entries = new CharSequence[available.size()]; CharSequence[] entryValues = new CharSequence[available.size()]; - for (int i=0; i 0) { + selectedLanguagePref = selectedLanguagePref + LOCALE_DELIMITER + + mDefaultCountry; + } + if (mDefaultLocVariant.length() > 0) { + selectedLanguagePref = selectedLanguagePref + LOCALE_DELIMITER + + mDefaultLocVariant; + } + for (int i = 0; i < available.size(); i++){ String[] langCountryVariant = available.get(i).split("-"); Locale loc = null; if (langCountryVariant.length == 1){ @@ -422,10 +432,16 @@ public class TextToSpeechSettings extends PreferenceActivity implements if (loc != null){ entries[i] = loc.getDisplayName(); entryValues[i] = available.get(i); + if (entryValues[i].equals(selectedLanguagePref)){ + selectedLanguageIndex = i; + } } } ttsLanguagePref.setEntries(entries); ttsLanguagePref.setEntryValues(entryValues); + if (selectedLanguageIndex > -1) { + ttsLanguagePref.setValueIndex(selectedLanguageIndex); + } mEnableDemo = true; // Make sure that the default language can be used. int languageResult = mTts.setLanguage( From fced126829a74c9cbe9cbe993a3c54d1ff015a73 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Mon, 12 Apr 2010 20:15:28 -0700 Subject: [PATCH 2/2] Fix bug 2577511 NPE in TTS Settings A previous bug had caused incorrect settings to be saved, in particular the default language variant was not stored, unlike the default language and country. When settings were restored, this caused an invalid group of settings to be loaded, with a null language variant. The fix consists in: - discarding invalid default language settings - reevaluating which language should be selected in the list of available languages. Change-Id: If58882a9acc28f14a78f6142fefa17d04ca4ad5d --- .../settings/TextToSpeechSettings.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java index 04287beb219..89a46419819 100644 --- a/src/com/android/settings/TextToSpeechSettings.java +++ b/src/com/android/settings/TextToSpeechSettings.java @@ -418,7 +418,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements selectedLanguagePref = selectedLanguagePref + LOCALE_DELIMITER + mDefaultLocVariant; } - for (int i = 0; i < available.size(); i++){ + for (int i = 0; i < available.size(); i++) { String[] langCountryVariant = available.get(i).split("-"); Locale loc = null; if (langCountryVariant.length == 1){ @@ -432,7 +432,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements if (loc != null){ entries[i] = loc.getDisplayName(); entryValues[i] = available.get(i); - if (entryValues[i].equals(selectedLanguagePref)){ + if (entryValues[i].equals(selectedLanguagePref)) { selectedLanguageIndex = i; } } @@ -669,8 +669,20 @@ public class TextToSpeechSettings extends PreferenceActivity implements * 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); + ContentResolver resolver = getContentResolver(); + String language = Settings.Secure.getString(resolver, TTS_DEFAULT_LANG); + if ((language == null) || (language.length() < 1)) { + return false; + } + String country = Settings.Secure.getString(resolver, TTS_DEFAULT_COUNTRY); + if (country == null) { + return false; + } + String variant = Settings.Secure.getString(resolver, TTS_DEFAULT_VARIANT); + if (variant == null) { + return false; + } + return true; } /**