Updated on 2026-08-14
This commit is contained in:
parent
313049ca38
commit
5dd09c485a
10 changed files with 100 additions and 31 deletions
|
|
@ -11,6 +11,7 @@ dependencies {
|
||||||
/** Project */
|
/** Project */
|
||||||
implementation(projects.core.utils)
|
implementation(projects.core.utils)
|
||||||
implementation(projects.libs.auth)
|
implementation(projects.libs.auth)
|
||||||
|
implementation(projects.domain.appTheme.models)
|
||||||
implementation(projects.domain.tokens.models)
|
implementation(projects.domain.tokens.models)
|
||||||
implementation(projects.domain.wallets.models)
|
implementation(projects.domain.wallets.models)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,8 +7,4 @@ import com.tangem.datasource.local.datastore.core.StringKeyDataStore
|
||||||
|
|
||||||
internal class DefaultSelectedAppCurrencyStore(
|
internal class DefaultSelectedAppCurrencyStore(
|
||||||
dataStore: StringKeyDataStore<CurrenciesResponse.Currency>,
|
dataStore: StringKeyDataStore<CurrenciesResponse.Currency>,
|
||||||
) : SelectedAppCurrencyStore, KeylessDataStoreDecorator<CurrenciesResponse.Currency>(dataStore) {
|
) : SelectedAppCurrencyStore, KeylessDataStoreDecorator<CurrenciesResponse.Currency>(dataStore)
|
||||||
override suspend fun isEmpty(): Boolean {
|
|
||||||
return getSyncOrNull() == null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<AppThemeMode>
|
||||||
|
|
||||||
|
suspend fun store(item: AppThemeMode)
|
||||||
|
|
||||||
|
suspend fun isEmpty(): Boolean
|
||||||
|
}
|
||||||
|
|
@ -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<AppThemeMode>,
|
||||||
|
) : AppThemeModeStore, KeylessDataStoreDecorator<AppThemeMode>(dataStore)
|
||||||
|
|
@ -22,6 +22,10 @@ internal abstract class KeylessDataStoreDecorator<Value : Any>(
|
||||||
store(Unit, item)
|
store(Unit, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open suspend fun isEmpty(): Boolean {
|
||||||
|
return getSyncOrNull() == null
|
||||||
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
const val STRING_KEY = "key"
|
const val STRING_KEY = "key"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,11 @@ android {
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
/** Project - Domain */
|
/** Project - Domain */
|
||||||
implementation(projects.domain.core)
|
|
||||||
implementation(projects.domain.appTheme)
|
implementation(projects.domain.appTheme)
|
||||||
implementation(projects.domain.appTheme.models)
|
implementation(projects.domain.appTheme.models)
|
||||||
|
|
||||||
/** Project - Data */
|
/** Project - Data */
|
||||||
implementation(projects.core.datasource)
|
implementation(projects.core.datasource)
|
||||||
implementation(projects.data.common)
|
|
||||||
|
|
||||||
/** Project - Utils */
|
/** Project - Utils */
|
||||||
implementation(projects.core.utils)
|
implementation(projects.core.utils)
|
||||||
|
|
@ -29,6 +27,4 @@ dependencies {
|
||||||
|
|
||||||
/** Other */
|
/** Other */
|
||||||
implementation(deps.kotlin.coroutines)
|
implementation(deps.kotlin.coroutines)
|
||||||
implementation(deps.timber)
|
|
||||||
implementation(deps.jodatime)
|
|
||||||
}
|
}
|
||||||
|
|
@ -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<AppThemeMode> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<AppThemeMode> {
|
|
||||||
return appThemeModeFlow
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun changeAppThemeMode(mode: AppThemeMode) {
|
|
||||||
appThemeModeFlow.value = mode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package com.tangem.data.apptheme.di
|
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.domain.apptheme.repository.AppThemeModeRepository
|
||||||
|
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
|
|
@ -14,7 +16,10 @@ internal object AppThemeModeDataModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideAppThemeModeRepository(): AppThemeModeRepository {
|
fun provideAppThemeModeRepository(
|
||||||
return MockAppThemeModeRepository()
|
appThemeModeStore: AppThemeModeStore,
|
||||||
|
dispatchers: CoroutineDispatcherProvider,
|
||||||
|
): AppThemeModeRepository {
|
||||||
|
return DefaultAppThemeModeRepository(appThemeModeStore, dispatchers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue