Add explicit "use system language" TTS language.

Previously, if user set the TTS engine default language to the system
language, Settings app would save its value as empty string - which
is interpreted as "use system language", and makes it follow the change
of the device locale. This change introduces explicit "Use system language"
as an entry in the TTS default engine picker. This makes it consistent
with other pickers, like ones for keyboard and spellchecker.

Change-Id: Ibb4189be30bb9691ef2bd10e7fff883318eceae7
This commit is contained in:
Przemyslaw Szczepaniak
2014-05-12 16:13:14 +01:00
parent 55638cb6c6
commit 098b4a7eb7
2 changed files with 23 additions and 22 deletions

View File

@@ -3895,6 +3895,8 @@
<!-- On main TTS Settings screen, in default settings section, setting default language for synthesized voice --> <!-- On main TTS Settings screen, in default settings section, setting default language for synthesized voice -->
<string name="tts_default_lang_title">Language</string> <string name="tts_default_lang_title">Language</string>
<!-- Entry in the TTS engine language/locale picker, when selected will try to default to the system language [CHAR LIMIT=50] -->
<string name="tts_lang_use_system">Use system language</string>
<!-- On main TTS Settings screen, language summary if it can't default to system language [CHAR LIMIT=50] --> <!-- On main TTS Settings screen, language summary if it can't default to system language [CHAR LIMIT=50] -->
<string name="tts_lang_not_selected">Language not selected</string> <string name="tts_lang_not_selected">Language not selected</string>
<!-- On main TTS Settings screen, summary for default language for synthesized voice --> <!-- On main TTS Settings screen, summary for default language for synthesized voice -->

View File

@@ -64,7 +64,6 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
private TextToSpeech mTts; private TextToSpeech mTts;
private int mSelectedLocaleIndex = -1; private int mSelectedLocaleIndex = -1;
private int mSystemLocaleIndex = -1;
private final TextToSpeech.OnInitListener mTtsInitListener = new TextToSpeech.OnInitListener() { private final TextToSpeech.OnInitListener mTtsInitListener = new TextToSpeech.OnInitListener() {
@Override @Override
@@ -201,8 +200,10 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
mLocalePreference.setEnabled(false); mLocalePreference.setEnabled(false);
return; return;
} }
String currentLocale = mEnginesHelper.getLocalePrefForEngine( String currentLocale = "";
getEngineName()); if (!mEnginesHelper.isLocaleSetToDefaultForEngine(getEngineName())) {
currentLocale = mEnginesHelper.getLocalePrefForEngine(getEngineName());
}
ArrayList<Pair<String, String>> entryPairs = ArrayList<Pair<String, String>> entryPairs =
new ArrayList<Pair<String, String>>(availableLangs.size()); new ArrayList<Pair<String, String>>(availableLangs.size());
@@ -231,21 +232,19 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
} }
}); });
String defaultLocaleStr = mEnginesHelper.getDefaultLocale();
// Get two arrays out of one of pairs // Get two arrays out of one of pairs
mSelectedLocaleIndex = -1; mSelectedLocaleIndex = 0; // Will point to the R.string.tts_lang_use_system value
mSystemLocaleIndex = -1; CharSequence[] entries = new CharSequence[availableLangs.size()+1];
CharSequence[] entries = new CharSequence[availableLangs.size()]; CharSequence[] entryValues = new CharSequence[availableLangs.size()+1];
CharSequence[] entryValues = new CharSequence[availableLangs.size()];
int i = 0; entries[0] = getActivity().getString(R.string.tts_lang_use_system);
entryValues[0] = "";
int i = 1;
for (Pair<String, String> entry : entryPairs) { for (Pair<String, String> entry : entryPairs) {
if (entry.second.equalsIgnoreCase(currentLocale)) { if (entry.second.equalsIgnoreCase(currentLocale)) {
mSelectedLocaleIndex = i; mSelectedLocaleIndex = i;
} }
if (entry.second.equalsIgnoreCase(defaultLocaleStr)) {
mSystemLocaleIndex = i;
}
entries[i] = entry.first; entries[i] = entry.first;
entryValues[i++] = entry.second; entryValues[i++] = entry.second;
} }
@@ -322,17 +321,17 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
mLocalePreference.setSummary(mLocalePreference.getEntries()[selectedLocaleIndex]); mLocalePreference.setSummary(mLocalePreference.getEntries()[selectedLocaleIndex]);
mSelectedLocaleIndex = selectedLocaleIndex; mSelectedLocaleIndex = selectedLocaleIndex;
if (mSelectedLocaleIndex == mSystemLocaleIndex) { mEnginesHelper.updateLocalePrefForEngine(getEngineName(), locale);
// Use empty locale, it will default to the system language
mEnginesHelper.updateLocalePrefForEngine(getEngineName(), "");
} else {
mEnginesHelper.updateLocalePrefForEngine(getEngineName(), locale);
}
if (getEngineName().equals(mTts.getCurrentEngine())) { if (getEngineName().equals(mTts.getCurrentEngine())) {
String[] localeArray = TtsEngines.parseLocalePref(locale); if (!locale.isEmpty()) {
if (localeArray != null) { String[] localeArray = TtsEngines.parseLocalePref(locale);
mTts.setLanguage(new Locale(localeArray[0], localeArray[1], localeArray[2])); if (localeArray != null) {
mTts.setLanguage(new Locale(localeArray[0], localeArray[1], localeArray[2]));
}
} else {
// Empty locale means "use system default"
mTts.setLanguage(Locale.getDefault());
} }
} }
} }