From 286d016a2473b0eef0e6726995960fa50d06553c Mon Sep 17 00:00:00 2001 From: Gonzalo Pesquero Date: Mon, 28 Aug 2023 09:17:31 +0200 Subject: [PATCH] [android] Add voice test in settings menu Signed-off-by: Gonzalo Pesquero --- .../settings/SettingsPrefsFragment.java | 35 ++++- .../java/app/organicmaps/sound/TtsPlayer.java | 2 +- .../src/main/res/values/donottranslate.xml | 1 + .../app/src/main/res/values/string-arrays.xml | 4 + android/app/src/main/res/xml/prefs_main.xml | 8 +- data/strings/strings.txt | 131 ++++++++++++++++++ 6 files changed, 177 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java b/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java index 553ed4a0cf..feda754bb2 100644 --- a/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java +++ b/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java @@ -40,6 +40,8 @@ import app.organicmaps.util.Utils; import app.organicmaps.util.log.LogsManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -57,6 +59,11 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment private ListPreference mTtsPrefLanguages; @Nullable private Preference mTtsLangInfo; + @Nullable + private Preference mTtsVoiceTest; + + private List mTtsTestStringArray; + private int mTestStringIndex; private PreferenceScreen mPreferenceScreen; @@ -79,6 +86,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment mTtsPrefLanguages.setEnabled(false); if (mTtsLangInfo != null) mTtsLangInfo.setSummary(R.string.prefs_languages_information_off); + if (mTtsVoiceTest != null) + mTtsVoiceTest.setEnabled(false); root.setSummary(R.string.off); @@ -92,6 +101,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment root.setSummary(R.string.on); if (mTtsPrefEnabled != null) mTtsPrefEnabled.setTitle(R.string.on); + if (mTtsVoiceTest != null) + mTtsVoiceTest.setEnabled(true); if (mCurrentLanguage != null && mCurrentLanguage.downloaded) { @@ -144,7 +155,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment updateTts(); } - // Use this method only on TTS screen. Prerequisites: mTtsPrefEnabled, mTtsPrefLanguages and mTtsLangInfo are not null. + // Use this method only on TTS screen. Prerequisites: mTtsPrefEnabled, mTtsPrefLanguages, mTtsVoiceTest and mTtsLangInfo are not null. private void updateTts() { enableListeners(false); @@ -163,6 +174,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment mTtsPrefEnabled.setTitle(R.string.off); mTtsPrefLanguages.setEnabled(false); mTtsPrefLanguages.setSummary(null); + mTtsVoiceTest.setEnabled(false); mTtsLangInfo.setSummary(R.string.prefs_languages_information_off); root.setSummary(R.string.off); @@ -174,6 +186,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment mTtsPrefEnabled.setChecked(enabled); mTtsPrefEnabled.setSummary(null); mTtsPrefEnabled.setTitle(enabled ? R.string.on : R.string.off); + mTtsVoiceTest.setEnabled(enabled); mTtsLangInfo.setSummary(enabled ? R.string.prefs_languages_information : R.string.prefs_languages_information_off); @@ -200,6 +213,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment mTtsPrefLanguages.setSummary(available ? mCurrentLanguage.name : null); mTtsPrefLanguages.setValue(available ? mCurrentLanguage.internalCode : null); mTtsPrefEnabled.setChecked(available && TtsPlayer.isEnabled()); + mTtsVoiceTest.setEnabled(enabled && available && TtsPlayer.isEnabled()); enableListeners(true); } @@ -263,6 +277,25 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment mTtsPrefEnabled = getPreference(getString(R.string.pref_tts_enabled)); mTtsPrefLanguages = getPreference(getString(R.string.pref_tts_language)); mTtsLangInfo = getPreference(getString(R.string.pref_tts_info)); + mTtsVoiceTest = getPreference(getString(R.string.pref_tts_test_voice)); + + // Initialize TTS test strings. + mTtsTestStringArray = Arrays.asList(getResources().getStringArray(R.array.app_tips)); + Collections.shuffle(mTtsTestStringArray); + mTestStringIndex = 0; + + if (mTtsVoiceTest != null) + { + mTtsVoiceTest.setOnPreferenceClickListener(pref -> { + Utils.showSnackbar(getView(), getString(R.string.pref_tts_playing_test_voice)); + TtsPlayer.INSTANCE.speak(mTtsTestStringArray.get(mTestStringIndex)); + mTestStringIndex++; + if (mTestStringIndex >= mTtsTestStringArray.size()) + mTestStringIndex = 0; + return true; + }); + } + initTtsLangInfoLink(); updateTts(); } diff --git a/android/app/src/main/java/app/organicmaps/sound/TtsPlayer.java b/android/app/src/main/java/app/organicmaps/sound/TtsPlayer.java index e497bfc4de..be3b92e233 100644 --- a/android/app/src/main/java/app/organicmaps/sound/TtsPlayer.java +++ b/android/app/src/main/java/app/organicmaps/sound/TtsPlayer.java @@ -186,7 +186,7 @@ public enum TtsPlayer implements Initializable return (INSTANCE.mTts != null && !INSTANCE.mUnavailable && !INSTANCE.mInitializing); } - private void speak(String textToSpeak) + public void speak(String textToSpeak) { if (Config.isTtsEnabled()) try diff --git a/android/app/src/main/res/values/donottranslate.xml b/android/app/src/main/res/values/donottranslate.xml index 1a73d4ad29..b349c8044e 100644 --- a/android/app/src/main/res/values/donottranslate.xml +++ b/android/app/src/main/res/values/donottranslate.xml @@ -19,6 +19,7 @@ TtsScreen TtsEnabled TtsLanguage + TtsTestVoice TtsInfo TtsInfoLink SpeedCameras diff --git a/android/app/src/main/res/values/string-arrays.xml b/android/app/src/main/res/values/string-arrays.xml index 673b52762f..0fc54910b4 100644 --- a/android/app/src/main/res/values/string-arrays.xml +++ b/android/app/src/main/res/values/string-arrays.xml @@ -1,5 +1,9 @@ + + @string/app_tip_00 + + @string/kilometres @string/miles diff --git a/android/app/src/main/res/xml/prefs_main.xml b/android/app/src/main/res/xml/prefs_main.xml index 4125a0f2ad..7bb06f87d1 100644 --- a/android/app/src/main/res/xml/prefs_main.xml +++ b/android/app/src/main/res/xml/prefs_main.xml @@ -136,20 +136,24 @@ android:title="@string/pref_tts_language_title" app:singleLineTitle="false" android:order="2"/> + + android:order="4"/> + android:order="5"/>