From 5dd09c485a1eb88c24f81e098a0ff8200023a73e Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 1 Sep 2023 17:02:26 +0300 Subject: [PATCH] Updated on 2026-08-14 --- core/datasource/build.gradle.kts | 1 + .../datasource/di/AppThemeModeDataModule.kt | 29 +++++++++++++++ .../DefaultSelectedAppCurrencyStore.kt | 6 +--- .../local/apptheme/AppThemeModeStore.kt | 13 +++++++ .../apptheme/DefaultAppThemeModeStore.kt | 9 +++++ .../core/KeylessDataStoreDecorator.kt | 4 +++ data/app-theme/build.gradle.kts | 4 --- .../apptheme/DefaultAppThemeModeRepository.kt | 35 +++++++++++++++++++ .../apptheme/MockAppThemeModeRepository.kt | 19 ---------- .../apptheme/di/AppThemeModeDataModule.kt | 11 ++++-- 10 files changed, 100 insertions(+), 31 deletions(-) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/di/AppThemeModeDataModule.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/apptheme/AppThemeModeStore.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/apptheme/DefaultAppThemeModeStore.kt create mode 100644 data/app-theme/src/main/kotlin/com/tangem/data/apptheme/DefaultAppThemeModeRepository.kt delete mode 100644 data/app-theme/src/main/kotlin/com/tangem/data/apptheme/MockAppThemeModeRepository.kt diff --git a/core/datasource/build.gradle.kts b/core/datasource/build.gradle.kts index f304966f2a..3ab87d91ac 100644 --- a/core/datasource/build.gradle.kts +++ b/core/datasource/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { /** Project */ implementation(projects.core.utils) implementation(projects.libs.auth) + implementation(projects.domain.appTheme.models) implementation(projects.domain.tokens.models) implementation(projects.domain.wallets.models) diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/AppThemeModeDataModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/AppThemeModeDataModule.kt new file mode 100644 index 0000000000..2041fdee99 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/di/AppThemeModeDataModule.kt @@ -0,0 +1,29 @@ +package com.tangem.datasource.di + +import android.content.Context +import com.squareup.moshi.Moshi +import com.tangem.datasource.local.apptheme.AppThemeModeStore +import com.tangem.datasource.local.apptheme.DefaultAppThemeModeStore +import com.tangem.datasource.local.datastore.SharedPreferencesDataStore +import com.tangem.domain.apptheme.model.AppThemeMode +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +internal object AppThemeModeDataModule { + + @Provides + fun provideAppThemeModeStore(@ApplicationContext context: Context, @NetworkMoshi moshi: Moshi): AppThemeModeStore { + return DefaultAppThemeModeStore( + dataStore = SharedPreferencesDataStore( + preferencesName = "app_theme", + context = context, + adapter = moshi.adapter(AppThemeMode::class.java), + ), + ) + } +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt index b6d8f61ade..c79bf3045b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt @@ -7,8 +7,4 @@ import com.tangem.datasource.local.datastore.core.StringKeyDataStore internal class DefaultSelectedAppCurrencyStore( dataStore: StringKeyDataStore, -) : SelectedAppCurrencyStore, KeylessDataStoreDecorator(dataStore) { - override suspend fun isEmpty(): Boolean { - return getSyncOrNull() == null - } -} \ No newline at end of file +) : SelectedAppCurrencyStore, KeylessDataStoreDecorator(dataStore) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/apptheme/AppThemeModeStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/apptheme/AppThemeModeStore.kt new file mode 100644 index 0000000000..78e1fd514c --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/apptheme/AppThemeModeStore.kt @@ -0,0 +1,13 @@ +package com.tangem.datasource.local.apptheme + +import com.tangem.domain.apptheme.model.AppThemeMode +import kotlinx.coroutines.flow.Flow + +interface AppThemeModeStore { + + fun get(): Flow + + suspend fun store(item: AppThemeMode) + + suspend fun isEmpty(): Boolean +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/apptheme/DefaultAppThemeModeStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/apptheme/DefaultAppThemeModeStore.kt new file mode 100644 index 0000000000..483bf4b525 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/apptheme/DefaultAppThemeModeStore.kt @@ -0,0 +1,9 @@ +package com.tangem.datasource.local.apptheme + +import com.tangem.datasource.local.datastore.core.KeylessDataStoreDecorator +import com.tangem.datasource.local.datastore.core.StringKeyDataStore +import com.tangem.domain.apptheme.model.AppThemeMode + +internal class DefaultAppThemeModeStore( + dataStore: StringKeyDataStore, +) : AppThemeModeStore, KeylessDataStoreDecorator(dataStore) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt index 5e74e2f386..6010c456b5 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt @@ -22,6 +22,10 @@ internal abstract class KeylessDataStoreDecorator( store(Unit, item) } + open suspend fun isEmpty(): Boolean { + return getSyncOrNull() == null + } + private companion object { const val STRING_KEY = "key" } diff --git a/data/app-theme/build.gradle.kts b/data/app-theme/build.gradle.kts index b0f1f17a6a..7996a21c65 100644 --- a/data/app-theme/build.gradle.kts +++ b/data/app-theme/build.gradle.kts @@ -12,13 +12,11 @@ android { dependencies { /** Project - Domain */ - implementation(projects.domain.core) implementation(projects.domain.appTheme) implementation(projects.domain.appTheme.models) /** Project - Data */ implementation(projects.core.datasource) - implementation(projects.data.common) /** Project - Utils */ implementation(projects.core.utils) @@ -29,6 +27,4 @@ dependencies { /** Other */ implementation(deps.kotlin.coroutines) - implementation(deps.timber) - implementation(deps.jodatime) } \ No newline at end of file diff --git a/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/DefaultAppThemeModeRepository.kt b/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/DefaultAppThemeModeRepository.kt new file mode 100644 index 0000000000..4d8ed9cf4c --- /dev/null +++ b/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/DefaultAppThemeModeRepository.kt @@ -0,0 +1,35 @@ +package com.tangem.data.apptheme + +import com.tangem.datasource.local.apptheme.AppThemeModeStore +import com.tangem.domain.apptheme.model.AppThemeMode +import com.tangem.domain.apptheme.repository.AppThemeModeRepository +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +internal class DefaultAppThemeModeRepository( + private val appThemeModeStore: AppThemeModeStore, + private val dispatchers: CoroutineDispatcherProvider, +) : AppThemeModeRepository { + + override fun getAppThemeMode(): Flow { + return channelFlow { + launch(dispatchers.io) { + if (appThemeModeStore.isEmpty()) { + appThemeModeStore.store(AppThemeMode.DEFAULT) + } + } + + launch(dispatchers.io) { + appThemeModeStore.get().collect(::send) + } + } + } + + override suspend fun changeAppThemeMode(mode: AppThemeMode) { + withContext(dispatchers.io) { + appThemeModeStore.store(mode) + } + } +} \ No newline at end of file diff --git a/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/MockAppThemeModeRepository.kt b/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/MockAppThemeModeRepository.kt deleted file mode 100644 index a4a885aab2..0000000000 --- a/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/MockAppThemeModeRepository.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.tangem.data.apptheme - -import com.tangem.domain.apptheme.model.AppThemeMode -import com.tangem.domain.apptheme.repository.AppThemeModeRepository -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow - -internal class MockAppThemeModeRepository : AppThemeModeRepository { - - private val appThemeModeFlow = MutableStateFlow(AppThemeMode.DEFAULT) - - override fun getAppThemeMode(): Flow { - return appThemeModeFlow - } - - override suspend fun changeAppThemeMode(mode: AppThemeMode) { - appThemeModeFlow.value = mode - } -} \ No newline at end of file diff --git a/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/di/AppThemeModeDataModule.kt b/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/di/AppThemeModeDataModule.kt index 6847fad0b8..a360ba19b6 100644 --- a/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/di/AppThemeModeDataModule.kt +++ b/data/app-theme/src/main/kotlin/com/tangem/data/apptheme/di/AppThemeModeDataModule.kt @@ -1,7 +1,9 @@ package com.tangem.data.apptheme.di -import com.tangem.data.apptheme.MockAppThemeModeRepository +import com.tangem.data.apptheme.DefaultAppThemeModeRepository +import com.tangem.datasource.local.apptheme.AppThemeModeStore import com.tangem.domain.apptheme.repository.AppThemeModeRepository +import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -14,7 +16,10 @@ internal object AppThemeModeDataModule { @Provides @Singleton - fun provideAppThemeModeRepository(): AppThemeModeRepository { - return MockAppThemeModeRepository() + fun provideAppThemeModeRepository( + appThemeModeStore: AppThemeModeStore, + dispatchers: CoroutineDispatcherProvider, + ): AppThemeModeRepository { + return DefaultAppThemeModeRepository(appThemeModeStore, dispatchers) } } \ No newline at end of file