Add preference to disable currency converter

This commit is contained in:
MM20
2022-04-16 21:42:03 +02:00
parent 9e012f1a23
commit 558d12bb8a
12 changed files with 176 additions and 39 deletions
@@ -38,6 +38,7 @@ import de.mm20.launcher2.ui.settings.license.LicenseScreen
import de.mm20.launcher2.ui.settings.main.MainSettingsScreen
import de.mm20.launcher2.ui.settings.musicwidget.MusicWidgetSettingsScreen
import de.mm20.launcher2.ui.settings.search.SearchSettingsScreen
import de.mm20.launcher2.ui.settings.unitconverter.UnitConverterSettingsScreen
import de.mm20.launcher2.ui.settings.weatherwidget.WeatherWidgetSettingsScreen
import de.mm20.launcher2.ui.settings.websearch.WebSearchSettingsScreen
import de.mm20.launcher2.ui.settings.widgets.WidgetsSettingsScreen
@@ -98,6 +99,9 @@ class SettingsActivity : BaseActivity() {
composable("settings/search") {
SearchSettingsScreen()
}
composable("settings/search/unitconverter") {
UnitConverterSettingsScreen()
}
composable("settings/search/wikipedia") {
WikipediaSettingsScreen()
}
@@ -128,13 +128,16 @@ fun SearchSettingsScreen() {
)
val unitConverter by viewModel.unitConverter.observeAsState()
SwitchPreference(
PreferenceWithSwitch(
title = stringResource(R.string.preference_search_unitconverter),
summary = stringResource(R.string.preference_search_unitconverter_summary),
icon = Icons.Rounded.Loop,
value = unitConverter == true,
onValueChanged = {
switchValue = unitConverter == true,
onSwitchChanged = {
viewModel.setUnitConverter(it)
},
onClick = {
navController?.navigate("settings/search/unitconverter")
}
)
@@ -0,0 +1,46 @@
package de.mm20.launcher2.ui.settings.unitconverter
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Loop
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
import de.mm20.launcher2.ui.component.preferences.PreferenceWithSwitch
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
import de.mm20.launcher2.ui.settings.search.SearchSettingsScreenVM
@Composable
fun UnitConverterSettingsScreen() {
val viewModel: UnitConverterSettingsScreenVM = viewModel()
PreferenceScreen(title = stringResource(R.string.preference_search_unitconverter)) {
item {
PreferenceCategory {
val unitConverter by viewModel.unitConverter.observeAsState()
SwitchPreference(
title = stringResource(R.string.preference_search_unitconverter),
summary = stringResource(R.string.preference_search_unitconverter_summary),
value = unitConverter == true,
onValueChanged = {
viewModel.setUnitConverter(it)
}
)
val currencyConverter by viewModel.currencyConverter.observeAsState()
SwitchPreference(
title = stringResource(R.string.preference_search_currencyconverter),
summary = stringResource(R.string.preference_search_currencyconverter_summary),
enabled = unitConverter != false,
value = currencyConverter == true,
onValueChanged = {
viewModel.setCurrencyConverter(it)
}
)
}
}
}
}
@@ -0,0 +1,43 @@
package de.mm20.launcher2.ui.settings.unitconverter
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.preferences.LauncherDataStore
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class UnitConverterSettingsScreenVM: ViewModel(), KoinComponent {
private val dataStore: LauncherDataStore by inject()
val unitConverter = dataStore.data.map { it.unitConverterSearch.enabled }.asLiveData()
fun setUnitConverter(unitConverter: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setUnitConverterSearch(
it.unitConverterSearch.toBuilder()
.setEnabled(unitConverter)
)
.build()
}
}
}
val currencyConverter = dataStore.data.map { it.unitConverterSearch.currencies }.asLiveData()
fun setCurrencyConverter(currencyConverter: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setUnitConverterSearch(
it.unitConverterSearch.toBuilder()
.setCurrencies(currencyConverter)
)
.build()
}
}
}
}