diff --git a/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsFragment.kt index f785c7114..0c381fd5f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/DeviceSettingsFragment.kt @@ -80,6 +80,7 @@ import com.geeksville.mesh.ui.components.config.MQTTConfigItemList import com.geeksville.mesh.ui.components.config.NeighborInfoConfigItemList import com.geeksville.mesh.ui.components.config.NetworkConfigItemList import com.geeksville.mesh.ui.components.config.PacketResponseStateDialog +import com.geeksville.mesh.ui.components.config.PaxcounterConfigItemList import com.geeksville.mesh.ui.components.config.PositionConfigItemList import com.geeksville.mesh.ui.components.config.PowerConfigItemList import com.geeksville.mesh.ui.components.config.RangeTestConfigItemList @@ -175,6 +176,7 @@ enum class ModuleRoute(val title: String, val configType: Int = 0) { NEIGHBOR_INFO("Neighbor Info", 9), AMBIENT_LIGHTING("Ambient Lighting", 10), DETECTION_SENSOR("Detection Sensor", 11), + PAXCOUNTER("Paxcounter", 12), ; } @@ -591,6 +593,16 @@ fun RadioConfigNavHost( } ) } + composable(ModuleRoute.PAXCOUNTER.name) { + PaxcounterConfigItemList( + paxcounterConfig = radioConfigState.moduleConfig.paxcounter, + enabled = connected, + onSaveClicked = { paxcounterConfigInput -> + val config = moduleConfig { paxcounter = paxcounterConfigInput } + viewModel.setModuleConfig(destNum, config) + } + ) + } } } diff --git a/app/src/main/java/com/geeksville/mesh/ui/components/config/PaxcounterConfigItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/components/config/PaxcounterConfigItemList.kt new file mode 100644 index 000000000..f0d7f3245 --- /dev/null +++ b/app/src/main/java/com/geeksville/mesh/ui/components/config/PaxcounterConfigItemList.kt @@ -0,0 +1,80 @@ +package com.geeksville.mesh.ui.components.config + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.material.Divider +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.tooling.preview.Preview +import com.geeksville.mesh.ModuleConfigProtos +import com.geeksville.mesh.copy +import com.geeksville.mesh.ui.components.EditTextPreference +import com.geeksville.mesh.ui.components.PreferenceCategory +import com.geeksville.mesh.ui.components.PreferenceFooter +import com.geeksville.mesh.ui.components.SwitchPreference + +@Composable +fun PaxcounterConfigItemList( + paxcounterConfig: ModuleConfigProtos.ModuleConfig.PaxcounterConfig, + enabled: Boolean, + onSaveClicked: (ModuleConfigProtos.ModuleConfig.PaxcounterConfig) -> Unit, +) { + val focusManager = LocalFocusManager.current + var paxcounterInput by remember(paxcounterConfig) { mutableStateOf(paxcounterConfig) } + + LazyColumn( + modifier = Modifier.fillMaxSize() + ) { + item { PreferenceCategory(text = "Paxcounter Config") } + + item { + SwitchPreference(title = "Paxcounter enabled", + checked = paxcounterInput.enabled, + enabled = enabled, + onCheckedChange = { + paxcounterInput = paxcounterInput.copy { this.enabled = it } + }) + } + item { Divider() } + + item { + EditTextPreference(title = "Update interval (seconds)", + value = paxcounterInput.paxcounterUpdateInterval, + enabled = enabled, + keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), + onValueChanged = { + paxcounterInput = paxcounterInput.copy { paxcounterUpdateInterval = it } + }) + } + + item { + PreferenceFooter( + enabled = paxcounterInput != paxcounterConfig, + onCancelClicked = { + focusManager.clearFocus() + paxcounterInput = paxcounterConfig + }, + onSaveClicked = { + focusManager.clearFocus() + onSaveClicked(paxcounterInput) + } + ) + } + } +} + +@Preview(showBackground = true) +@Composable +private fun PaxcounterConfigPreview() { + PaxcounterConfigItemList( + paxcounterConfig = ModuleConfigProtos.ModuleConfig.PaxcounterConfig.getDefaultInstance(), + enabled = true, + onSaveClicked = { }, + ) +}