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

Commit 43af6366 authored by Mihai Nita's avatar Mihai Nita
Browse files

Framework: change the TTS text to use the current locale

Google TTS currently does not support language auto-switching.
Also, not all languages are available in TTS at all times.
This means that TTS cannot properly handle text in other languages / scripts
than the current language.
Languages with different scripts would not be read at all, and the others
would be read with "bad pronunciation", to the point of being unrecognizable.

This change is not a full fix, but makes things slightly better by using
the default locale for the contentDescription in the language / region lists.

This might be a bit unsettling, as the label will not match the sound.
The label will show "Deutsch" or "Русский" and text-to-speech will say "German"
or "Russian" (for English UI), or "Allemand" or "Russe" (if the UI is French).
Might also say nothing, if the current UI language has no text-to-speech engine.

But this is the best we can do, and better that what we get if we do nothing.

Bug: 28087937
Change-Id: I7390a063708647e022be29161c2f2bedc19896ae
parent 2f87f1d1
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -126,12 +126,18 @@ public class LocaleStore {
            return mFullCountryNameNative;
            return mFullCountryNameNative;
        }
        }


        String getFullCountryNameInUiLanguage() {
            // We don't cache the UI name because the default locale keeps changing
            return LocaleHelper.getDisplayCountry(mLocale);
        }

        /** Returns the name of the locale in the language of the UI.
        /** Returns the name of the locale in the language of the UI.
         * It is used for search, but never shown.
         * It is used for search, but never shown.
         * For instance German will show as "Deutsch" in the list, but we will also search for
         * For instance German will show as "Deutsch" in the list, but we will also search for
         * "allemand" if the system UI is in French.
         * "allemand" if the system UI is in French.
         */
         */
        public String getFullNameInUiLanguage() {
        public String getFullNameInUiLanguage() {
            // We don't cache the UI name because the default locale keeps changing
            return LocaleHelper.getDisplayName(mLocale, true /* sentence case */);
            return LocaleHelper.getDisplayName(mLocale, true /* sentence case */);
        }
        }


@@ -154,6 +160,14 @@ public class LocaleStore {
            }
            }
        }
        }


        String getContentDescription(boolean countryMode) {
            if (countryMode) {
                return getFullCountryNameInUiLanguage();
            } else {
                return getFullNameInUiLanguage();
            }
        }

        public boolean getChecked() {
        public boolean getChecked() {
            return mIsChecked;
            return mIsChecked;
        }
        }
+1 −0
Original line number Original line Diff line number Diff line
@@ -159,6 +159,7 @@ public class SuggestedLocaleAdapter extends BaseAdapter implements Filterable {
                LocaleStore.LocaleInfo item = (LocaleStore.LocaleInfo) getItem(position);
                LocaleStore.LocaleInfo item = (LocaleStore.LocaleInfo) getItem(position);
                text.setText(item.getLabel(mCountryMode));
                text.setText(item.getLabel(mCountryMode));
                text.setTextLocale(item.getLocale());
                text.setTextLocale(item.getLocale());
                text.setContentDescription(item.getContentDescription(mCountryMode));
                if (mCountryMode) {
                if (mCountryMode) {
                    int layoutDir = TextUtils.getLayoutDirectionFromLocale(item.getParent());
                    int layoutDir = TextUtils.getLayoutDirectionFromLocale(item.getParent());
                    //noinspection ResourceType
                    //noinspection ResourceType