From e90aa6c5edb0319a69af46bfc31241974fd3562d Mon Sep 17 00:00:00 2001 From: Slush Date: Mon, 19 May 2025 13:30:23 +0200 Subject: [PATCH] fix #1567: Allow using a different TCP port than default 4403 (#1861) --- .../java/com/geeksville/mesh/ui/Settings.kt | 24 +++++++++++++++---- app/src/main/res/values/strings.xml | 1 + 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/Settings.kt b/app/src/main/java/com/geeksville/mesh/ui/Settings.kt index 777f0a9e1..ec872511e 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Settings.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Settings.kt @@ -88,6 +88,7 @@ import com.geeksville.mesh.model.BTScanModel import com.geeksville.mesh.model.BluetoothViewModel import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.service.MeshService +import com.geeksville.mesh.repository.network.NetworkRepository import kotlinx.coroutines.delay fun String?.isIPAddress(): Boolean { @@ -145,6 +146,7 @@ fun SettingsScreen( // State for manual IP address input var manualIpAddress by remember { mutableStateOf("") } + var manualIpPort by remember { mutableStateOf(NetworkRepository.SERVICE_PORT.toString()) } // State for the device scan dialog var showScanDialog by remember { mutableStateOf(false) } @@ -306,7 +308,7 @@ fun SettingsScreen( scanModel.onSelected( BTScanModel.DeviceListEntry( "", - "t$manualIpAddress", + "t$manualIpAddress:$manualIpPort", true ) ) @@ -319,13 +321,13 @@ fun SettingsScreen( verticalAlignment = Alignment.CenterVertically ) { RadioButton( - selected = ("t$manualIpAddress" == selectedDevice), + selected = ("t$manualIpAddress:$manualIpPort" == selectedDevice), onClick = { if (manualIpAddress.isIPAddress()) { scanModel.onSelected( BTScanModel.DeviceListEntry( "", - "t$manualIpAddress", + "t$manualIpAddress:$manualIpPort", true ) ) @@ -340,9 +342,23 @@ fun SettingsScreen( label = { Text(stringResource(R.string.ip_address)) }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), modifier = Modifier - .weight(1f) + .weight(weight = 0.7f) .padding(start = 16.dp) ) + OutlinedTextField( + value = manualIpPort, + onValueChange = { + // Only allow numeric input for port + if (it.all { char -> char.isDigit() }) { + manualIpPort = it + } + }, + label = { Text(stringResource(R.string.ip_port)) }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + modifier = Modifier + .weight(weight = 0.3f) + .padding(start = 8.dp) + ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 26ece572b..c66e078fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,6 +120,7 @@ Connected: %1$s online Update Firmware IP Address: + Port: Connected to radio Connected to radio (%s) Not connected