From f92e13270de30f9a063da3b2a9c9740387e4b5c5 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 23 Oct 2023 11:15:33 -0400 Subject: [PATCH] Solves NPE when the TextToSpeech engine isn't ready. --- .../service/tts/TextToSpeechEngine.kt | 46 ++++++++++--------- .../service/tts/TextToSpeechHelper.kt | 22 ++++----- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechEngine.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechEngine.kt index 2024ee9e9..21b44bb26 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechEngine.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechEngine.kt @@ -49,28 +49,30 @@ class TextToSpeechEngine private constructor() { fun initTTS(context: Context, message: String) { tts = TextToSpeech(context) { if (it == TextToSpeech.SUCCESS) { - tts!!.language = defLanguage - tts!!.setPitch(defaultPitch) - tts!!.setSpeechRate(defaultSpeed) - tts!!.setListener( - onStart = { - onStartListener?.invoke() - }, - onError = { e -> - e?.let { error -> - onErrorListener?.invoke(error) + tts?.let { + it.language = defLanguage + it.setPitch(defaultPitch) + it.setSpeechRate(defaultSpeed) + it.setListener( + onStart = { + onStartListener?.invoke() + }, + onError = { e -> + e?.let { error -> + onErrorListener?.invoke(error) + } + }, + onRange = { start, end -> + if (this@TextToSpeechEngine.message != null) { + onHighlightListener?.invoke(start, end) + } + }, + onDone = { + onStartListener?.invoke() } - }, - onRange = { start, end -> - if (this@TextToSpeechEngine.message != null) { - onHighlightListener?.invoke(start, end) - } - }, - onDone = { - onStartListener?.invoke() - } - ) - speak(message) + ) + speak(message) + } } else { onErrorListener?.invoke(getErrorText(it)) } @@ -78,7 +80,7 @@ class TextToSpeechEngine private constructor() { } private fun speak(message: String): TextToSpeechEngine { - tts!!.speak( + tts?.speak( message, TextToSpeech.QUEUE_FLUSH, null, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt index 222eee97d..0526eefed 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/tts/TextToSpeechHelper.kt @@ -21,7 +21,7 @@ class TextToSpeechHelper private constructor(private val context: WeakReference< private var message: String? = null - private var tts: TextToSpeechEngine? = null + private var ttsEngine: TextToSpeechEngine? = null private var onStart: (() -> Unit)? = null @@ -44,19 +44,19 @@ class TextToSpeechHelper private constructor(private val context: WeakReference< } private fun initTTS() = context.get()?.run { - tts = TextToSpeechEngine.getInstance() + ttsEngine = TextToSpeechEngine.getInstance() .setOnCompletionListener { onDoneListener?.invoke() } .setOnErrorListener { onErrorListener?.invoke(it) } .setOnStartListener { onStart?.invoke() } } fun speak(message: String): TextToSpeechHelper { - if (tts == null) { + if (ttsEngine == null) { initTTS() } this.message = message - tts?.initTTS( + ttsEngine?.initTTS( appContext, message ) @@ -70,8 +70,8 @@ class TextToSpeechHelper private constructor(private val context: WeakReference< */ fun highlight(): TextToSpeechHelper { if (message == null) throw Exception("Message can't be null for highlighting !! Call speak() first") - tts?.setHighlightedMessage(message!!) - tts?.setOnHighlightListener { i, i2 -> + ttsEngine?.setHighlightedMessage(message!!) + ttsEngine?.setOnHighlightListener { i, i2 -> onHighlightListener?.invoke(Pair(i, i2)) } return this @@ -86,8 +86,8 @@ class TextToSpeechHelper private constructor(private val context: WeakReference< fun destroy( action: (() -> Unit) = {} ) { - tts?.destroy() - tts = null + ttsEngine?.destroy() + ttsEngine = null action.invoke() INSTANCE = null } @@ -118,7 +118,7 @@ class TextToSpeechHelper private constructor(private val context: WeakReference< } fun setLanguage(locale: Locale): TextToSpeechHelper { - tts?.setLanguage(locale) + ttsEngine?.setLanguage(locale) return this } @@ -126,12 +126,12 @@ class TextToSpeechHelper private constructor(private val context: WeakReference< pitch: Float = DEF_SPEECH_AND_PITCH, speed: Float = DEF_SPEECH_AND_PITCH ): TextToSpeechHelper { - tts?.setPitchAndSpeed(pitch, speed) + ttsEngine?.setPitchAndSpeed(pitch, speed) return this } fun resetPitchAndSpeed(): TextToSpeechHelper { - tts?.resetPitchAndSpeed() + ttsEngine?.resetPitchAndSpeed() return this }