feat: add paxcounter module config

This commit is contained in:
andrekir committed 2024-01-17 19:06:37 -03:00
1 parent 18ac27a75c
commit 104e6ef25e
2 files changed
+92

No files matched your search

@@ -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)
}
)
}
}
}
@@ -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 = { },
)
}