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

Commit d0b92794 authored by Przemyslaw Szczepaniak's avatar Przemyslaw Szczepaniak
Browse files

Fix for TTS.setLanguage throwing MissingResourceException

Change I766f106b9165932de17de84bdd422d0fc0ae27f1 made getISO3*
methods throw MissingResourceException if locale was invalid.
This causes regression on last android release, where invalid
locale was silently ignored.

+ fix for .isLanguageAvailable

Bug: 8709594
Change-Id: Ieada6b90dc53cfdf0a4e2b4ca69854b811d0fec2
parent 4c95c537
Loading
Loading
Loading
Loading
+34 −4
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Set;

/**
@@ -1128,9 +1129,23 @@ public class TextToSpeech {
                if (loc == null) {
                    return LANG_NOT_SUPPORTED;
                }
                String language = loc.getISO3Language();
                String country = loc.getISO3Country();
                String language = null, country = null;
                try {
                    language = loc.getISO3Language();
                } catch (MissingResourceException e) {
                    Log.w(TAG, "Couldn't retrieve ISO 639-2/T language code for locale: " + loc, e);
                    return LANG_NOT_SUPPORTED;
                }

                try {
                    country = loc.getISO3Country();
                } catch (MissingResourceException e) {
                    Log.w(TAG, "Couldn't retrieve ISO 3166 country code for locale: " + loc, e);
                    return LANG_NOT_SUPPORTED;
                }

                String variant = loc.getVariant();

                // Check if the language, country, variant are available, and cache
                // the available parts.
                // Note that the language is not actually set here, instead it is cached so it
@@ -1195,8 +1210,23 @@ public class TextToSpeech {
        return runAction(new Action<Integer>() {
            @Override
            public Integer run(ITextToSpeechService service) throws RemoteException {
                return service.isLanguageAvailable(loc.getISO3Language(),
                        loc.getISO3Country(), loc.getVariant());
                String language = null, country = null;

                try {
                    language = loc.getISO3Language();
                } catch (MissingResourceException e) {
                    Log.w(TAG, "Couldn't retrieve ISO 639-2/T language code for locale: " + loc, e);
                    return LANG_NOT_SUPPORTED;
                }

                try {
                    country = loc.getISO3Country();
                } catch (MissingResourceException e) {
                    Log.w(TAG, "Couldn't retrieve ISO 3166 country code for locale: " + loc, e);
                    return LANG_NOT_SUPPORTED;
                }

                return service.isLanguageAvailable(language, country, loc.getVariant());
            }
        }, LANG_NOT_SUPPORTED, "isLanguageAvailable");
    }