From 807337ca9b24ed33ac0e1b759eb9515f579e5b41 Mon Sep 17 00:00:00 2001 From: andrekir Date: Tue, 3 Jan 2023 21:45:41 -0300 Subject: [PATCH] add new configs --- .../java/com/geeksville/mesh/model/UIState.kt | 5 ++++ .../datastore/ModuleConfigRepository.kt | 7 +++++ .../mesh/ui/DeviceSettingsItemList.kt | 19 ++++++++++++++ .../mesh/ui/ModuleSettingsItemList.kt | 26 +++++++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index 6aa746a4f..d2a09f187 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -367,6 +367,11 @@ class UIViewModel @Inject constructor( setModuleConfig(moduleConfig { audio = data }) } + inline fun updateRemoteHardwareConfig(crossinline body: (ModuleConfig.RemoteHardwareConfig) -> ModuleConfig.RemoteHardwareConfig) { + val data = body(module.remoteHardware) + setModuleConfig(moduleConfig { remoteHardware = data }) + } + fun setModuleConfig(config: ModuleConfig) { meshService?.setModuleConfig(config.toByteArray()) } diff --git a/app/src/main/java/com/geeksville/mesh/repository/datastore/ModuleConfigRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/datastore/ModuleConfigRepository.kt index de292d22b..d98103c04 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/datastore/ModuleConfigRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/datastore/ModuleConfigRepository.kt @@ -45,6 +45,7 @@ class ModuleConfigRepository @Inject constructor( if (config.hasTelemetry()) setTelemetryConfig(config.telemetry) if (config.hasCannedMessage()) setCannedMessageConfig(config.cannedMessage) if (config.hasAudio()) setAudioConfig(config.audio) + if (config.hasRemoteHardware()) setRemoteHardwareConfig(config.remoteHardware) } private suspend fun setMQTTConfig(config: ModuleConfig.MQTTConfig) { @@ -95,6 +96,12 @@ class ModuleConfigRepository @Inject constructor( } } + private suspend fun setRemoteHardwareConfig(config: ModuleConfig.RemoteHardwareConfig) { + moduleConfigStore.updateData { preference -> + preference.toBuilder().setRemoteHardware(config).build() + } + } + suspend fun fetchInitialModuleConfig() = moduleConfigStore.data.first() } diff --git a/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt index 913d382e5..02e7c6598 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsItemList.kt @@ -603,6 +603,25 @@ fun DeviceSettingsItemList(viewModel: UIViewModel) { } item { Divider() } + item { + DropDownPreference(title = "Display mode", + enabled = connected, + items = ConfigProtos.Config.DisplayConfig.DisplayMode.values() + .filter { it != ConfigProtos.Config.DisplayConfig.DisplayMode.UNRECOGNIZED } + .map { it to it.name }, + selectedItem = displayInput.displaymode, + onItemSelected = { displayInput = displayInput.copy { displaymode = it } }) + } + item { Divider() } + + item { + SwitchPreference(title = "Heading bold", + checked = displayInput.headingBold, + enabled = connected, + onCheckedChange = { displayInput = displayInput.copy { headingBold = it } }) + } + item { Divider() } + item { PreferenceFooter( enabled = displayInput != localConfig.display, diff --git a/app/src/main/java/com/geeksville/mesh/ui/ModuleSettingsItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/ModuleSettingsItemList.kt index f2f05ee50..db28137d3 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ModuleSettingsItemList.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ModuleSettingsItemList.kt @@ -44,6 +44,7 @@ fun ModuleSettingsItemList(viewModel: UIViewModel) { var telemetryInput by remember(moduleConfig.telemetry) { mutableStateOf(moduleConfig.telemetry) } var cannedMessageInput by remember(moduleConfig.cannedMessage) { mutableStateOf(moduleConfig.cannedMessage) } var audioInput by remember(moduleConfig.audio) { mutableStateOf(moduleConfig.audio) } + var remoteHardwareInput by remember(moduleConfig.remoteHardware) { mutableStateOf(moduleConfig.remoteHardware) } LazyColumn( modifier = Modifier.fillMaxSize() @@ -743,6 +744,31 @@ fun ModuleSettingsItemList(viewModel: UIViewModel) { viewModel.updateAudioConfig { audioInput } }) } + + item { PreferenceCategory(text = "Remote Hardware Config") } + + item { + SwitchPreference(title = "Remote Hardware enabled", + checked = remoteHardwareInput.enabled, + enabled = connected, + onCheckedChange = { + remoteHardwareInput = remoteHardwareInput.copy { enabled = it } + }) + } + item { Divider() } + + item { + PreferenceFooter( + enabled = remoteHardwareInput != moduleConfig.remoteHardware, + onCancelClicked = { + focusManager.clearFocus() + remoteHardwareInput = moduleConfig.remoteHardware + }, + onSaveClicked = { + focusManager.clearFocus() + viewModel.updateRemoteHardwareConfig { remoteHardwareInput } + }) + } } }