mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-10-03 17:14:33 -04:00
feat(settings): read the labels and helper text the schema already has (#7302)
This commit is contained in:
1 parent
e23466be3c
commit
2def49d539
27 files changed
+267
-120
No files matched your search
+10
@@ -29,10 +29,15 @@ import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.ambient_lighting
|
||||
import org.meshtastic.core.resources.ambient_lighting_config
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_blue
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_blue_description
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_current
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_current_description
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_green
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_green_description
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_led_state
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_led_state_description
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_red
|
||||
import org.meshtastic.core.resources.schema_ambientlighting_red_description
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
import org.meshtastic.core.ui.component.TitledCard
|
||||
import org.meshtastic.feature.settings.radio.RadioConfigViewModel
|
||||
@@ -68,6 +73,7 @@ fun AmbientLightingConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
TitledCard(title = stringResource(Res.string.ambient_lighting_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_ambientlighting_led_state),
|
||||
summary = stringResource(Res.string.schema_ambientlighting_led_state_description),
|
||||
checked = formState.value.led_state,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -97,6 +103,7 @@ private fun LedColorFields(
|
||||
androidx.compose.foundation.layout.Column {
|
||||
BoundedIntEditTextPreference(
|
||||
title = stringResource(Res.string.schema_ambientlighting_current),
|
||||
summary = stringResource(Res.string.schema_ambientlighting_current_description),
|
||||
value = config.current,
|
||||
metadata = ModuleConfig.AmbientLightingConfig.current,
|
||||
enabled = enabled,
|
||||
@@ -105,6 +112,7 @@ private fun LedColorFields(
|
||||
)
|
||||
BoundedIntEditTextPreference(
|
||||
title = stringResource(Res.string.schema_ambientlighting_red),
|
||||
summary = stringResource(Res.string.schema_ambientlighting_red_description),
|
||||
value = config.red,
|
||||
metadata = ModuleConfig.AmbientLightingConfig.red,
|
||||
enabled = enabled,
|
||||
@@ -113,6 +121,7 @@ private fun LedColorFields(
|
||||
)
|
||||
BoundedIntEditTextPreference(
|
||||
title = stringResource(Res.string.schema_ambientlighting_green),
|
||||
summary = stringResource(Res.string.schema_ambientlighting_green_description),
|
||||
value = config.green,
|
||||
metadata = ModuleConfig.AmbientLightingConfig.green,
|
||||
enabled = enabled,
|
||||
@@ -121,6 +130,7 @@ private fun LedColorFields(
|
||||
)
|
||||
BoundedIntEditTextPreference(
|
||||
title = stringResource(Res.string.schema_ambientlighting_blue),
|
||||
summary = stringResource(Res.string.schema_ambientlighting_blue_description),
|
||||
value = config.blue,
|
||||
metadata = ModuleConfig.AmbientLightingConfig.blue,
|
||||
enabled = enabled,
|
||||
|
||||
+6
@@ -28,12 +28,15 @@ import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.audio
|
||||
import org.meshtastic.core.resources.audio_config
|
||||
import org.meshtastic.core.resources.schema_audio_bitrate
|
||||
import org.meshtastic.core.resources.schema_audio_bitrate_description
|
||||
import org.meshtastic.core.resources.schema_audio_codec2_enabled
|
||||
import org.meshtastic.core.resources.schema_audio_codec2_enabled_description
|
||||
import org.meshtastic.core.resources.schema_audio_i2s_din
|
||||
import org.meshtastic.core.resources.schema_audio_i2s_sck
|
||||
import org.meshtastic.core.resources.schema_audio_i2s_sd
|
||||
import org.meshtastic.core.resources.schema_audio_i2s_ws
|
||||
import org.meshtastic.core.resources.schema_audio_ptt_pin
|
||||
import org.meshtastic.core.resources.schema_audio_ptt_pin_description
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
@@ -66,6 +69,7 @@ fun AudioConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
TitledCard(title = stringResource(Res.string.audio_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_audio_codec2_enabled),
|
||||
summary = stringResource(Res.string.schema_audio_codec2_enabled_description),
|
||||
checked = formState.value.codec2_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -76,6 +80,7 @@ fun AudioConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_audio_ptt_pin),
|
||||
summary = stringResource(Res.string.schema_audio_ptt_pin_description),
|
||||
value = formState.value.ptt_pin,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -85,6 +90,7 @@ fun AudioConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
)
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_audio_bitrate),
|
||||
summary = stringResource(Res.string.schema_audio_bitrate_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.bitrate,
|
||||
onItemSelected = {
|
||||
|
||||
+6
-2
@@ -33,9 +33,11 @@ import org.jetbrains.compose.resources.stringResource
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.bluetooth
|
||||
import org.meshtastic.core.resources.bluetooth_config
|
||||
import org.meshtastic.core.resources.fixed_pin
|
||||
import org.meshtastic.core.resources.schema_bluetooth_enabled
|
||||
import org.meshtastic.core.resources.schema_bluetooth_enabled_description
|
||||
import org.meshtastic.core.resources.schema_bluetooth_fixed_pin
|
||||
import org.meshtastic.core.resources.schema_bluetooth_mode
|
||||
import org.meshtastic.core.resources.schema_bluetooth_mode_description
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
@@ -70,6 +72,7 @@ fun BluetoothConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
TitledCard(title = stringResource(Res.string.bluetooth_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_bluetooth_enabled),
|
||||
summary = stringResource(Res.string.schema_bluetooth_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -80,6 +83,7 @@ fun BluetoothConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_bluetooth_mode),
|
||||
summary = stringResource(Res.string.schema_bluetooth_mode_description),
|
||||
enabled = state.connected,
|
||||
items =
|
||||
Config.BluetoothConfig.PairingMode.entries
|
||||
@@ -116,7 +120,7 @@ private fun FixedPinPreference(
|
||||
var pinState by remember(pinValue) { mutableStateOf(pinValue.toString().padStart(PIN_LENGTH, '0')) }
|
||||
val pinIsError = pinState.length != PIN_LENGTH || !pinState.all { it.isDigit() }
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.fixed_pin),
|
||||
title = stringResource(Res.string.schema_bluetooth_fixed_pin),
|
||||
value = pinState,
|
||||
enabled = enabled,
|
||||
isError = pinIsError,
|
||||
|
||||
+18
@@ -39,14 +39,23 @@ import org.meshtastic.core.resources.canned_message_config
|
||||
import org.meshtastic.core.resources.canned_message_enabled
|
||||
import org.meshtastic.core.resources.messages
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_event_ccw
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_event_ccw_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_event_cw
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_event_cw_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_event_press
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_event_press_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_pin_a
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_pin_a_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_pin_b
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_pin_b_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_pin_press
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_inputbroker_pin_press_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_rotary1_enabled
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_rotary1_enabled_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_send_bell
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_send_bell_description
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_updown1_enabled
|
||||
import org.meshtastic.core.resources.schema_cannedmessage_updown1_enabled_description
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
@@ -105,6 +114,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
}
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_rotary1_enabled),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_rotary1_enabled_description),
|
||||
checked = formState.value.rotary1_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -115,6 +125,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_inputbroker_pin_a),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_inputbroker_pin_a_description),
|
||||
value = formState.value.inputbroker_pin_a,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -124,6 +135,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
)
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_inputbroker_pin_b),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_inputbroker_pin_b_description),
|
||||
value = formState.value.inputbroker_pin_b,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -133,6 +145,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
)
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_inputbroker_pin_press),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_inputbroker_pin_press_description),
|
||||
value = formState.value.inputbroker_pin_press,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -143,6 +156,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
)
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_inputbroker_event_press),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_inputbroker_event_press_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.inputbroker_event_press,
|
||||
onItemSelected = {
|
||||
@@ -153,6 +167,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_inputbroker_event_cw),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_inputbroker_event_cw_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.inputbroker_event_cw,
|
||||
onItemSelected = {
|
||||
@@ -163,6 +178,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_inputbroker_event_ccw),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_inputbroker_event_ccw_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.inputbroker_event_ccw,
|
||||
onItemSelected = {
|
||||
@@ -173,6 +189,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_updown1_enabled),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_updown1_enabled_description),
|
||||
checked = formState.value.updown1_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -204,6 +221,7 @@ fun CannedMessageConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Uni
|
||||
}
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_cannedmessage_send_bell),
|
||||
summary = stringResource(Res.string.schema_cannedmessage_send_bell_description),
|
||||
checked = formState.value.send_bell,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
|
||||
+12
@@ -33,11 +33,17 @@ import org.meshtastic.core.resources.detection_sensor
|
||||
import org.meshtastic.core.resources.detection_sensor_config
|
||||
import org.meshtastic.core.resources.minimum_broadcast_seconds
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_detection_trigger_type
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_detection_trigger_type_description
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_enabled
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_enabled_description
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_monitor_pin
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_monitor_pin_description
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_name
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_name_description
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_send_bell
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_send_bell_description
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_use_pullup
|
||||
import org.meshtastic.core.resources.schema_detectionsensor_use_pullup_description
|
||||
import org.meshtastic.core.resources.state_broadcast_seconds
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
@@ -75,6 +81,7 @@ fun DetectionSensorConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
TitledCard(title = stringResource(Res.string.detection_sensor_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_detectionsensor_enabled),
|
||||
summary = stringResource(Res.string.schema_detectionsensor_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -111,6 +118,7 @@ fun DetectionSensorConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_detectionsensor_send_bell),
|
||||
summary = stringResource(Res.string.schema_detectionsensor_send_bell_description),
|
||||
checked = formState.value.send_bell,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -121,6 +129,7 @@ fun DetectionSensorConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_detectionsensor_name),
|
||||
summary = stringResource(Res.string.schema_detectionsensor_name_description),
|
||||
value = formState.value.name,
|
||||
maxSize = 19, // name max_size:20
|
||||
enabled = state.connected,
|
||||
@@ -136,6 +145,7 @@ fun DetectionSensorConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
val pins = remember { gpioPins }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_detectionsensor_monitor_pin),
|
||||
summary = stringResource(Res.string.schema_detectionsensor_monitor_pin_description),
|
||||
items = pins,
|
||||
selectedItem = formState.value.monitor_pin,
|
||||
enabled = state.connected,
|
||||
@@ -146,6 +156,7 @@ fun DetectionSensorConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_detectionsensor_detection_trigger_type),
|
||||
summary = stringResource(Res.string.schema_detectionsensor_detection_trigger_type_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.detection_trigger_type,
|
||||
onItemSelected = {
|
||||
@@ -156,6 +167,7 @@ fun DetectionSensorConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> U
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_detectionsensor_use_pullup),
|
||||
summary = stringResource(Res.string.schema_detectionsensor_use_pullup_description),
|
||||
checked = formState.value.use_pullup,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
|
||||
+12
-6
@@ -70,18 +70,21 @@ import org.meshtastic.core.resources.files_available
|
||||
import org.meshtastic.core.resources.gpio
|
||||
import org.meshtastic.core.resources.hardware
|
||||
import org.meshtastic.core.resources.i_know_what_i_m_doing
|
||||
import org.meshtastic.core.resources.led_heartbeat
|
||||
import org.meshtastic.core.resources.no_files_manifested
|
||||
import org.meshtastic.core.resources.options
|
||||
import org.meshtastic.core.resources.role
|
||||
import org.meshtastic.core.resources.router_role_confirmation_text
|
||||
import org.meshtastic.core.resources.schema_device_button_gpio
|
||||
import org.meshtastic.core.resources.schema_device_button_gpio_description
|
||||
import org.meshtastic.core.resources.schema_device_buzzer_gpio
|
||||
import org.meshtastic.core.resources.schema_device_buzzer_gpio_description
|
||||
import org.meshtastic.core.resources.schema_device_double_tap_as_button_press
|
||||
import org.meshtastic.core.resources.schema_device_double_tap_as_button_press_description
|
||||
import org.meshtastic.core.resources.schema_device_led_heartbeat_disabled
|
||||
import org.meshtastic.core.resources.schema_device_node_info_broadcast_secs
|
||||
import org.meshtastic.core.resources.schema_device_node_info_broadcast_secs_description
|
||||
import org.meshtastic.core.resources.schema_device_rebroadcast_mode
|
||||
import org.meshtastic.core.resources.time_zone
|
||||
import org.meshtastic.core.resources.schema_device_role
|
||||
import org.meshtastic.core.resources.schema_device_tzdef
|
||||
import org.meshtastic.core.resources.triple_click_adhoc_ping
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
@@ -138,7 +141,7 @@ fun DeviceConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
TitledCard(title = stringResource(Res.string.options)) {
|
||||
val currentRole = formState.value.role
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.role),
|
||||
title = stringResource(Res.string.schema_device_role),
|
||||
enabled = state.connected,
|
||||
selectedItem = currentRole,
|
||||
onItemSelected = { selectedRole = it },
|
||||
@@ -164,6 +167,7 @@ fun DeviceConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
val nodeInfoBroadcastIntervals = remember { IntervalConfiguration.NODE_INFO_BROADCAST.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_device_node_info_broadcast_secs),
|
||||
summary = stringResource(Res.string.schema_device_node_info_broadcast_secs_description),
|
||||
selectedItem = formState.value.node_info_broadcast_secs.toLong(),
|
||||
enabled = state.connected,
|
||||
items = nodeInfoBroadcastIntervals.map { it.value to it.toDisplayString() },
|
||||
@@ -206,7 +210,7 @@ fun DeviceConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
InsetDivider()
|
||||
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.led_heartbeat),
|
||||
title = stringResource(Res.string.schema_device_led_heartbeat_disabled),
|
||||
summary = stringResource(Res.string.config_device_ledHeartbeatEnabled_summary),
|
||||
checked = !formState.value.led_heartbeat_disabled,
|
||||
enabled = state.connected,
|
||||
@@ -219,7 +223,7 @@ fun DeviceConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
}
|
||||
}
|
||||
item {
|
||||
TitledCard(title = stringResource(Res.string.time_zone)) {
|
||||
TitledCard(title = stringResource(Res.string.schema_device_tzdef)) {
|
||||
val appTzPosixString = rememberSystemTimeZonePosixString()
|
||||
|
||||
EditTextPreference(
|
||||
@@ -276,6 +280,7 @@ fun DeviceConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
TitledCard(title = stringResource(Res.string.gpio)) {
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_device_button_gpio),
|
||||
summary = stringResource(Res.string.schema_device_button_gpio_description),
|
||||
value = formState.value.button_gpio,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -288,6 +293,7 @@ fun DeviceConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_device_buzzer_gpio),
|
||||
summary = stringResource(Res.string.schema_device_buzzer_gpio_description),
|
||||
value = formState.value.buzzer_gpio,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
|
||||
+2
@@ -33,6 +33,7 @@ import org.meshtastic.core.resources.schema_display_auto_screen_carousel_secs_de
|
||||
import org.meshtastic.core.resources.schema_display_compass_north_top
|
||||
import org.meshtastic.core.resources.schema_display_compass_north_top_description
|
||||
import org.meshtastic.core.resources.schema_display_compass_orientation
|
||||
import org.meshtastic.core.resources.schema_display_compass_orientation_description
|
||||
import org.meshtastic.core.resources.schema_display_displaymode
|
||||
import org.meshtastic.core.resources.schema_display_displaymode_description
|
||||
import org.meshtastic.core.resources.schema_display_flip_screen
|
||||
@@ -216,6 +217,7 @@ fun DisplayConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_display_compass_orientation),
|
||||
summary = stringResource(Res.string.schema_display_compass_orientation_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.compass_orientation,
|
||||
onItemSelected = {
|
||||
|
||||
+26
@@ -42,18 +42,31 @@ import org.meshtastic.core.resources.notifications_on_message_receipt
|
||||
import org.meshtastic.core.resources.output_duration_milliseconds
|
||||
import org.meshtastic.core.resources.ringtone
|
||||
import org.meshtastic.core.resources.schema_externalnotification_active
|
||||
import org.meshtastic.core.resources.schema_externalnotification_active_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_bell
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_bell_buzzer
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_bell_buzzer_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_bell_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_bell_vibra
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_bell_vibra_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_message
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_message_buzzer
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_message_buzzer_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_message_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_message_vibra
|
||||
import org.meshtastic.core.resources.schema_externalnotification_alert_message_vibra_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_enabled
|
||||
import org.meshtastic.core.resources.schema_externalnotification_enabled_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_output
|
||||
import org.meshtastic.core.resources.schema_externalnotification_output_buzzer
|
||||
import org.meshtastic.core.resources.schema_externalnotification_output_buzzer_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_output_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_output_vibra
|
||||
import org.meshtastic.core.resources.schema_externalnotification_output_vibra_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_use_i2s_as_buzzer
|
||||
import org.meshtastic.core.resources.schema_externalnotification_use_i2s_as_buzzer_description
|
||||
import org.meshtastic.core.resources.schema_externalnotification_use_pwm
|
||||
import org.meshtastic.core.resources.schema_externalnotification_use_pwm_description
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
@@ -107,6 +120,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
TitledCard(title = stringResource(Res.string.external_notification_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_enabled),
|
||||
summary = stringResource(Res.string.schema_externalnotification_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -121,6 +135,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
TitledCard(title = stringResource(Res.string.notifications_on_message_receipt)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_alert_message),
|
||||
summary = stringResource(Res.string.schema_externalnotification_alert_message_description),
|
||||
checked = formState.value.alert_message,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -131,6 +146,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_alert_message_buzzer),
|
||||
summary = stringResource(Res.string.schema_externalnotification_alert_message_buzzer_description),
|
||||
checked = formState.value.alert_message_buzzer,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -142,6 +158,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_alert_message_vibra),
|
||||
summary = stringResource(Res.string.schema_externalnotification_alert_message_vibra_description),
|
||||
checked = formState.value.alert_message_vibra,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -157,6 +174,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
TitledCard(title = stringResource(Res.string.notifications_on_alert_bell_receipt)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_alert_bell),
|
||||
summary = stringResource(Res.string.schema_externalnotification_alert_bell_description),
|
||||
checked = formState.value.alert_bell,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -167,6 +185,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_alert_bell_buzzer),
|
||||
summary = stringResource(Res.string.schema_externalnotification_alert_bell_buzzer_description),
|
||||
checked = formState.value.alert_bell_buzzer,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -177,6 +196,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_alert_bell_vibra),
|
||||
summary = stringResource(Res.string.schema_externalnotification_alert_bell_vibra_description),
|
||||
checked = formState.value.alert_bell_vibra,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -192,6 +212,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
val gpio = remember { org.meshtastic.feature.settings.util.gpioPins }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_output),
|
||||
summary = stringResource(Res.string.schema_externalnotification_output_description),
|
||||
items = gpio,
|
||||
selectedItem = formState.value.output.toLong(),
|
||||
enabled = state.connected,
|
||||
@@ -203,6 +224,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_active),
|
||||
summary = stringResource(Res.string.schema_externalnotification_active_description),
|
||||
checked = formState.value.active,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -214,6 +236,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_output_buzzer),
|
||||
summary = stringResource(Res.string.schema_externalnotification_output_buzzer_description),
|
||||
items = gpio,
|
||||
selectedItem = formState.value.output_buzzer.toLong(),
|
||||
enabled = state.connected,
|
||||
@@ -226,6 +249,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_use_pwm),
|
||||
summary = stringResource(Res.string.schema_externalnotification_use_pwm_description),
|
||||
checked = formState.value.use_pwm,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -237,6 +261,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_output_vibra),
|
||||
summary = stringResource(Res.string.schema_externalnotification_output_vibra_description),
|
||||
items = gpio,
|
||||
selectedItem = formState.value.output_vibra.toLong(),
|
||||
enabled = state.connected,
|
||||
@@ -290,6 +315,7 @@ fun ExternalNotificationConfigScreenCommon(
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_externalnotification_use_i2s_as_buzzer),
|
||||
summary = stringResource(Res.string.schema_externalnotification_use_i2s_as_buzzer_description),
|
||||
checked = formState.value.use_i2s_as_buzzer,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
|
||||
+14
-2
@@ -46,7 +46,6 @@ import org.meshtastic.core.resources.config_lora_modem_preset_summary
|
||||
import org.meshtastic.core.resources.config_lora_region_summary
|
||||
import org.meshtastic.core.resources.lora
|
||||
import org.meshtastic.core.resources.options
|
||||
import org.meshtastic.core.resources.region_frequency_plan
|
||||
import org.meshtastic.core.resources.schema_lora_bandwidth
|
||||
import org.meshtastic.core.resources.schema_lora_channel_num
|
||||
import org.meshtastic.core.resources.schema_lora_channel_num_description
|
||||
@@ -55,15 +54,22 @@ import org.meshtastic.core.resources.schema_lora_config_ok_to_mqtt
|
||||
import org.meshtastic.core.resources.schema_lora_hop_limit
|
||||
import org.meshtastic.core.resources.schema_lora_hop_limit_description
|
||||
import org.meshtastic.core.resources.schema_lora_ignore_mqtt
|
||||
import org.meshtastic.core.resources.schema_lora_ignore_mqtt_description
|
||||
import org.meshtastic.core.resources.schema_lora_modem_preset
|
||||
import org.meshtastic.core.resources.schema_lora_override_duty_cycle
|
||||
import org.meshtastic.core.resources.schema_lora_override_frequency
|
||||
import org.meshtastic.core.resources.schema_lora_pa_fan_disabled
|
||||
import org.meshtastic.core.resources.schema_lora_region
|
||||
import org.meshtastic.core.resources.schema_lora_spread_factor
|
||||
import org.meshtastic.core.resources.schema_lora_spread_factor_description
|
||||
import org.meshtastic.core.resources.schema_lora_sx126x_rx_boosted_gain
|
||||
import org.meshtastic.core.resources.schema_lora_sx126x_rx_boosted_gain_description
|
||||
import org.meshtastic.core.resources.schema_lora_tx_enabled
|
||||
import org.meshtastic.core.resources.schema_lora_tx_enabled_description
|
||||
import org.meshtastic.core.resources.schema_lora_tx_power
|
||||
import org.meshtastic.core.resources.schema_lora_tx_power_description
|
||||
import org.meshtastic.core.resources.schema_lora_use_preset
|
||||
import org.meshtastic.core.resources.schema_lora_use_preset_description
|
||||
import org.meshtastic.core.ui.component.DropDownItem
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
@@ -180,7 +186,7 @@ fun LoRaConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
}
|
||||
val presetsGated = presetConstraint?.isGated(state.localIsLicensed) == true
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.region_frequency_plan),
|
||||
title = stringResource(Res.string.schema_lora_region),
|
||||
summary = stringResource(Res.string.config_lora_region_summary),
|
||||
enabled = state.connected,
|
||||
items =
|
||||
@@ -210,6 +216,7 @@ fun LoRaConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_lora_use_preset),
|
||||
summary = stringResource(Res.string.schema_lora_use_preset_description),
|
||||
checked = formState.value.use_preset,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -258,6 +265,7 @@ fun LoRaConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
TitledCard(title = stringResource(Res.string.advanced)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_lora_ignore_mqtt),
|
||||
summary = stringResource(Res.string.schema_lora_ignore_mqtt_description),
|
||||
checked = formState.value.ignore_mqtt,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -278,6 +286,7 @@ fun LoRaConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_lora_tx_enabled),
|
||||
summary = stringResource(Res.string.schema_lora_tx_enabled_description),
|
||||
checked = formState.value.tx_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -334,6 +343,7 @@ fun LoRaConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_lora_sx126x_rx_boosted_gain),
|
||||
summary = stringResource(Res.string.schema_lora_sx126x_rx_boosted_gain_description),
|
||||
checked = formState.value.sx126x_rx_boosted_gain,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -362,6 +372,7 @@ fun LoRaConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SignedIntegerEditTextPreference(
|
||||
title = stringResource(Res.string.schema_lora_tx_power),
|
||||
summary = stringResource(Res.string.schema_lora_tx_power_description),
|
||||
value = formState.value.tx_power,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -406,6 +417,7 @@ private fun ManualModemSettings(
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_lora_spread_factor),
|
||||
summary = stringResource(Res.string.schema_lora_spread_factor_description),
|
||||
value = config.spread_factor,
|
||||
enabled = enabled,
|
||||
isError = config.spread_factor !in SPREAD_FACTOR_RANGE,
|
||||
|
||||
+18
-6
@@ -55,7 +55,6 @@ import org.meshtastic.core.model.MqttProbeStatus
|
||||
import org.meshtastic.core.network.repository.effectiveTlsEnabled
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.json_output_enabled
|
||||
import org.meshtastic.core.resources.map_reporting
|
||||
import org.meshtastic.core.resources.mqtt
|
||||
import org.meshtastic.core.resources.mqtt_config
|
||||
import org.meshtastic.core.resources.mqtt_probe_dns_failure
|
||||
@@ -79,14 +78,21 @@ import org.meshtastic.core.resources.mqtt_status_reconnecting_with_attempt
|
||||
import org.meshtastic.core.resources.mqtt_status_topics_refused_all
|
||||
import org.meshtastic.core.resources.mqtt_status_topics_refused_some
|
||||
import org.meshtastic.core.resources.mqtt_test_connection
|
||||
import org.meshtastic.core.resources.password
|
||||
import org.meshtastic.core.resources.schema_mqtt_address
|
||||
import org.meshtastic.core.resources.schema_mqtt_address_description
|
||||
import org.meshtastic.core.resources.schema_mqtt_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_enabled_description
|
||||
import org.meshtastic.core.resources.schema_mqtt_encryption_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_encryption_enabled_description
|
||||
import org.meshtastic.core.resources.schema_mqtt_map_reporting_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_password
|
||||
import org.meshtastic.core.resources.schema_mqtt_proxy_to_client_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_proxy_to_client_enabled_description
|
||||
import org.meshtastic.core.resources.schema_mqtt_root
|
||||
import org.meshtastic.core.resources.schema_mqtt_root_description
|
||||
import org.meshtastic.core.resources.schema_mqtt_tls_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_username
|
||||
import org.meshtastic.core.resources.tls_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_username_description
|
||||
import org.meshtastic.core.resources.tls_enabled_public_broker_summary
|
||||
import org.meshtastic.core.ui.component.EditPasswordPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
@@ -172,6 +178,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
TitledCard(title = stringResource(Res.string.mqtt_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_mqtt_enabled),
|
||||
summary = stringResource(Res.string.schema_mqtt_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -191,6 +198,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_mqtt_username),
|
||||
summary = stringResource(Res.string.schema_mqtt_username_description),
|
||||
value = formState.value.username,
|
||||
maxSize = 63, // username max_size:64
|
||||
enabled = state.connected,
|
||||
@@ -204,7 +212,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
)
|
||||
HorizontalDivider()
|
||||
EditPasswordPreference(
|
||||
title = stringResource(Res.string.password),
|
||||
title = stringResource(Res.string.schema_mqtt_password),
|
||||
value = formState.value.password,
|
||||
maxSize = 63, // password max_size:64
|
||||
enabled = state.connected,
|
||||
@@ -216,6 +224,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_mqtt_encryption_enabled),
|
||||
summary = stringResource(Res.string.schema_mqtt_encryption_enabled_description),
|
||||
checked = formState.value.encryption_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -247,6 +256,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_mqtt_root),
|
||||
summary = stringResource(Res.string.schema_mqtt_root_description),
|
||||
value = formState.value.root,
|
||||
maxSize = 31, // root max_size:32
|
||||
enabled = state.connected,
|
||||
@@ -261,6 +271,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_mqtt_proxy_to_client_enabled),
|
||||
summary = stringResource(Res.string.schema_mqtt_proxy_to_client_enabled_description),
|
||||
checked = formState.value.proxy_to_client_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -273,7 +284,7 @@ fun MQTTConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
}
|
||||
|
||||
item {
|
||||
TitledCard(title = stringResource(Res.string.map_reporting)) {
|
||||
TitledCard(title = stringResource(Res.string.schema_mqtt_map_reporting_enabled)) {
|
||||
val mapReportSettings =
|
||||
formState.value.map_report_settings ?: ModuleConfig.MapReportSettings.Builder().build()
|
||||
MapReportingPreference(
|
||||
@@ -332,7 +343,7 @@ internal fun MqttTlsPreference(
|
||||
val resolvedAddress = address.ifEmpty { DEFAULT_MQTT_ADDRESS }
|
||||
val relayForcesTls = effectiveTlsEnabled(resolvedAddress, tlsEnabled = false)
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.tls_enabled),
|
||||
title = stringResource(Res.string.schema_mqtt_tls_enabled),
|
||||
summary = if (relayForcesTls) stringResource(Res.string.tls_enabled_public_broker_summary) else "",
|
||||
checked = tlsEnabled,
|
||||
enabled = enabled,
|
||||
@@ -408,6 +419,7 @@ private fun MqttAddressAndProbe(
|
||||
) {
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_mqtt_address),
|
||||
summary = stringResource(Res.string.schema_mqtt_address_description),
|
||||
value = formState.value.address,
|
||||
maxSize = 63, // address max_size:64
|
||||
enabled = enabled,
|
||||
|
||||
+4
-4
@@ -45,11 +45,11 @@ import org.meshtastic.core.model.util.toDistanceString
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.i_agree
|
||||
import org.meshtastic.core.resources.i_agree_to_share_my_location
|
||||
import org.meshtastic.core.resources.map_reporting
|
||||
import org.meshtastic.core.resources.map_reporting_consent_header
|
||||
import org.meshtastic.core.resources.map_reporting_consent_text
|
||||
import org.meshtastic.core.resources.map_reporting_interval_seconds
|
||||
import org.meshtastic.core.resources.map_reporting_summary
|
||||
import org.meshtastic.core.resources.schema_mqtt_map_reporting_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_map_reporting_enabled_description
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
import org.meshtastic.feature.settings.util.FixedUpdateIntervals
|
||||
@@ -78,8 +78,8 @@ fun MapReportingPreference(
|
||||
// [mapReportingEnabled] so an externally-changed config wins over a stale local toggle.
|
||||
var showMapReportingWarning by rememberSaveable(mapReportingEnabled) { mutableStateOf(mapReportingEnabled) }
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.map_reporting),
|
||||
summary = stringResource(Res.string.map_reporting_summary),
|
||||
title = stringResource(Res.string.schema_mqtt_map_reporting_enabled),
|
||||
summary = stringResource(Res.string.schema_mqtt_map_reporting_enabled_description),
|
||||
checked = showMapReportingWarning,
|
||||
enabled = enabled,
|
||||
onCheckedChange = { checked ->
|
||||
|
||||
+2
-2
@@ -48,7 +48,6 @@ import org.meshtastic.core.resources.mesh_beacon_interval
|
||||
import org.meshtastic.core.resources.mesh_beacon_interval_error
|
||||
import org.meshtastic.core.resources.mesh_beacon_listen
|
||||
import org.meshtastic.core.resources.mesh_beacon_listen_summary
|
||||
import org.meshtastic.core.resources.mesh_beacon_message
|
||||
import org.meshtastic.core.resources.mesh_beacon_no_channels
|
||||
import org.meshtastic.core.resources.mesh_beacon_offer_channel_name
|
||||
import org.meshtastic.core.resources.mesh_beacon_on_preset
|
||||
@@ -61,6 +60,7 @@ import org.meshtastic.core.resources.mesh_beacon_target_default
|
||||
import org.meshtastic.core.resources.mesh_beacon_target_remove
|
||||
import org.meshtastic.core.resources.mesh_beacon_targets
|
||||
import org.meshtastic.core.resources.plurals_seconds
|
||||
import org.meshtastic.core.resources.schema_meshbeacon_broadcast_message
|
||||
import org.meshtastic.core.ui.component.DropDownItem
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
@@ -238,7 +238,7 @@ fun MeshBeaconConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit,
|
||||
if (broadcastGate.sectionsVisible) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.mesh_beacon_message),
|
||||
title = stringResource(Res.string.schema_meshbeacon_broadcast_message),
|
||||
value = formState.value.broadcast_message,
|
||||
maxSize = MESSAGE_MAX_BYTES,
|
||||
enabled = broadcastGate.sectionsEnabled,
|
||||
|
||||
+2
@@ -28,6 +28,7 @@ import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.neighbor_info
|
||||
import org.meshtastic.core.resources.neighbor_info_config
|
||||
import org.meshtastic.core.resources.schema_neighborinfo_enabled
|
||||
import org.meshtastic.core.resources.schema_neighborinfo_enabled_description
|
||||
import org.meshtastic.core.resources.schema_neighborinfo_transmit_over_lora
|
||||
import org.meshtastic.core.resources.schema_neighborinfo_transmit_over_lora_description
|
||||
import org.meshtastic.core.resources.update_interval_seconds
|
||||
@@ -62,6 +63,7 @@ fun NeighborInfoConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
TitledCard(title = stringResource(Res.string.neighbor_info_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_neighborinfo_enabled),
|
||||
summary = stringResource(Res.string.schema_neighborinfo_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
|
||||
+14
-9
@@ -47,25 +47,28 @@ import org.meshtastic.core.resources.advanced
|
||||
import org.meshtastic.core.resources.cancel
|
||||
import org.meshtastic.core.resources.config_network_udp_enabled_summary
|
||||
import org.meshtastic.core.resources.connection_status
|
||||
import org.meshtastic.core.resources.dns
|
||||
import org.meshtastic.core.resources.error
|
||||
import org.meshtastic.core.resources.ethernet_config
|
||||
import org.meshtastic.core.resources.ethernet_ip
|
||||
import org.meshtastic.core.resources.gateway
|
||||
import org.meshtastic.core.resources.network
|
||||
import org.meshtastic.core.resources.nfc_disabled
|
||||
import org.meshtastic.core.resources.open_settings
|
||||
import org.meshtastic.core.resources.password
|
||||
import org.meshtastic.core.resources.scan_nfc
|
||||
import org.meshtastic.core.resources.schema_network_address_mode
|
||||
import org.meshtastic.core.resources.schema_network_eth_enabled
|
||||
import org.meshtastic.core.resources.schema_network_eth_enabled_description
|
||||
import org.meshtastic.core.resources.schema_network_ipv4_dns
|
||||
import org.meshtastic.core.resources.schema_network_ipv4_gateway
|
||||
import org.meshtastic.core.resources.schema_network_ipv4_ip
|
||||
import org.meshtastic.core.resources.schema_network_ipv4_subnet
|
||||
import org.meshtastic.core.resources.schema_network_ntp_server
|
||||
import org.meshtastic.core.resources.schema_network_ntp_server_description
|
||||
import org.meshtastic.core.resources.schema_network_rsyslog_server
|
||||
import org.meshtastic.core.resources.schema_network_wifi_enabled
|
||||
import org.meshtastic.core.resources.schema_network_wifi_enabled_description
|
||||
import org.meshtastic.core.resources.schema_network_wifi_psk
|
||||
import org.meshtastic.core.resources.schema_network_wifi_ssid
|
||||
import org.meshtastic.core.resources.subnet
|
||||
import org.meshtastic.core.resources.schema_network_wifi_ssid_description
|
||||
import org.meshtastic.core.resources.udp_enabled
|
||||
import org.meshtastic.core.resources.wifi_config
|
||||
import org.meshtastic.core.resources.wifi_ip
|
||||
@@ -218,6 +221,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_network_wifi_ssid),
|
||||
summary = stringResource(Res.string.schema_network_wifi_ssid_description),
|
||||
value = formState.value.wifi_ssid,
|
||||
maxSize = 32, // wifi_ssid max_size:33
|
||||
enabled = state.connected,
|
||||
@@ -231,7 +235,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
)
|
||||
HorizontalDivider()
|
||||
EditPasswordPreference(
|
||||
title = stringResource(Res.string.password),
|
||||
title = stringResource(Res.string.schema_network_wifi_psk),
|
||||
value = formState.value.wifi_psk,
|
||||
maxSize = 64, // wifi_psk max_size:65
|
||||
enabled = state.connected,
|
||||
@@ -275,6 +279,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
TitledCard(title = stringResource(Res.string.advanced)) {
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_network_ntp_server),
|
||||
summary = stringResource(Res.string.schema_network_ntp_server_description),
|
||||
value = formState.value.ntp_server,
|
||||
maxSize = 32, // ntp_server max_size:33
|
||||
enabled = state.connected,
|
||||
@@ -336,7 +341,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
HorizontalDivider()
|
||||
val ipv4 = formState.value.ipv4_config ?: Config.NetworkConfig.IpV4Config.Builder().build()
|
||||
EditIPv4Preference(
|
||||
title = stringResource(Res.string.wifi_ip),
|
||||
title = stringResource(Res.string.schema_network_ipv4_ip),
|
||||
value = ipv4.ip,
|
||||
enabled = state.connected,
|
||||
onValueChanged = {
|
||||
@@ -350,7 +355,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
)
|
||||
HorizontalDivider()
|
||||
EditIPv4Preference(
|
||||
title = stringResource(Res.string.gateway),
|
||||
title = stringResource(Res.string.schema_network_ipv4_gateway),
|
||||
value = ipv4.gateway,
|
||||
enabled = state.connected,
|
||||
onValueChanged = {
|
||||
@@ -366,7 +371,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
)
|
||||
HorizontalDivider()
|
||||
EditIPv4Preference(
|
||||
title = stringResource(Res.string.subnet),
|
||||
title = stringResource(Res.string.schema_network_ipv4_subnet),
|
||||
value = ipv4.subnet,
|
||||
enabled = state.connected,
|
||||
onValueChanged = {
|
||||
@@ -382,7 +387,7 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
|
||||
)
|
||||
HorizontalDivider()
|
||||
EditIPv4Preference(
|
||||
title = stringResource(Res.string.dns),
|
||||
title = stringResource(Res.string.schema_network_ipv4_dns),
|
||||
value = ipv4.dns,
|
||||
enabled = state.connected,
|
||||
onValueChanged = {
|
||||
|
||||
+53
-49
@@ -29,8 +29,11 @@ import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.paxcounter
|
||||
import org.meshtastic.core.resources.paxcounter_config
|
||||
import org.meshtastic.core.resources.schema_paxcounter_ble_threshold
|
||||
import org.meshtastic.core.resources.schema_paxcounter_ble_threshold_description
|
||||
import org.meshtastic.core.resources.schema_paxcounter_enabled
|
||||
import org.meshtastic.core.resources.schema_paxcounter_enabled_description
|
||||
import org.meshtastic.core.resources.schema_paxcounter_wifi_threshold
|
||||
import org.meshtastic.core.resources.schema_paxcounter_wifi_threshold_description
|
||||
import org.meshtastic.core.resources.update_interval_seconds
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.SignedIntegerEditTextPreference
|
||||
@@ -47,7 +50,6 @@ fun PaxcounterConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit)
|
||||
val state by viewModel.radioConfigState.collectAsStateWithLifecycle()
|
||||
val paxcounterConfig = state.moduleConfig.paxcounter ?: ModuleConfig.PaxcounterConfig.Builder().build()
|
||||
val formState = rememberConfigState(initialValue = paxcounterConfig)
|
||||
val focusManager = LocalFocusManager.current
|
||||
|
||||
RadioConfigScreenList(
|
||||
rebootBehavior = RebootBehavior.ALWAYS,
|
||||
@@ -62,53 +64,55 @@ fun PaxcounterConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit)
|
||||
viewModel.setModuleConfig(config)
|
||||
},
|
||||
) {
|
||||
item {
|
||||
TitledCard(title = stringResource(Res.string.paxcounter_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_paxcounter_enabled),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
formState.value = formState.value.newBuilder().also { wb -> wb.enabled = it }.build()
|
||||
},
|
||||
containerColor = CardDefaults.cardColors().containerColor,
|
||||
)
|
||||
HorizontalDivider()
|
||||
val items = remember { IntervalConfiguration.PAX_COUNTER.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.update_interval_seconds),
|
||||
selectedItem = (formState.value.paxcounter_update_interval).toLong(),
|
||||
enabled = state.connected,
|
||||
items = items.map { it.value to it.toDisplayString() },
|
||||
onItemSelected = {
|
||||
formState.value =
|
||||
formState.value
|
||||
.newBuilder()
|
||||
.also { wb -> wb.paxcounter_update_interval = it.toInt() }
|
||||
.build()
|
||||
},
|
||||
)
|
||||
HorizontalDivider()
|
||||
SignedIntegerEditTextPreference(
|
||||
title = stringResource(Res.string.schema_paxcounter_wifi_threshold),
|
||||
value = formState.value.wifi_threshold,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
onValueChanged = {
|
||||
formState.value = formState.value.newBuilder().also { wb -> wb.wifi_threshold = it }.build()
|
||||
},
|
||||
)
|
||||
HorizontalDivider()
|
||||
SignedIntegerEditTextPreference(
|
||||
title = stringResource(Res.string.schema_paxcounter_ble_threshold),
|
||||
value = formState.value.ble_threshold,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
onValueChanged = {
|
||||
formState.value = formState.value.newBuilder().also { wb -> wb.ble_threshold = it }.build()
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
item { PaxcounterSettings(formState = formState, enabled = state.connected) }
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PaxcounterSettings(formState: ConfigState<ModuleConfig.PaxcounterConfig>, enabled: Boolean) {
|
||||
val focusManager = LocalFocusManager.current
|
||||
TitledCard(title = stringResource(Res.string.paxcounter_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_paxcounter_enabled),
|
||||
summary = stringResource(Res.string.schema_paxcounter_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = enabled,
|
||||
onCheckedChange = { formState.value = formState.value.newBuilder().also { wb -> wb.enabled = it }.build() },
|
||||
containerColor = CardDefaults.cardColors().containerColor,
|
||||
)
|
||||
HorizontalDivider()
|
||||
val items = remember { IntervalConfiguration.PAX_COUNTER.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.update_interval_seconds),
|
||||
selectedItem = (formState.value.paxcounter_update_interval).toLong(),
|
||||
enabled = enabled,
|
||||
items = items.map { it.value to it.toDisplayString() },
|
||||
onItemSelected = {
|
||||
formState.value =
|
||||
formState.value.newBuilder().also { wb -> wb.paxcounter_update_interval = it.toInt() }.build()
|
||||
},
|
||||
)
|
||||
HorizontalDivider()
|
||||
SignedIntegerEditTextPreference(
|
||||
title = stringResource(Res.string.schema_paxcounter_wifi_threshold),
|
||||
summary = stringResource(Res.string.schema_paxcounter_wifi_threshold_description),
|
||||
value = formState.value.wifi_threshold,
|
||||
enabled = enabled,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
onValueChanged = {
|
||||
formState.value = formState.value.newBuilder().also { wb -> wb.wifi_threshold = it }.build()
|
||||
},
|
||||
)
|
||||
HorizontalDivider()
|
||||
SignedIntegerEditTextPreference(
|
||||
title = stringResource(Res.string.schema_paxcounter_ble_threshold),
|
||||
summary = stringResource(Res.string.schema_paxcounter_ble_threshold_description),
|
||||
value = formState.value.ble_threshold,
|
||||
enabled = enabled,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
onValueChanged = {
|
||||
formState.value = formState.value.newBuilder().also { wb -> wb.ble_threshold = it }.build()
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
+12
-2
@@ -33,7 +33,6 @@ import org.meshtastic.core.model.Position
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.advanced_device_gps
|
||||
import org.meshtastic.core.resources.altitude
|
||||
import org.meshtastic.core.resources.config_position_broadcast_smart_minimum_interval_secs_summary
|
||||
import org.meshtastic.core.resources.device_gps
|
||||
import org.meshtastic.core.resources.latitude
|
||||
import org.meshtastic.core.resources.longitude
|
||||
@@ -42,8 +41,11 @@ import org.meshtastic.core.resources.position_packet
|
||||
import org.meshtastic.core.resources.schema_position_broadcast_smart_minimum_distance
|
||||
import org.meshtastic.core.resources.schema_position_broadcast_smart_minimum_distance_description
|
||||
import org.meshtastic.core.resources.schema_position_broadcast_smart_minimum_interval_secs
|
||||
import org.meshtastic.core.resources.schema_position_broadcast_smart_minimum_interval_secs_description
|
||||
import org.meshtastic.core.resources.schema_position_fixed_position
|
||||
import org.meshtastic.core.resources.schema_position_fixed_position_description
|
||||
import org.meshtastic.core.resources.schema_position_gps_en_gpio
|
||||
import org.meshtastic.core.resources.schema_position_gps_en_gpio_description
|
||||
import org.meshtastic.core.resources.schema_position_gps_mode
|
||||
import org.meshtastic.core.resources.schema_position_gps_update_interval
|
||||
import org.meshtastic.core.resources.schema_position_gps_update_interval_description
|
||||
@@ -53,7 +55,9 @@ import org.meshtastic.core.resources.schema_position_position_broadcast_smart_en
|
||||
import org.meshtastic.core.resources.schema_position_position_flags
|
||||
import org.meshtastic.core.resources.schema_position_position_flags_description
|
||||
import org.meshtastic.core.resources.schema_position_rx_gpio
|
||||
import org.meshtastic.core.resources.schema_position_rx_gpio_description
|
||||
import org.meshtastic.core.resources.schema_position_tx_gpio
|
||||
import org.meshtastic.core.resources.schema_position_tx_gpio_description
|
||||
import org.meshtastic.core.ui.component.BitwisePreference
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.EditTextPreference
|
||||
@@ -211,7 +215,9 @@ fun PositionConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Un
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_position_broadcast_smart_minimum_interval_secs),
|
||||
summary =
|
||||
stringResource(Res.string.config_position_broadcast_smart_minimum_interval_secs_summary),
|
||||
stringResource(
|
||||
Res.string.schema_position_broadcast_smart_minimum_interval_secs_description,
|
||||
),
|
||||
enabled = state.connected,
|
||||
items = smartItems.map { it to it.toDisplayString() },
|
||||
selectedItem =
|
||||
@@ -249,6 +255,7 @@ fun PositionConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Un
|
||||
TitledCard(title = stringResource(Res.string.device_gps)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_position_fixed_position),
|
||||
summary = stringResource(Res.string.schema_position_fixed_position_description),
|
||||
checked = formState.value.fixed_position,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -348,6 +355,7 @@ fun PositionConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Un
|
||||
val pins = remember { org.meshtastic.feature.settings.util.gpioPins }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_position_rx_gpio),
|
||||
summary = stringResource(Res.string.schema_position_rx_gpio_description),
|
||||
enabled = state.connected,
|
||||
items = pins,
|
||||
selectedItem = formState.value.rx_gpio,
|
||||
@@ -358,6 +366,7 @@ fun PositionConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Un
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_position_tx_gpio),
|
||||
summary = stringResource(Res.string.schema_position_tx_gpio_description),
|
||||
enabled = state.connected,
|
||||
items = pins,
|
||||
selectedItem = formState.value.tx_gpio,
|
||||
@@ -368,6 +377,7 @@ fun PositionConfigScreenCommon(viewModel: RadioConfigViewModel, onBack: () -> Un
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_position_gps_en_gpio),
|
||||
summary = stringResource(Res.string.schema_position_gps_en_gpio_description),
|
||||
enabled = state.connected,
|
||||
items = pins,
|
||||
selectedItem = formState.value.gps_en_gpio,
|
||||
|
||||
+2
@@ -35,6 +35,7 @@ import org.meshtastic.core.resources.schema_power_adc_multiplier_override
|
||||
import org.meshtastic.core.resources.schema_power_is_power_saving
|
||||
import org.meshtastic.core.resources.schema_power_is_power_saving_description
|
||||
import org.meshtastic.core.resources.schema_power_on_battery_shutdown_after_secs
|
||||
import org.meshtastic.core.resources.schema_power_on_battery_shutdown_after_secs_description
|
||||
import org.meshtastic.core.resources.schema_power_wait_bluetooth_secs
|
||||
import org.meshtastic.core.resources.super_deep_sleep_duration_seconds
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
@@ -81,6 +82,7 @@ fun PowerConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
val items = remember { IntervalConfiguration.ALL.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_power_on_battery_shutdown_after_secs),
|
||||
summary = stringResource(Res.string.schema_power_on_battery_shutdown_after_secs_description),
|
||||
selectedItem = formState.value.on_battery_shutdown_after_secs.toLong(),
|
||||
enabled = state.connected,
|
||||
items = items.map { it.value to it.toDisplayString() },
|
||||
|
||||
+4
@@ -27,7 +27,9 @@ import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.range_test
|
||||
import org.meshtastic.core.resources.range_test_config
|
||||
import org.meshtastic.core.resources.schema_rangetest_enabled
|
||||
import org.meshtastic.core.resources.schema_rangetest_enabled_description
|
||||
import org.meshtastic.core.resources.schema_rangetest_save
|
||||
import org.meshtastic.core.resources.schema_rangetest_save_description
|
||||
import org.meshtastic.core.resources.sender_message_interval_seconds
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
import org.meshtastic.core.ui.component.SwitchPreference
|
||||
@@ -66,6 +68,7 @@ fun RangeTestConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
TitledCard(title = stringResource(Res.string.range_test_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_rangetest_enabled),
|
||||
summary = stringResource(Res.string.schema_rangetest_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = canConfigure || formState.value.enabled,
|
||||
onCheckedChange = {
|
||||
@@ -87,6 +90,7 @@ fun RangeTestConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_rangetest_save),
|
||||
summary = stringResource(Res.string.schema_rangetest_save_description),
|
||||
checked = formState.value.save,
|
||||
enabled = canConfigure,
|
||||
onCheckedChange = {
|
||||
|
||||
+14
@@ -27,12 +27,19 @@ import org.jetbrains.compose.resources.stringResource
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.override_console_serial_port
|
||||
import org.meshtastic.core.resources.schema_serial_baud
|
||||
import org.meshtastic.core.resources.schema_serial_baud_description
|
||||
import org.meshtastic.core.resources.schema_serial_echo
|
||||
import org.meshtastic.core.resources.schema_serial_echo_description
|
||||
import org.meshtastic.core.resources.schema_serial_enabled
|
||||
import org.meshtastic.core.resources.schema_serial_enabled_description
|
||||
import org.meshtastic.core.resources.schema_serial_mode
|
||||
import org.meshtastic.core.resources.schema_serial_mode_description
|
||||
import org.meshtastic.core.resources.schema_serial_rxd
|
||||
import org.meshtastic.core.resources.schema_serial_rxd_description
|
||||
import org.meshtastic.core.resources.schema_serial_timeout
|
||||
import org.meshtastic.core.resources.schema_serial_timeout_description
|
||||
import org.meshtastic.core.resources.schema_serial_txd
|
||||
import org.meshtastic.core.resources.schema_serial_txd_description
|
||||
import org.meshtastic.core.resources.serial
|
||||
import org.meshtastic.core.resources.serial_config
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
@@ -67,6 +74,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
TitledCard(title = stringResource(Res.string.serial_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_serial_enabled),
|
||||
summary = stringResource(Res.string.schema_serial_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -77,6 +85,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_serial_echo),
|
||||
summary = stringResource(Res.string.schema_serial_echo_description),
|
||||
checked = formState.value.echo,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -87,6 +96,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_serial_rxd),
|
||||
summary = stringResource(Res.string.schema_serial_rxd_description),
|
||||
value = formState.value.rxd,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -97,6 +107,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_serial_txd),
|
||||
summary = stringResource(Res.string.schema_serial_txd_description),
|
||||
value = formState.value.txd,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -107,6 +118,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_serial_baud),
|
||||
summary = stringResource(Res.string.schema_serial_baud_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.baud,
|
||||
onItemSelected = {
|
||||
@@ -116,6 +128,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
EditTextPreference(
|
||||
title = stringResource(Res.string.schema_serial_timeout),
|
||||
summary = stringResource(Res.string.schema_serial_timeout_description),
|
||||
value = formState.value.timeout,
|
||||
enabled = state.connected,
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
@@ -126,6 +139,7 @@ fun SerialConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_serial_mode),
|
||||
summary = stringResource(Res.string.schema_serial_mode_description),
|
||||
enabled = state.connected,
|
||||
selectedItem = formState.value.mode,
|
||||
onItemSelected = {
|
||||
|
||||
+6
@@ -26,10 +26,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.schema_storeforward_enabled
|
||||
import org.meshtastic.core.resources.schema_storeforward_enabled_description
|
||||
import org.meshtastic.core.resources.schema_storeforward_heartbeat
|
||||
import org.meshtastic.core.resources.schema_storeforward_heartbeat_description
|
||||
import org.meshtastic.core.resources.schema_storeforward_history_return_max
|
||||
import org.meshtastic.core.resources.schema_storeforward_history_return_window
|
||||
import org.meshtastic.core.resources.schema_storeforward_is_server
|
||||
import org.meshtastic.core.resources.schema_storeforward_is_server_description
|
||||
import org.meshtastic.core.resources.schema_storeforward_records
|
||||
import org.meshtastic.core.resources.store_forward
|
||||
import org.meshtastic.core.resources.store_forward_config
|
||||
@@ -64,6 +67,7 @@ fun StoreForwardConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
TitledCard(title = stringResource(Res.string.store_forward_config)) {
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_storeforward_enabled),
|
||||
summary = stringResource(Res.string.schema_storeforward_enabled_description),
|
||||
checked = formState.value.enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -74,6 +78,7 @@ fun StoreForwardConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_storeforward_heartbeat),
|
||||
summary = stringResource(Res.string.schema_storeforward_heartbeat_description),
|
||||
checked = formState.value.heartbeat,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -115,6 +120,7 @@ fun StoreForwardConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_storeforward_is_server),
|
||||
summary = stringResource(Res.string.schema_storeforward_is_server_description),
|
||||
checked = formState.value.is_server,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
|
||||
+4
-4
@@ -61,9 +61,10 @@ import org.meshtastic.core.repository.TakPrefs
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.back
|
||||
import org.meshtastic.core.resources.export_tak_data_package
|
||||
import org.meshtastic.core.resources.schema_tak_role
|
||||
import org.meshtastic.core.resources.schema_tak_team
|
||||
import org.meshtastic.core.resources.tak
|
||||
import org.meshtastic.core.resources.tak_config
|
||||
import org.meshtastic.core.resources.tak_role
|
||||
import org.meshtastic.core.resources.tak_server
|
||||
import org.meshtastic.core.resources.tak_server_channel
|
||||
import org.meshtastic.core.resources.tak_server_channel_desc
|
||||
@@ -94,7 +95,6 @@ import org.meshtastic.core.resources.tak_server_test_results_v2
|
||||
import org.meshtastic.core.resources.tak_server_test_run
|
||||
import org.meshtastic.core.resources.tak_server_test_running
|
||||
import org.meshtastic.core.resources.tak_server_v1_fallback_notice
|
||||
import org.meshtastic.core.resources.tak_team
|
||||
import org.meshtastic.core.takserver.TAKDataPackageGenerator
|
||||
import org.meshtastic.core.takserver.TAKMeshIntegration
|
||||
import org.meshtastic.core.takserver.TAKServerManager
|
||||
@@ -170,7 +170,7 @@ internal fun TakConfigCard(
|
||||
) {
|
||||
TitledCard(title = stringResource(Res.string.tak_config)) {
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.tak_team),
|
||||
title = stringResource(Res.string.schema_tak_team),
|
||||
enabled = enabled,
|
||||
selectedItem = team,
|
||||
itemColor = { Color(getColorFrom(it)) },
|
||||
@@ -178,7 +178,7 @@ internal fun TakConfigCard(
|
||||
)
|
||||
HorizontalDivider()
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.tak_role),
|
||||
title = stringResource(Res.string.schema_tak_role),
|
||||
enabled = enabled,
|
||||
selectedItem = role,
|
||||
onItemSelected = onRoleSelected,
|
||||
|
||||
+20
@@ -26,17 +26,27 @@ import org.jetbrains.compose.resources.stringResource
|
||||
import org.meshtastic.core.model.Capabilities
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.schema_telemetry_air_quality_enabled
|
||||
import org.meshtastic.core.resources.schema_telemetry_air_quality_enabled_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_air_quality_interval
|
||||
import org.meshtastic.core.resources.schema_telemetry_air_quality_interval_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_device_telemetry_enabled
|
||||
import org.meshtastic.core.resources.schema_telemetry_device_telemetry_enabled_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_device_update_interval
|
||||
import org.meshtastic.core.resources.schema_telemetry_device_update_interval_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_display_fahrenheit
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_display_fahrenheit_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_measurement_enabled
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_measurement_enabled_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_screen_enabled
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_screen_enabled_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_update_interval
|
||||
import org.meshtastic.core.resources.schema_telemetry_environment_update_interval_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_power_measurement_enabled
|
||||
import org.meshtastic.core.resources.schema_telemetry_power_measurement_enabled_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_power_screen_enabled
|
||||
import org.meshtastic.core.resources.schema_telemetry_power_screen_enabled_description
|
||||
import org.meshtastic.core.resources.schema_telemetry_power_update_interval
|
||||
import org.meshtastic.core.resources.schema_telemetry_power_update_interval_description
|
||||
import org.meshtastic.core.resources.telemetry
|
||||
import org.meshtastic.core.resources.telemetry_config
|
||||
import org.meshtastic.core.ui.component.DropDownPreference
|
||||
@@ -90,6 +100,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
val items = remember { IntervalConfiguration.BROADCAST_SHORT.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_device_update_interval),
|
||||
summary = stringResource(Res.string.schema_telemetry_device_update_interval_description),
|
||||
selectedItem = formState.value.device_update_interval.toLong(),
|
||||
enabled = state.connected,
|
||||
items = items.map { it.value to it.toDisplayString() },
|
||||
@@ -101,6 +112,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_environment_measurement_enabled),
|
||||
summary = stringResource(Res.string.schema_telemetry_environment_measurement_enabled_description),
|
||||
checked = formState.value.environment_measurement_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -113,6 +125,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
val envItems = remember { IntervalConfiguration.BROADCAST_SHORT.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_environment_update_interval),
|
||||
summary = stringResource(Res.string.schema_telemetry_environment_update_interval_description),
|
||||
selectedItem = formState.value.environment_update_interval.toLong(),
|
||||
enabled = state.connected,
|
||||
items = envItems.map { it.value to it.toDisplayString() },
|
||||
@@ -127,6 +140,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_environment_screen_enabled),
|
||||
summary = stringResource(Res.string.schema_telemetry_environment_screen_enabled_description),
|
||||
checked = formState.value.environment_screen_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -138,6 +152,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_environment_display_fahrenheit),
|
||||
summary = stringResource(Res.string.schema_telemetry_environment_display_fahrenheit_description),
|
||||
checked = formState.value.environment_display_fahrenheit,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -149,6 +164,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_air_quality_enabled),
|
||||
summary = stringResource(Res.string.schema_telemetry_air_quality_enabled_description),
|
||||
checked = formState.value.air_quality_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -161,6 +177,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
val airItems = remember { IntervalConfiguration.BROADCAST_SHORT.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_air_quality_interval),
|
||||
summary = stringResource(Res.string.schema_telemetry_air_quality_interval_description),
|
||||
selectedItem = formState.value.air_quality_interval.toLong(),
|
||||
enabled = state.connected,
|
||||
items = airItems.map { it.value to it.toDisplayString() },
|
||||
@@ -172,6 +189,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_power_measurement_enabled),
|
||||
summary = stringResource(Res.string.schema_telemetry_power_measurement_enabled_description),
|
||||
checked = formState.value.power_measurement_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
@@ -184,6 +202,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
val powerItems = remember { IntervalConfiguration.BROADCAST_SHORT.allowedIntervals }
|
||||
DropDownPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_power_update_interval),
|
||||
summary = stringResource(Res.string.schema_telemetry_power_update_interval_description),
|
||||
selectedItem = formState.value.power_update_interval.toLong(),
|
||||
enabled = state.connected,
|
||||
items = powerItems.map { it.value to it.toDisplayString() },
|
||||
@@ -195,6 +214,7 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit) {
|
||||
HorizontalDivider()
|
||||
SwitchPreference(
|
||||
title = stringResource(Res.string.schema_telemetry_power_screen_enabled),
|
||||
summary = stringResource(Res.string.schema_telemetry_power_screen_enabled_description),
|
||||
checked = formState.value.power_screen_enabled,
|
||||
enabled = state.connected,
|
||||
onCheckedChange = {
|
||||
|
||||
+6
-6
@@ -25,8 +25,8 @@ import androidx.compose.ui.test.v2.runComposeUiTest
|
||||
import org.meshtastic.core.resources.Res
|
||||
import org.meshtastic.core.resources.getString
|
||||
import org.meshtastic.core.resources.i_agree
|
||||
import org.meshtastic.core.resources.map_reporting
|
||||
import org.meshtastic.core.resources.map_reporting_summary
|
||||
import org.meshtastic.core.resources.schema_mqtt_map_reporting_enabled
|
||||
import org.meshtastic.core.resources.schema_mqtt_map_reporting_enabled_description
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
@@ -62,8 +62,8 @@ class MapReportingPreferenceTest {
|
||||
}
|
||||
}
|
||||
// Verify that the dialog title is displayed
|
||||
onNodeWithText(getString(Res.string.map_reporting)).assertIsDisplayed()
|
||||
onNodeWithText(getString(Res.string.map_reporting_summary)).assertIsDisplayed()
|
||||
onNodeWithText(getString(Res.string.schema_mqtt_map_reporting_enabled)).assertIsDisplayed()
|
||||
onNodeWithText(getString(Res.string.schema_mqtt_map_reporting_enabled_description)).assertIsDisplayed()
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -84,14 +84,14 @@ class MapReportingPreferenceTest {
|
||||
}
|
||||
}
|
||||
onNodeWithText(getString(Res.string.i_agree)).assertDoesNotExist()
|
||||
onNodeWithText(getString(Res.string.map_reporting)).performClick()
|
||||
onNodeWithText(getString(Res.string.schema_mqtt_map_reporting_enabled)).performClick()
|
||||
assertFalse(mapReportingEnabled)
|
||||
assertFalse(shouldReportLocation)
|
||||
onNodeWithText(getString(Res.string.i_agree)).assertIsDisplayed()
|
||||
onNodeWithText(getString(Res.string.i_agree)).performClick()
|
||||
assertTrue(shouldReportLocation)
|
||||
assertTrue(mapReportingEnabled)
|
||||
onNodeWithText(getString(Res.string.map_reporting)).performClick()
|
||||
onNodeWithText(getString(Res.string.schema_mqtt_map_reporting_enabled)).performClick()
|
||||
onNodeWithText(getString(Res.string.i_agree)).assertDoesNotExist()
|
||||
assertTrue(shouldReportLocation)
|
||||
assertFalse(mapReportingEnabled)
|
||||
|
||||
Reference in new issue
Block a user