Refactor preferences module
This commit is contained in:
@@ -6,5 +6,5 @@ import org.koin.dsl.module
|
||||
|
||||
val unitConverterModule = module {
|
||||
single { CurrencyRepository(androidContext()) }
|
||||
single<UnitConverterRepository> { UnitConverterRepositoryImpl(androidContext(), get()) }
|
||||
single<UnitConverterRepository> { UnitConverterRepositoryImpl(androidContext(), get(), get()) }
|
||||
}
|
||||
+26
-15
@@ -2,44 +2,55 @@ package de.mm20.launcher2.unitconverter
|
||||
|
||||
import android.content.Context
|
||||
import de.mm20.launcher2.currencies.CurrencyRepository
|
||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||
import de.mm20.launcher2.preferences.search.UnitConverterSettings
|
||||
import de.mm20.launcher2.search.data.UnitConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.*
|
||||
import de.mm20.launcher2.unitconverter.converters.AreaConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.CurrencyConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.DataConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.LengthConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.MassConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.TemperatureConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.TimeConverter
|
||||
import de.mm20.launcher2.unitconverter.converters.VelocityConverter
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.*
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
|
||||
interface UnitConverterRepository {
|
||||
fun search(query: String, includeCurrencies: Boolean): Flow<UnitConverter?>
|
||||
fun search(query: String): Flow<UnitConverter?>
|
||||
}
|
||||
|
||||
internal class UnitConverterRepositoryImpl(
|
||||
private val context: Context,
|
||||
private val currencyRepository: CurrencyRepository,
|
||||
private val settings: UnitConverterSettings,
|
||||
) : UnitConverterRepository, KoinComponent {
|
||||
private val dataStore: LauncherDataStore by inject()
|
||||
|
||||
private val scope = CoroutineScope(Job() + Dispatchers.Default)
|
||||
|
||||
init {
|
||||
scope.launch {
|
||||
dataStore.data.map { it.unitConverterSearch }.distinctUntilChanged().collectLatest {
|
||||
if (it.enabled && it.currencies) currencyRepository.enableCurrencyUpdateWorker()
|
||||
else currencyRepository.disableCurrencyUpdateWorker()
|
||||
}
|
||||
settings.map { it.enabled && it.currencies }
|
||||
.distinctUntilChanged().collectLatest {
|
||||
if (it) currencyRepository.enableCurrencyUpdateWorker()
|
||||
else currencyRepository.disableCurrencyUpdateWorker()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun search(query: String, includeCurrencies: Boolean): Flow<UnitConverter?> = channelFlow {
|
||||
if (query.isBlank()) {
|
||||
send(null)
|
||||
return@channelFlow
|
||||
override fun search(query: String): Flow<UnitConverter?> {
|
||||
if (query.isBlank()) return flowOf(null)
|
||||
return settings.distinctUntilChanged().map {
|
||||
if (!it.enabled) null
|
||||
else queryUnitConverter(query, it.currencies)
|
||||
}
|
||||
send(queryUnitConverter(query, includeCurrencies))
|
||||
}
|
||||
|
||||
private suspend fun queryUnitConverter(
|
||||
|
||||
Reference in New Issue
Block a user