am 5a38df26: Call setLanguage() when the TTS locale is changed in settings.

* commit '5a38df2648f5e8246d20a46675bd99cc5ea368e0':
  Call setLanguage() when the TTS locale is changed in settings.
This commit is contained in:
Narayan Kamath
2012-01-05 07:40:33 -08:00
committed by Android Git Automerger
2 changed files with 40 additions and 22 deletions

View File

@@ -192,23 +192,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
checkVoiceData(mCurrentEngine);
}
private void maybeUpdateTtsLanguage(String currentEngine) {
if (currentEngine != null && mTts != null) {
final String localeString = mEnginesHelper.getLocalePrefForEngine(
currentEngine);
if (localeString != null) {
final String[] locale = TtsEngines.parseLocalePref(localeString);
final Locale newLocale = new Locale(locale[0], locale[1], locale[2]);
final Locale engineLocale = mTts.getLanguage();
if (!newLocale.equals(engineLocale)) {
if (DBG) Log.d(TAG, "Loading language ahead of sample check : " + locale);
mTts.setLanguage(newLocale);
}
}
}
}
/**
* Ask the current default engine to return a string of sample text to be
* spoken to the user.
@@ -218,7 +201,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
if (TextUtils.isEmpty(currentEngine)) currentEngine = mTts.getDefaultEngine();
maybeUpdateTtsLanguage(currentEngine);
Locale currentLocale = mTts.getLanguage();
// TODO: This is currently a hidden private API. The intent extras

View File

@@ -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);
}