mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-09-23 20:25:08 -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
Generated
-14
@@ -244,7 +244,6 @@ config_lora_modem_preset_licensed_summary
|
||||
config_lora_modem_preset_summary
|
||||
config_lora_region_summary
|
||||
config_network_udp_enabled_summary
|
||||
config_position_broadcast_smart_minimum_interval_secs_summary
|
||||
config_saved_restarting
|
||||
config_security_private_key
|
||||
config_security_private_key_remote
|
||||
@@ -455,7 +454,6 @@ distance_filters
|
||||
distance_filters_description
|
||||
distance_measurements
|
||||
distance_measurements_description
|
||||
dns
|
||||
### DOC ###
|
||||
doc_clear_search
|
||||
doc_keywords_app_functions
|
||||
@@ -708,7 +706,6 @@ firmware_update_wipe_confirm_warning
|
||||
firmware_update_wipe_label
|
||||
firmware_update_wipe_usb_detail
|
||||
firmware_version
|
||||
fixed_pin
|
||||
fixed_position
|
||||
for_more_information_see_our_privacy_policy
|
||||
### FORMAT ###
|
||||
@@ -722,7 +719,6 @@ free_memory
|
||||
free_memory_description
|
||||
freq
|
||||
gas_resistance
|
||||
gateway
|
||||
generate_qr_code
|
||||
### GEOFENCE ###
|
||||
geofence
|
||||
@@ -823,7 +819,6 @@ layer_type_geojson
|
||||
layer_type_kml
|
||||
layer_type_network
|
||||
learn_more
|
||||
led_heartbeat
|
||||
legacy_admin_channel
|
||||
library_count
|
||||
license
|
||||
@@ -971,11 +966,9 @@ map_overlay_precipitation
|
||||
map_overlay_weather_radar
|
||||
map_purge_fail
|
||||
map_purge_success
|
||||
map_reporting
|
||||
map_reporting_consent_header
|
||||
map_reporting_consent_text
|
||||
map_reporting_interval_seconds
|
||||
map_reporting_summary
|
||||
map_select_download_region
|
||||
map_start_download
|
||||
map_style_selection
|
||||
@@ -1006,7 +999,6 @@ mesh_beacon_interval_error
|
||||
mesh_beacon_invitations_title
|
||||
mesh_beacon_listen
|
||||
mesh_beacon_listen_summary
|
||||
mesh_beacon_message
|
||||
mesh_beacon_message_error
|
||||
mesh_beacon_no_channels
|
||||
mesh_beacon_notification_body
|
||||
@@ -1437,7 +1429,6 @@ refresh
|
||||
refresh_metadata
|
||||
regenerate_keys_confirmation
|
||||
regenerate_private_key
|
||||
region_frequency_plan
|
||||
relays
|
||||
### REMOTE ###
|
||||
remote
|
||||
@@ -1668,7 +1659,6 @@ stay_connected_anywhere
|
||||
stop_connecting
|
||||
store_forward
|
||||
store_forward_config
|
||||
subnet
|
||||
success
|
||||
super_deep_sleep_duration_seconds
|
||||
supported
|
||||
@@ -1681,7 +1671,6 @@ system_settings
|
||||
### TAK ###
|
||||
tak
|
||||
tak_config
|
||||
tak_role
|
||||
tak_server
|
||||
tak_server_channel
|
||||
tak_server_channel_desc
|
||||
@@ -1713,7 +1702,6 @@ tak_server_test_results_v2
|
||||
tak_server_test_run
|
||||
tak_server_test_running
|
||||
tak_server_v1_fallback_notice
|
||||
tak_team
|
||||
telemetry
|
||||
telemetry_config
|
||||
temperature
|
||||
@@ -1722,10 +1710,8 @@ theme_dark
|
||||
theme_light
|
||||
theme_system
|
||||
time
|
||||
time_zone
|
||||
timeout
|
||||
timestamp
|
||||
tls_enabled
|
||||
tls_enabled_public_broker_summary
|
||||
toggle_my_position
|
||||
trace_route
|
||||
|
||||
@@ -268,7 +268,6 @@
|
||||
<string name="config_lora_modem_preset_summary">Available modem presets, default is Long Fast.</string>
|
||||
<string name="config_lora_region_summary">The region where you will be using your radios.</string>
|
||||
<string name="config_network_udp_enabled_summary">Enable broadcasting packets via UDP over the local network.</string>
|
||||
<string name="config_position_broadcast_smart_minimum_interval_secs_summary">The fastest that position updates will be sent if the minimum distance has been satisfied.</string>
|
||||
<string name="config_saved_restarting">The node is restarting and will be briefly unreachable.</string>
|
||||
<string name="config_security_private_key">Used to create a shared key with a remote device.</string>
|
||||
<string name="config_security_private_key_remote">The device does not share its private key over remote administration. You can set a new key, but it can never be read back.</string>
|
||||
@@ -485,7 +484,6 @@
|
||||
<string name="distance_filters_description">Filter the node list and mesh map based on proximity to your phone.</string>
|
||||
<string name="distance_measurements">Distance Measurements</string>
|
||||
<string name="distance_measurements_description">Display the distance between your phone and other Meshtastic nodes with positions.</string>
|
||||
<string name="dns">DNS</string>
|
||||
<!-- DOC -->
|
||||
<string name="doc_clear_search">Clear search</string>
|
||||
<string name="doc_keywords_app_functions">system ai,gemini,assistant,functions,automation,voice</string>
|
||||
@@ -738,7 +736,6 @@
|
||||
<string name="firmware_update_wipe_label">Erase device during update</string>
|
||||
<string name="firmware_update_wipe_usb_detail">Wipes the device's flash completely, then installs the selected firmware from scratch.</string>
|
||||
<string name="firmware_version">Firmware version: %1$s</string>
|
||||
<string name="fixed_pin">Fixed PIN</string>
|
||||
<string name="fixed_position">Fixed Position</string>
|
||||
<string name="for_more_information_see_our_privacy_policy">For more information, see our privacy policy.</string>
|
||||
<!-- FORMAT -->
|
||||
@@ -752,7 +749,6 @@
|
||||
<string name="free_memory_description">Available system memory in bytes</string>
|
||||
<string name="freq">Freq</string>
|
||||
<string name="gas_resistance">Gas Resistance</string>
|
||||
<string name="gateway">Gateway</string>
|
||||
<string name="generate_qr_code">Generate QR Code</string>
|
||||
<!-- GEOFENCE -->
|
||||
<string name="geofence">Geofence</string>
|
||||
@@ -853,7 +849,6 @@
|
||||
<string name="layer_type_kml" translatable="false">KML</string>
|
||||
<string name="layer_type_network">Network layer</string>
|
||||
<string name="learn_more">Learn more</string>
|
||||
<string name="led_heartbeat">LED Heartbeat</string>
|
||||
<string name="legacy_admin_channel">Legacy Admin channel</string>
|
||||
<string name="library_count">%1$d libraries</string>
|
||||
<string name="license">License</string>
|
||||
@@ -1007,11 +1002,9 @@
|
||||
<string name="map_overlay_weather_radar">Weather radar</string>
|
||||
<string name="map_purge_fail">SQL Cache purge failed, see logcat for details</string>
|
||||
<string name="map_purge_success">SQL Cache purged for %1$s</string>
|
||||
<string name="map_reporting">Map reporting</string>
|
||||
<string name="map_reporting_consent_header">Consent to Share Unencrypted Node Data via MQTT</string>
|
||||
<string name="map_reporting_consent_text">By enabling this feature, you acknowledge and expressly consent to the transmission of your device’s real-time geographic location over the MQTT protocol without encryption. This location data may be used for purposes such as live map reporting, device tracking, and related telemetry functions.</string>
|
||||
<string name="map_reporting_interval_seconds">Map reporting interval (seconds)</string>
|
||||
<string name="map_reporting_summary">Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, long and short name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name.</string>
|
||||
<string name="map_select_download_region">Select download region</string>
|
||||
<string name="map_start_download">Start Download</string>
|
||||
<string name="map_style_selection">Map style selection</string>
|
||||
@@ -1042,7 +1035,6 @@
|
||||
<string name="mesh_beacon_invitations_title">Mesh invitations</string>
|
||||
<string name="mesh_beacon_listen">Listen for beacons</string>
|
||||
<string name="mesh_beacon_listen_summary">Capture invitations advertised by nearby meshes</string>
|
||||
<string name="mesh_beacon_message">Beacon message</string>
|
||||
<string name="mesh_beacon_message_error">Maximum %1$d bytes</string>
|
||||
<string name="mesh_beacon_no_channels">No channels available</string>
|
||||
<string name="mesh_beacon_notification_body">A nearby mesh invited you to join</string>
|
||||
@@ -1485,7 +1477,6 @@
|
||||
<string name="refresh_metadata">Refresh metadata</string>
|
||||
<string name="regenerate_keys_confirmation">Are you sure you want to regenerate your Private Key?\n\nNodes that may have previously exchanged keys with this node will need to Remove that node and re-exchange keys in order to resume secure communication.</string>
|
||||
<string name="regenerate_private_key">Regenerate Private Key</string>
|
||||
<string name="region_frequency_plan">Region</string>
|
||||
<plurals name="relays">
|
||||
<item quantity="one">Heard %1$d relay</item>
|
||||
<item quantity="other">Heard %1$d relays</item>
|
||||
@@ -1719,7 +1710,6 @@
|
||||
<string name="stop_connecting">Stop Connecting</string>
|
||||
<string name="store_forward">Store & Forward</string>
|
||||
<string name="store_forward_config">Store & Forward Config</string>
|
||||
<string name="subnet">Subnet</string>
|
||||
<string name="success">Success</string>
|
||||
<string name="super_deep_sleep_duration_seconds">Super deep sleep duration</string>
|
||||
<string name="supported">Supported</string>
|
||||
@@ -1732,7 +1722,6 @@
|
||||
<!-- TAK -->
|
||||
<string name="tak">TAK (ATAK)</string>
|
||||
<string name="tak_config">TAK Configuration</string>
|
||||
<string name="tak_role">Member Role</string>
|
||||
<string name="tak_server">TAK Server</string>
|
||||
<string name="tak_server_channel">TAK Mesh Channel</string>
|
||||
<string name="tak_server_channel_desc">Meshtastic channel used for outgoing TAK traffic</string>
|
||||
@@ -1767,7 +1756,6 @@
|
||||
<string name="tak_server_test_run">Run</string>
|
||||
<string name="tak_server_test_running">Running: %1$s</string>
|
||||
<string name="tak_server_v1_fallback_notice">Connected node firmware doesn't support full TAK integration — only location and chat messages will bridge to ATAK. Markers and other event types need firmware 2.8.0 or newer.</string>
|
||||
<string name="tak_team">Team Color</string>
|
||||
<string name="telemetry">Telemetry</string>
|
||||
<string name="telemetry_config">Telemetry Config</string>
|
||||
<string name="temperature">Temp</string>
|
||||
@@ -1776,10 +1764,8 @@
|
||||
<string name="theme_light">Light</string>
|
||||
<string name="theme_system">System default</string>
|
||||
<string name="time">Time</string>
|
||||
<string name="time_zone">Time Zone</string>
|
||||
<string name="timeout">Timeout</string>
|
||||
<string name="timestamp">Timestamp</string>
|
||||
<string name="tls_enabled">TLS enabled</string>
|
||||
<string name="tls_enabled_public_broker_summary">When this phone relays MQTT it always connects to mqtt.meshtastic.org over TLS. This setting applies when the radio reaches the broker over its own Wi-Fi or Ethernet.</string>
|
||||
<string name="toggle_my_position">Toggle my position</string>
|
||||
<string name="trace_route">Trace Route</string>
|
||||
|
||||
+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)
|
||||
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 21 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 21 KiB |
Reference in new issue
Block a user