From eb306b4c15d721c69255f02497d2bcebff0c265f Mon Sep 17 00:00:00 2001 From: Przemyslaw Szczepaniak Date: Tue, 10 Sep 2013 10:35:57 +0100 Subject: [PATCH] Fix for empty "Listen to an example" string. Because of bug in previous TTS related change (bugfix for hiding "Play TTS sample" if default language is not supported), settings stopped to call getSampleText() when it was established that current default language is supported. This change makes sure that getSampleText() is always called if language is supported. Bug: 10672535 Change-Id: I83bf7056e12ddbe2322b6a3f04552802037626aa --- .../settings/tts/TextToSpeechSettings.java | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java index 52ee4fda9b1..0ff7f4f9c7e 100644 --- a/src/com/android/settings/tts/TextToSpeechSettings.java +++ b/src/com/android/settings/tts/TextToSpeechSettings.java @@ -104,7 +104,17 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements private TtsEngines mEnginesHelper = null; private String mSampleText = ""; + + /** + * Default locale used by selected TTS engine, null if not connected to any engine. + */ private Locale mCurrentDefaultLocale; + + /** + * List of available locals of selected TTS engine, as returned by + * {@link TextToSpeech.Engine#ACTION_CHECK_TTS_DATA} activity. If empty, then activity + * was not yet called. + */ private List mAvailableStrLocals; /** @@ -263,7 +273,9 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements } private boolean evaluateDefaultLocale() { - if (mCurrentDefaultLocale == null) { + // Check if we are connected to the engine, and CHECK_VOICE_DATA returned list + // of available languages. + if (mCurrentDefaultLocale == null || mAvailableStrLocals == null) { return false; } int defaultAvailable = mTts.setLanguage(mCurrentDefaultLocale); @@ -277,18 +289,17 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements if (!TextUtils.isEmpty(mCurrentDefaultLocale.getVariant())) { defaultLocaleStr += "-" + mCurrentDefaultLocale.getVariant(); } - if (mAvailableStrLocals != null) { - for (String loc : mAvailableStrLocals) { - if (loc.equalsIgnoreCase(defaultLocaleStr)) { - notInAvailableLangauges = false; - break; - } + + for (String loc : mAvailableStrLocals) { + if (loc.equalsIgnoreCase(defaultLocaleStr)) { + notInAvailableLangauges = false; + break; } } if (defaultAvailable == TextToSpeech.LANG_NOT_SUPPORTED || defaultAvailable == TextToSpeech.LANG_MISSING_DATA || - mAvailableStrLocals == null || notInAvailableLangauges) { + notInAvailableLangauges) { if (DBG) Log.d(TAG, "Default locale for this TTS engine is not supported."); updateEngineStatus(R.string.tts_status_not_supported); updateWidgetState(false); @@ -557,8 +568,15 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, engine); mAvailableStrLocals = data.getStringArrayListExtra( - TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES); - evaluateDefaultLocale(); + TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES); + if (mAvailableStrLocals == null) { + Log.e(TAG, "Voice data check complete, but no available voices found"); + // Set mAvailableStrLocals to empty list + mAvailableStrLocals = new ArrayList(); + } + if (evaluateDefaultLocale()) { + getSampleText(); + } final int engineCount = mEnginePreferenceCategory.getPreferenceCount(); for (int i = 0; i < engineCount; ++i) {