Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 0 additions & 24 deletions utils/src/main/java/ai/elimu/common/utils/LanguageExt.kt

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
32 changes: 2 additions & 30 deletions utils/src/main/java/ai/elimu/common/utils/di/DataModule.kt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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<LanguageProvider> = Optional.empty()

@Provides
fun providesLanguageProvider(providers: Map<String, @JvmSuppressWildcards Optional<LanguageProvider>>): 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
}
Original file line number Diff line number Diff line change
@@ -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")
}
Expand Down
Loading