Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a3af86d authored by Narayan Kamath's avatar Narayan Kamath
Browse files

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
parent f9886f3e
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -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> {