From 3ab636f590e28256752c5672c491b78281ce370d Mon Sep 17 00:00:00 2001 From: tuancoltech Date: Fri, 11 Apr 2025 22:58:49 +0700 Subject: [PATCH 1/2] Remove the APIs for providing custom TTS language selection --- .../java/ai/elimu/common/utils/LanguageExt.kt | 24 -------------- .../repository/DefaultLanguageProviderImpl.kt | 13 -------- .../repository/language/LanguageProvider.kt | 6 ---- .../ai/elimu/common/utils/di/DataModule.kt | 32 ++----------------- .../common/utils/di/TextToSpeechWrapper.kt | 29 ++--------------- 5 files changed, 4 insertions(+), 100 deletions(-) delete mode 100644 utils/src/main/java/ai/elimu/common/utils/LanguageExt.kt delete mode 100644 utils/src/main/java/ai/elimu/common/utils/data/repository/DefaultLanguageProviderImpl.kt delete mode 100644 utils/src/main/java/ai/elimu/common/utils/data/repository/language/LanguageProvider.kt diff --git a/utils/src/main/java/ai/elimu/common/utils/LanguageExt.kt b/utils/src/main/java/ai/elimu/common/utils/LanguageExt.kt deleted file mode 100644 index b06da57..0000000 --- a/utils/src/main/java/ai/elimu/common/utils/LanguageExt.kt +++ /dev/null @@ -1,24 +0,0 @@ -package ai.elimu.common.utils - -import ai.elimu.model.v2.enums.Language -import java.util.Locale - -fun Language.toLocale(): Locale { - return when (this) { - Language.ENG -> Locale.US - Language.HIN -> Locale("hi", "IN") - Language.TGL -> Locale("fil", "PH") - Language.THA -> Locale("th", "TH") - else -> Locale.US - } -} - -fun String.toLanguage(): Language { - return when (this) { - Language.ENG.isoCode -> Language.ENG - Language.HIN.isoCode -> Language.HIN - Language.TGL.isoCode -> Language.TGL - Language.THA.isoCode -> Language.THA - else -> Language.ENG - } -} \ No newline at end of file diff --git a/utils/src/main/java/ai/elimu/common/utils/data/repository/DefaultLanguageProviderImpl.kt b/utils/src/main/java/ai/elimu/common/utils/data/repository/DefaultLanguageProviderImpl.kt deleted file mode 100644 index 2f727cf..0000000 --- a/utils/src/main/java/ai/elimu/common/utils/data/repository/DefaultLanguageProviderImpl.kt +++ /dev/null @@ -1,13 +0,0 @@ -package ai.elimu.common.utils.data.repository - -import ai.elimu.common.utils.data.repository.language.LanguageProvider - -class DefaultLanguageProviderImpl: LanguageProvider { - override fun getLanguage(): String { - return "" - } - - override fun getContentProviderId(): String { - return "ai.elimu.content_provider" - } -} \ No newline at end of file diff --git a/utils/src/main/java/ai/elimu/common/utils/data/repository/language/LanguageProvider.kt b/utils/src/main/java/ai/elimu/common/utils/data/repository/language/LanguageProvider.kt deleted file mode 100644 index 2fbd060..0000000 --- a/utils/src/main/java/ai/elimu/common/utils/data/repository/language/LanguageProvider.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ai.elimu.common.utils.data.repository.language - -interface LanguageProvider { - fun getLanguage(): String - fun getContentProviderId(): String -} \ No newline at end of file diff --git a/utils/src/main/java/ai/elimu/common/utils/di/DataModule.kt b/utils/src/main/java/ai/elimu/common/utils/di/DataModule.kt index 693abc4..26ba6d6 100644 --- a/utils/src/main/java/ai/elimu/common/utils/di/DataModule.kt +++ b/utils/src/main/java/ai/elimu/common/utils/di/DataModule.kt @@ -1,13 +1,9 @@ package ai.elimu.common.utils.di -import ai.elimu.common.utils.data.repository.DefaultLanguageProviderImpl import ai.elimu.common.utils.data.repository.TextToSpeechRepository import ai.elimu.common.utils.data.repository.TextToSpeechRepositoryImpl -import ai.elimu.common.utils.data.repository.language.LanguageProvider import ai.elimu.common.utils.data.repository.local.LocalTextToSpeechDataSource import ai.elimu.common.utils.data.repository.local.LocalTextToSpeechDataSourceImpl -import ai.elimu.common.utils.di.StringKey.LANGUAGE_CUSTOM -import ai.elimu.common.utils.di.StringKey.LANGUAGE_DEFAULT import android.content.Context import android.speech.tts.TextToSpeech import dagger.Binds @@ -17,9 +13,6 @@ import dagger.hilt.InstallIn import dagger.hilt.android.components.ViewModelComponent import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import dagger.multibindings.IntoMap -import dagger.multibindings.StringKey -import java.util.Optional // Tells Dagger this is a Dagger module @Module @@ -32,33 +25,12 @@ abstract class DataModule { abstract fun bindLocalTTSDataSource(dataSource: LocalTextToSpeechDataSourceImpl): LocalTextToSpeechDataSource } -object StringKey { - const val LANGUAGE_DEFAULT = "defaultLanguage" - const val LANGUAGE_CUSTOM = "customLanguage" -} - @Module @InstallIn(SingletonComponent::class) internal object TextToSpeechModule { - @StringKey(LANGUAGE_DEFAULT) - @Provides - @IntoMap - fun providesOptionalLanguageProvider(): Optional = Optional.empty() - - @Provides - fun providesLanguageProvider(providers: Map>): LanguageProvider { - val defaultImpl = DefaultLanguageProviderImpl() - return providers[LANGUAGE_CUSTOM]?.orElse(defaultImpl) ?: defaultImpl - } - @Provides fun providesTextToSpeech( - @ApplicationContext context: Context, - languageProvider: LanguageProvider - ): TextToSpeech = - TextToSpeechWrapper( - context, - languageProvider.getContentProviderId() - ).tts + @ApplicationContext context: Context + ): TextToSpeech = TextToSpeechWrapper(context).tts } diff --git a/utils/src/main/java/ai/elimu/common/utils/di/TextToSpeechWrapper.kt b/utils/src/main/java/ai/elimu/common/utils/di/TextToSpeechWrapper.kt index 2a25e65..22b690d 100644 --- a/utils/src/main/java/ai/elimu/common/utils/di/TextToSpeechWrapper.kt +++ b/utils/src/main/java/ai/elimu/common/utils/di/TextToSpeechWrapper.kt @@ -1,44 +1,19 @@ package ai.elimu.common.utils.di -import ai.elimu.common.utils.toLanguage -import ai.elimu.common.utils.toLocale -import ai.elimu.content_provider.utils.SharedDataKeys import android.content.Context -import android.net.Uri import android.speech.tts.TextToSpeech import android.util.Log -class TextToSpeechWrapper(context: Context, contentProviderId: String) { +class TextToSpeechWrapper(context: Context) { lateinit var tts: TextToSpeech private val TAG = "TextToSpeech" init { - val uri = Uri.parse("content://" + contentProviderId - + ".provider.shared_data/shared_data") - val cursor = context.contentResolver.query(uri, - null, null, null, null - ) - var contentProviderLanguage = "" - Log.v(TAG, "cursor: $cursor") - cursor?.use { - if (it.moveToNext()) { - val id = it.getInt(it.getColumnIndexOrThrow("_id")) - contentProviderLanguage = it.getString( - it.getColumnIndexOrThrow(SharedDataKeys.KEY_LANGUAGE) - ) - Log.d(TAG, "ContentProvider language: $id - $contentProviderLanguage") - } - } - - Log.d(TAG, "init TextToSpeech START language: $contentProviderLanguage") + Log.d(TAG, "init TextToSpeech START") tts = TextToSpeech(context) { status -> Log.d(TAG, "init TextToSpeech DONE. status: $status") if (status == TextToSpeech.SUCCESS) { tts.setSpeechRate(0.5f) - - if (contentProviderLanguage.isNotEmpty()) { - tts.setLanguage(contentProviderLanguage.lowercase().toLanguage().toLocale()) - } } else { Log.e(TAG, "TTS initialization failed with status: $status") } From 9938e127767563d5255120e893f3ea80198d188d Mon Sep 17 00:00:00 2001 From: tuancoltech Date: Sat, 12 Apr 2025 12:03:47 +0700 Subject: [PATCH 2/2] Prevent NPE because of null TTS voice --- .../data/repository/local/LocalTextToSpeechDataSourceImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/src/main/java/ai/elimu/common/utils/data/repository/local/LocalTextToSpeechDataSourceImpl.kt b/utils/src/main/java/ai/elimu/common/utils/data/repository/local/LocalTextToSpeechDataSourceImpl.kt index 4951865..a8b1690 100644 --- a/utils/src/main/java/ai/elimu/common/utils/data/repository/local/LocalTextToSpeechDataSourceImpl.kt +++ b/utils/src/main/java/ai/elimu/common/utils/data/repository/local/LocalTextToSpeechDataSourceImpl.kt @@ -15,7 +15,7 @@ class LocalTextToSpeechDataSourceImpl @Inject constructor( val params = Bundle().apply { putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId) } - Log.d("TextToSpeech", "speaking with tts language: " + tts.voice.locale) + Log.d("TextToSpeech", "speaking with tts language: " + tts.voice?.locale) tts.speak(text, queueMode.mode, params, utteranceId) }