From ad08a6c7b7137dc52281db6312d1d009dc6fb28c Mon Sep 17 00:00:00 2001
From: James Rich <2199651+jamesarich@users.noreply.github.com>
Date: Thu, 9 Apr 2026 09:23:31 -0500
Subject: [PATCH] feat(settings): add DNS support and fix UDP protocol toggle
(#5013)
---
.../composeResources/values/strings.xml | 1 +
.../radio/component/NetworkConfigItemList.kt | 49 ++++++++++++-------
2 files changed, 31 insertions(+), 19 deletions(-)
diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml
index 7fac1ccc7..461b52178 100644
--- a/core/resources/src/commonMain/composeResources/values/strings.xml
+++ b/core/resources/src/commonMain/composeResources/values/strings.xml
@@ -689,6 +689,7 @@
IP
Gateway
Subred
+ DNS
Paxcounter Config
Paxcounter enabled
Status Message
diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/NetworkConfigItemList.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/NetworkConfigItemList.kt
index 4e471be24..b9796aba5 100644
--- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/NetworkConfigItemList.kt
+++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/NetworkConfigItemList.kt
@@ -46,6 +46,7 @@ import org.meshtastic.core.resources.config_network_eth_enabled_summary
import org.meshtastic.core.resources.config_network_udp_enabled_summary
import org.meshtastic.core.resources.config_network_wifi_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_enabled
@@ -271,29 +272,31 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
SwitchPreference(
title = stringResource(Res.string.udp_enabled),
summary = stringResource(Res.string.config_network_udp_enabled_summary),
- checked = formState.value.address_mode == Config.NetworkConfig.AddressMode.STATIC,
- onCheckedChange = {
- formState.value =
- formState.value.copy(
- address_mode =
- if (it) {
- Config.NetworkConfig.AddressMode.STATIC
- } else {
- Config.NetworkConfig.AddressMode.DHCP
- },
- )
+ checked =
+ formState.value.enabled_protocols and Config.NetworkConfig.ProtocolFlags.UDP_BROADCAST.value !=
+ 0,
+ onCheckedChange = { enabled ->
+ val flags =
+ if (enabled) {
+ formState.value.enabled_protocols or
+ Config.NetworkConfig.ProtocolFlags.UDP_BROADCAST.value
+ } else {
+ formState.value.enabled_protocols and
+ Config.NetworkConfig.ProtocolFlags.UDP_BROADCAST.value.inv()
+ }
+ formState.value = formState.value.copy(enabled_protocols = flags)
},
enabled = state.connected,
)
+ HorizontalDivider()
+ DropDownPreference(
+ title = stringResource(Res.string.ipv4_mode),
+ enabled = state.connected,
+ selectedItem = formState.value.address_mode,
+ onItemSelected = { formState.value = formState.value.copy(address_mode = it) },
+ itemLabel = { it.name },
+ )
if (formState.value.address_mode == Config.NetworkConfig.AddressMode.STATIC) {
- HorizontalDivider()
- DropDownPreference(
- title = stringResource(Res.string.ipv4_mode),
- enabled = state.connected,
- selectedItem = formState.value.address_mode,
- onItemSelected = { formState.value = formState.value.copy(address_mode = it) },
- itemLabel = { it.name },
- )
HorizontalDivider()
val ipv4 = formState.value.ipv4_config ?: Config.NetworkConfig.IpV4Config()
EditIPv4Preference(
@@ -323,6 +326,14 @@ fun NetworkConfigScreen(viewModel: RadioConfigViewModel, onBack: () -> Unit, onO
},
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
)
+ HorizontalDivider()
+ EditIPv4Preference(
+ title = stringResource(Res.string.dns),
+ value = ipv4.dns,
+ enabled = state.connected,
+ onValueChanged = { formState.value = formState.value.copy(ipv4_config = ipv4.copy(dns = it)) },
+ keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
+ )
}
}
}