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); 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 * Ask the current default engine to return a string of sample text to be
* spoken to the user. * spoken to the user.
@@ -218,7 +201,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
if (TextUtils.isEmpty(currentEngine)) currentEngine = mTts.getDefaultEngine(); if (TextUtils.isEmpty(currentEngine)) currentEngine = mTts.getDefaultEngine();
maybeUpdateTtsLanguage(currentEngine);
Locale currentLocale = mTts.getLanguage(); Locale currentLocale = mTts.getLanguage();
// TODO: This is currently a hidden private API. The intent extras // 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 Preference mInstallVoicesPreference;
private Intent mEngineSettingsIntent; 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() { public TtsEngineSettingsFragment() {
super(); super();
} }
@@ -83,7 +102,15 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
} }
mInstallVoicesPreference.setEnabled(false); 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() { private void updateVoiceDetails() {
@@ -153,8 +180,7 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
mLocalePreference.setValueIndex(selectedLanguageIndex); mLocalePreference.setValueIndex(selectedLanguageIndex);
} else { } else {
mLocalePreference.setValueIndex(0); mLocalePreference.setValueIndex(0);
mEnginesHelper.updateLocalePrefForEngine(getEngineName(), updateLanguageTo(availableLangs.get(0));
availableLangs.get(0));
} }
} }
@@ -191,13 +217,23 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference == mLocalePreference) { if (preference == mLocalePreference) {
mEnginesHelper.updateLocalePrefForEngine(getEngineName(), (String) newValue); updateLanguageTo((String) newValue);
return true; return true;
} }
return false; 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() { private String getEngineName() {
return getArguments().getString(TtsEnginePreference.FRAGMENT_ARGS_NAME); return getArguments().getString(TtsEnginePreference.FRAGMENT_ARGS_NAME);
} }