From c9b3778ecc705f85e73dfaacbb1da82a4a47947d Mon Sep 17 00:00:00 2001 From: gekeleda Date: Fri, 26 Sep 2025 13:26:10 +0200 Subject: [PATCH] [android] Consider all langs available in TTS engine Signed-off-by: gekeleda --- .../app/organicmaps/sdk/sound/TtsPlayer.java | 60 +++++++++++++------ 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/android/sdk/src/main/java/app/organicmaps/sdk/sound/TtsPlayer.java b/android/sdk/src/main/java/app/organicmaps/sdk/sound/TtsPlayer.java index 2b79daaed..97a036390 100644 --- a/android/sdk/src/main/java/app/organicmaps/sdk/sound/TtsPlayer.java +++ b/android/sdk/src/main/java/app/organicmaps/sdk/sound/TtsPlayer.java @@ -26,6 +26,7 @@ import app.organicmaps.sdk.util.log.Logger; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Set; /** * {@code TtsPlayer} class manages available TTS voice languages. @@ -131,17 +132,6 @@ public enum TtsPlayer return (lang != null && setLanguageInternal(lang)); } - private static @Nullable LanguageData getDefaultLanguage(List langs) - { - LanguageData res; - - // Try default app locale (en.US) - res = findSupportedLanguage(DEFAULT_LOCALE, langs); - if (res != null && res.downloaded) - return res; - return null; - } - public static @Nullable LanguageData getSelectedLanguage(List langs) { return findSupportedLanguage(Config.TTS.getLanguage(), langs); @@ -166,6 +156,32 @@ public enum TtsPlayer return null; } + private @Nullable LanguageData getTTSLanguage(List langs) { + LanguageData res; + + // Try all TTS installed languages + Set ttsLocales = mTts.getAvailableLanguages(); + for(Locale loc : ttsLocales) { + res = findSupportedLanguage(loc, langs); + if (res != null && res.downloaded) + return res; + } + + return null; + + } + + private static @Nullable LanguageData getDefaultLanguage(List langs) + { + LanguageData res; + + // Try default app locale (en.US) + res = findSupportedLanguage(DEFAULT_LOCALE, langs); + if (res != null && res.downloaded) + return res; + return null; + } + private void lockDown() { mUnavailable = true; @@ -356,25 +372,31 @@ public enum TtsPlayer LanguageData res = getSelectedLanguage(outList); if (res != null && res.downloaded) { - Logger.d("TtsPlayer", "Selected locale " + res.internalCode + " is available and downloaded"); + Logger.d("TtsPlayer", "Selected locale " + res.internalCode + " will be used for TTS"); return res; } - Logger.d("TtsPlayer", "Selected locale " + Config.TTS.getLanguage() + " is not available or not downloaded, trying system locales..."); - res = getSystemLanguage(outList); + res = getSystemLanguage(outList); if (res != null && res.downloaded) { - Logger.d("TtsPlayer", "System locale " + res.internalCode + " is available and downloaded"); + Logger.d("TtsPlayer", "System locale " + res.internalCode + " will be used for TTS"); return res; } + Logger.d("TtsPlayer", "None of the system locales are available, or they are not downloaded, trying TTS engine locales..."); - Logger.d("TtsPlayer", "None of the system locales are available, or they are not downloaded, trying default locale..."); - res = getDefaultLanguage(outList); - + res = getTTSLanguage(outList); if (res != null && res.downloaded) { - Logger.d("TtsPlayer", "Default locale " + res.internalCode + " is available and downloaded"); + Logger.d("TtsPlayer", "TTS locale " + res.internalCode + " will be used for TTS"); + return res; + } + Logger.d("TtsPlayer", "None of the TTS engine locales are available, or they are not downloaded, trying default locale..."); + + res = getDefaultLanguage(outList); + if (res != null && res.downloaded) + { + Logger.d("TtsPlayer", "Default locale " + res.internalCode + " will be used for TTS"); return res; }