Language loading / availablity should repsect defaults enforcement.

There is no point loading a language that will never be used.
It is in fact harmful, because the engine might load it and
then receive a request for the default voice and have to load
the default voice again.

Change-Id: I8082f28d15b6e325d6a39d439b66753711a2c244
This commit is contained in:
Narayan Kamath
2011-06-02 17:28:57 +01:00
parent f9886f3ee9
commit 7a3af86dc0

View File

@@ -55,6 +55,8 @@ public abstract class TextToSpeechService extends Service {
private CallbackMap mCallbacks;
private int mDefaultAvailability = TextToSpeech.LANG_NOT_SUPPORTED;
@Override
public void onCreate() {
if (DBG) Log.d(TAG, "onCreate()");
@@ -71,7 +73,8 @@ public abstract class TextToSpeechService extends Service {
mCallbacks = new CallbackMap();
// Load default language
onLoadLanguage(getDefaultLanguage(), getDefaultCountry(), getDefaultVariant());
mDefaultAvailability = onLoadLanguage(getDefaultLanguage(),
getDefaultCountry(), getDefaultVariant());
}
@Override
@@ -651,17 +654,43 @@ public abstract class TextToSpeechService extends Service {
return onGetLanguage();
}
/*
* If defaults are enforced, then no language is "available" except
* perhaps the default language selected by the user.
*/
public int isLanguageAvailable(String lang, String country, String variant) {
if (areDefaultsEnforced()) {
if (isDefault(lang, country, variant)) {
return mDefaultAvailability;
} else {
return TextToSpeech.LANG_NOT_SUPPORTED;
}
}
return onIsLanguageAvailable(lang, country, variant);
}
/*
* There is no point loading a non default language if defaults
* are enforced.
*/
public int loadLanguage(String lang, String country, String variant) {
if (areDefaultsEnforced()) {
if (isDefault(lang, country, variant)) {
return mDefaultAvailability;
} else {
return TextToSpeech.LANG_NOT_SUPPORTED;
}
}
return onLoadLanguage(lang, country, variant);
}
public void setCallback(String packageName, ITextToSpeechCallback cb) {
mCallbacks.setCallback(packageName, cb);
}
private boolean isDefault(String lang, String country, String variant) {
return Locale.getDefault().equals(new Locale(lang, country, variant));
}
};
private class CallbackMap extends RemoteCallbackList<ITextToSpeechCallback> {