diff --git a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsRepository.kt b/core/src/main/java/hu/bbara/purefin/core/settings/SettingsRepository.kt index 941459d1..44fe67a8 100644 --- a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsRepository.kt +++ b/core/src/main/java/hu/bbara/purefin/core/settings/SettingsRepository.kt @@ -1,56 +1,20 @@ package hu.bbara.purefin.core.settings -import androidx.datastore.core.DataStore import hu.bbara.purefin.model.Settings import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.map -import javax.inject.Inject -class SettingsRepository @Inject constructor( - private val settingsDataStore: DataStore -) { - val settings: Flow = settingsDataStore.data +interface SettingsRepository { + val settings: Flow - fun value(option: NumberSetting): Flow { - return settings - .map { it.numberSettings[option.key] ?: option.defaultValue } - .distinctUntilChanged() - } + fun value(option: NumberSetting): Flow - fun value(option: BooleanSetting): Flow { - return settings - .map { it.booleanSettings[option.key] ?: option.defaultValue } - .distinctUntilChanged() - } + fun value(option: BooleanSetting): Flow - fun value(option: StringSetting): Flow { - return settings - .map { it.stringSettings[option.key] ?: option.defaultValue } - .distinctUntilChanged() - } + fun value(option: StringSetting): Flow - suspend fun set(option: NumberSetting, value: Double) { - settingsDataStore.updateData { current -> - current.copy( - numberSettings = current.numberSettings + (option.key to value) - ) - } - } + suspend fun set(option: NumberSetting, value: Double) - suspend fun set(option: BooleanSetting, value: Boolean) { - settingsDataStore.updateData { current -> - current.copy( - booleanSettings = current.booleanSettings + (option.key to value) - ) - } - } + suspend fun set(option: BooleanSetting, value: Boolean) - suspend fun set(option: StringSetting, value: String) { - settingsDataStore.updateData { current -> - current.copy( - stringSettings = current.stringSettings + (option.key to value) - ) - } - } + suspend fun set(option: StringSetting, value: String) } diff --git a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsModule.kt b/data/src/main/java/hu/bbara/purefin/data/settings/SettingsModule.kt similarity index 75% rename from core/src/main/java/hu/bbara/purefin/core/settings/SettingsModule.kt rename to data/src/main/java/hu/bbara/purefin/data/settings/SettingsModule.kt index 734ae3be..4881de92 100644 --- a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsModule.kt +++ b/data/src/main/java/hu/bbara/purefin/data/settings/SettingsModule.kt @@ -1,18 +1,31 @@ -package hu.bbara.purefin.core.settings +package hu.bbara.purefin.data.settings import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.core.DataStoreFactory import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler import androidx.datastore.dataStoreFile +import dagger.Binds import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent +import hu.bbara.purefin.core.settings.SettingsRepository import hu.bbara.purefin.model.Settings import javax.inject.Singleton +@Module +@InstallIn(SingletonComponent::class) +abstract class SettingsBindingsModule { + + @Binds + @Singleton + abstract fun bindSettingsRepository( + settingsRepositoryImpl: SettingsRepositoryImpl + ): SettingsRepository +} + @Module @InstallIn(SingletonComponent::class) class SettingsModule { @@ -30,12 +43,4 @@ class SettingsModule { ) ) } - - @Provides - @Singleton - fun provideSettingsRepository( - settingsDataStore: DataStore - ): SettingsRepository { - return SettingsRepository(settingsDataStore) - } } diff --git a/data/src/main/java/hu/bbara/purefin/data/settings/SettingsRepositoryImpl.kt b/data/src/main/java/hu/bbara/purefin/data/settings/SettingsRepositoryImpl.kt new file mode 100644 index 00000000..80d26bab --- /dev/null +++ b/data/src/main/java/hu/bbara/purefin/data/settings/SettingsRepositoryImpl.kt @@ -0,0 +1,61 @@ +package hu.bbara.purefin.data.settings + +import androidx.datastore.core.DataStore +import hu.bbara.purefin.core.settings.BooleanSetting +import hu.bbara.purefin.core.settings.NumberSetting +import hu.bbara.purefin.core.settings.SettingsRepository +import hu.bbara.purefin.core.settings.StringSetting +import hu.bbara.purefin.model.Settings +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import javax.inject.Inject + +class SettingsRepositoryImpl @Inject constructor( + private val settingsDataStore: DataStore +) : SettingsRepository { + + override val settings: Flow = settingsDataStore.data + + override fun value(option: NumberSetting): Flow { + return settings + .map { it.numberSettings[option.key] ?: option.defaultValue } + .distinctUntilChanged() + } + + override fun value(option: BooleanSetting): Flow { + return settings + .map { it.booleanSettings[option.key] ?: option.defaultValue } + .distinctUntilChanged() + } + + override fun value(option: StringSetting): Flow { + return settings + .map { it.stringSettings[option.key] ?: option.defaultValue } + .distinctUntilChanged() + } + + override suspend fun set(option: NumberSetting, value: Double) { + settingsDataStore.updateData { current -> + current.copy( + numberSettings = current.numberSettings + (option.key to value) + ) + } + } + + override suspend fun set(option: BooleanSetting, value: Boolean) { + settingsDataStore.updateData { current -> + current.copy( + booleanSettings = current.booleanSettings + (option.key to value) + ) + } + } + + override suspend fun set(option: StringSetting, value: String) { + settingsDataStore.updateData { current -> + current.copy( + stringSettings = current.stringSettings + (option.key to value) + ) + } + } +} diff --git a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsSerializer.kt b/data/src/main/java/hu/bbara/purefin/data/settings/SettingsSerializer.kt similarity index 96% rename from core/src/main/java/hu/bbara/purefin/core/settings/SettingsSerializer.kt rename to data/src/main/java/hu/bbara/purefin/data/settings/SettingsSerializer.kt index a2dd7b56..3241333f 100644 --- a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsSerializer.kt +++ b/data/src/main/java/hu/bbara/purefin/data/settings/SettingsSerializer.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.core.settings +package hu.bbara.purefin.data.settings import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer