summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/tts/TtsEngineSettingsFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/tts/TtsEngineSettingsFragment.java')
-rw-r--r--src/com/android/settings/tts/TtsEngineSettingsFragment.java44
1 files changed, 40 insertions, 4 deletions
diff --git a/src/com/android/settings/tts/TtsEngineSettingsFragment.java b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
index 18d1fdb..fcc2f2e 100644
--- a/src/com/android/settings/tts/TtsEngineSettingsFragment.java
+++ b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
@@ -51,6 +51,25 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
private Preference mInstallVoicesPreference;
private Intent mEngineSettingsIntent;
+ private TextToSpeech mTts;
+
+ private final TextToSpeech.OnInitListener mTtsInitListener = new TextToSpeech.OnInitListener() {
+ @Override
+ public void onInit(int status) {
+ if (status != TextToSpeech.SUCCESS) {
+ finishFragment();
+ } else {
+ getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mLocalePreference.setEnabled(true);
+ updateVoiceDetails();
+ }
+ });
+ }
+ }
+ };
+
public TtsEngineSettingsFragment() {
super();
}
@@ -83,7 +102,15 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
}
mInstallVoicesPreference.setEnabled(false);
- updateVoiceDetails();
+ mLocalePreference.setEnabled(false);
+ mTts = new TextToSpeech(getActivity().getApplicationContext(), mTtsInitListener,
+ getEngineName());
+ }
+
+ @Override
+ public void onDestroy() {
+ mTts.shutdown();
+ super.onDestroy();
}
private void updateVoiceDetails() {
@@ -153,8 +180,7 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
mLocalePreference.setValueIndex(selectedLanguageIndex);
} else {
mLocalePreference.setValueIndex(0);
- mEnginesHelper.updateLocalePrefForEngine(getEngineName(),
- availableLangs.get(0));
+ updateLanguageTo(availableLangs.get(0));
}
}
@@ -191,13 +217,23 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference == mLocalePreference) {
- mEnginesHelper.updateLocalePrefForEngine(getEngineName(), (String) newValue);
+ updateLanguageTo((String) newValue);
return true;
}
return false;
}
+ private void updateLanguageTo(String locale) {
+ mEnginesHelper.updateLocalePrefForEngine(getEngineName(), locale);
+ if (getEngineName().equals(mTts.getCurrentEngine())) {
+ String[] localeArray = TtsEngines.parseLocalePref(locale);
+ if (localeArray != null) {
+ mTts.setLanguage(new Locale(localeArray[0], localeArray[1], localeArray[2]));
+ }
+ }
+ }
+
private String getEngineName() {
return getArguments().getString(TtsEnginePreference.FRAGMENT_ARGS_NAME);
}