diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 990452a3a8..d0e5353169 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -22,6 +22,8 @@ package eu.faircode.email; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources; import android.net.Uri; import android.text.TextUtils; @@ -43,6 +45,7 @@ import java.util.Calendar; import java.util.Date; import java.util.Enumeration; import java.util.List; +import java.util.Locale; import java.util.regex.Pattern; import javax.mail.Address; @@ -484,19 +487,24 @@ public class EntityRule { } private boolean onActionTts(Context context, EntityMessage message, JSONObject jargs) { + Locale locale = (message.language == null ? Locale.getDefault() : new Locale(message.language)); + + Configuration configuration = new Configuration(context.getResources().getConfiguration()); + configuration.setLocale(locale); + Resources res = context.createConfigurationContext(configuration).getResources(); + StringBuilder sb = new StringBuilder(); - sb.append(context.getString(R.string.title_rule_tts_prefix)); + sb.append(context.getString(R.string.title_rule_tts_prefix)).append(". "); if (message.from != null && message.from.length > 0) - sb.append(' ').append(context.getString(R.string.title_from)) - .append(' ').append(MessageHelper.formatAddressesShort(message.from)); + sb.append(res.getString(R.string.title_rule_tts_from)) + .append(' ').append(MessageHelper.formatAddressesShort(message.from)).append(". "); if (!TextUtils.isEmpty(message.subject)) - sb.append(' ').append(context.getString(R.string.title_subject)) - .append(' ').append(message.subject); + sb.append(res.getString(R.string.title_rule_tts_subject)) + .append(' ').append(message.subject).append(". "); - EntityLog.log(context, "TTS queued language=" + message.language + " text=" + sb.toString()); - TTSHelper.speak(context, "rule:" + message.id, sb.toString(), message.language); + TTSHelper.speak(context, "rule:" + message.id, sb.toString(), locale); return true; } diff --git a/app/src/main/java/eu/faircode/email/TTSHelper.java b/app/src/main/java/eu/faircode/email/TTSHelper.java index 5ebf1e05a6..dbbc7258fe 100644 --- a/app/src/main/java/eu/faircode/email/TTSHelper.java +++ b/app/src/main/java/eu/faircode/email/TTSHelper.java @@ -3,25 +3,27 @@ package eu.faircode.email; import android.content.Context; import android.speech.tts.TextToSpeech; +import androidx.annotation.NonNull; + import java.util.Locale; public class TTSHelper { private static boolean initialized; private static TextToSpeech instance; - static void speak(Context context, final String utteranceId, final String text, final String language) { + static void speak( + @NonNull final Context context, + @NonNull final String utteranceId, + @NonNull final String text, + @NonNull final Locale locale) { // https://developer.android.com/reference/android/speech/tts/TextToSpeech // https://android-developers.googleblog.com/2009/09/introduction-to-text-to-speech-in.html final Runnable speak = new Runnable() { @Override public void run() { - if (language != null) { - Locale loc = new Locale(language); - if (instance.setLanguage(loc) < 0) - EntityLog.log(context, "TTS unavailable language=" + loc); - } - + boolean available = (instance.setLanguage(locale) >= 0); + EntityLog.log(context, "TTS queued language=" + locale + " available=" + available + " text=" + text); instance.speak(text, TextToSpeech.QUEUE_ADD, null, utteranceId); } }; diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 06b81f31e6..7259fe774e 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -930,6 +930,7 @@ Verplaatsen Kopiƫren (label) Beantwoorden + Tekst-naar-spraak Automatisering Bewerk regel Regel is van toepassing op @@ -965,6 +966,10 @@ Header condities kunnen niet worden gecontroleerd Overeenkomende berichten Geen overeenkomende berichten + Instellingen controleren + Nieuw bericht + Van + Onderwerp Synchroniseren Mappen Berichten diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 906300a51c..1b28bf192f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1098,6 +1098,8 @@ Check setup New message + From + Subject Synchronize Folders