refactor: restructure SettingsRepository and implement SettingsRepositoryImpl

This commit is contained in:
2026-05-06 17:36:34 +02:00
parent 322eb69ab5
commit f75f18d2af
4 changed files with 84 additions and 54 deletions

View File

@@ -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<Settings>
) {
val settings: Flow<Settings> = settingsDataStore.data
interface SettingsRepository {
val settings: Flow<Settings>
fun value(option: NumberSetting): Flow<Double> {
return settings
.map { it.numberSettings[option.key] ?: option.defaultValue }
.distinctUntilChanged()
}
fun value(option: NumberSetting): Flow<Double>
fun value(option: BooleanSetting): Flow<Boolean> {
return settings
.map { it.booleanSettings[option.key] ?: option.defaultValue }
.distinctUntilChanged()
}
fun value(option: BooleanSetting): Flow<Boolean>
fun value(option: StringSetting): Flow<String> {
return settings
.map { it.stringSettings[option.key] ?: option.defaultValue }
.distinctUntilChanged()
}
fun value(option: StringSetting): Flow<String>
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)
}

View File

@@ -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<Settings>
): SettingsRepository {
return SettingsRepository(settingsDataStore)
}
}

View File

@@ -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<Settings>
) : SettingsRepository {
override val settings: Flow<Settings> = settingsDataStore.data
override fun value(option: NumberSetting): Flow<Double> {
return settings
.map { it.numberSettings[option.key] ?: option.defaultValue }
.distinctUntilChanged()
}
override fun value(option: BooleanSetting): Flow<Boolean> {
return settings
.map { it.booleanSettings[option.key] ?: option.defaultValue }
.distinctUntilChanged()
}
override fun value(option: StringSetting): Flow<String> {
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)
)
}
}
}

View File

@@ -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