summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/tts/TextToSpeechSettings.java
diff options
context:
space:
mode:
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>2013-08-06 13:55:52 +0100
committerPrzemyslaw Szczepaniak <pszczepaniak@google.com>2013-08-06 13:55:52 +0100
commit6ada2d5547a161578b54e7b8ca979f06b6c911ff (patch)
treeb7cccd25c9e046d814bacffec49661ee2138a152 /src/com/android/settings/tts/TextToSpeechSettings.java
parent5459b722ca95b16c8156387ba9cac3967b231997 (diff)
downloadpackages_apps_Settings-6ada2d5547a161578b54e7b8ca979f06b6c911ff.zip
packages_apps_Settings-6ada2d5547a161578b54e7b8ca979f06b6c911ff.tar.gz
packages_apps_Settings-6ada2d5547a161578b54e7b8ca979f06b6c911ff.tar.bz2
State that TTS language is not supported if not in available list.
Bad TTS implementation of isLanguageAvailable may cause settings to think that given language is available. This change adds additional check, by searching locale in list of available locales returned form TTS CheckVoiceData activity. Bug: 9982002 Change-Id: Ic91cd1218349b8241e3f40f2343df52f3d900544
Diffstat (limited to 'src/com/android/settings/tts/TextToSpeechSettings.java')
-rw-r--r--src/com/android/settings/tts/TextToSpeechSettings.java47
1 files changed, 44 insertions, 3 deletions
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index 10ac575..fa48a3f 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -42,6 +42,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.widget.Checkable;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
@@ -104,6 +105,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
private String mSampleText = "";
private Locale mCurrentDefaultLocale;
+ private List<String> mAvailableStrLocals;
/**
* The initialization listener used when we are initalizing the settings
@@ -144,6 +146,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
mDefaultRatePref = (ListPreference) findPreference(KEY_DEFAULT_RATE);
mEngineStatus = findPreference(KEY_STATUS);
+ updateEngineStatus(R.string.tts_status_checking);
mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener);
mEnginesHelper = new TtsEngines(getActivity().getApplicationContext());
@@ -253,17 +256,50 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
mCurrentDefaultLocale = defaultLocale;
int defaultAvailable = mTts.setLanguage(defaultLocale);
- if (defaultAvailable == TextToSpeech.LANG_NOT_SUPPORTED) {
+ if (evaluateDefaultLocale()) {
+ getSampleText();
+ }
+ }
+
+ private boolean evaluateDefaultLocale() {
+ if (mCurrentDefaultLocale == null) {
+ return false;
+ }
+ int defaultAvailable = mTts.setLanguage(mCurrentDefaultLocale);
+
+ // Check if language is listed in CheckVoices Action result as available voice.
+ String defaultLocaleStr = mCurrentDefaultLocale.getISO3Language();
+ boolean notInAvailableLangauges = true;
+ if (!TextUtils.isEmpty(mCurrentDefaultLocale.getISO3Country())) {
+ defaultLocaleStr += "-" + mCurrentDefaultLocale.getISO3Country();
+ }
+ if (!TextUtils.isEmpty(mCurrentDefaultLocale.getVariant())) {
+ defaultLocaleStr += "-" + mCurrentDefaultLocale.getVariant();
+ }
+ if (mAvailableStrLocals != null) {
+ 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) {
if (DBG) Log.d(TAG, "Default locale for this TTS engine is not supported.");
- updateWidgetState(false);
updateEngineStatus(R.string.tts_status_not_supported);
+ updateWidgetState(false);
+ return false;
} else {
if (isNetworkRequiredForSynthesis()) {
updateEngineStatus(R.string.tts_status_requires_network);
} else {
updateEngineStatus(R.string.tts_status_ok);
}
- getSampleText();
+ updateWidgetState(true);
+ return true;
}
}
@@ -431,6 +467,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
// Disable the "play sample text" preference and the speech
// rate preference while the engine is being swapped.
updateWidgetState(false);
+ updateEngineStatus(R.string.tts_status_checking);
// Keep track of the previous engine that was being used. So that
// we can reuse the previous engine.
@@ -515,6 +552,10 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, engine);
+ mAvailableStrLocals = data.getStringArrayListExtra(
+ TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
+ evaluateDefaultLocale();
+
final int engineCount = mEnginePreferenceCategory.getPreferenceCount();
for (int i = 0; i < engineCount; ++i) {
final Preference p = mEnginePreferenceCategory.getPreference(i);