From 9d465bce16e06aa301426de10a8d304dcc01d05f Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 25 Oct 2026 16:24:33 +0100 Subject: [PATCH] Add Android autosocket protocol selection to network settings --- .../utun/chat/ui/screens/SettingsScreen.kt | 33 +++++++++++++++++++ .../app/src/main/res/values-ru/strings.xml | 1 + .../app/src/main/res/values/strings.xml | 1 + 3 files changed, 35 insertions(+) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/SettingsScreen.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/SettingsScreen.kt index 17bf9cfd..ecda790c 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/SettingsScreen.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/SettingsScreen.kt @@ -44,6 +44,7 @@ import com.utun.chat.data.CallVideoBitrateRange import com.utun.chat.data.MicrophonePermission import com.utun.chat.data.LogManager import com.utun.chat.data.ServerEntry +import com.utun.chat.data.AutoSocketProtocols import com.utun.chat.data.LocalSocketState import com.utun.chat.ui.components.LocalSocketNatInfo import com.utun.chat.data.VoiceSettings @@ -261,6 +262,8 @@ private fun DeveloperSettingsTab(vm: ChatViewModel, onDirty: (Boolean) -> Unit, var servers by remember { mutableStateOf>(emptyList()) } var availableIfaces by remember { mutableStateOf>>(emptyList()) } var connectionMode by remember { mutableStateOf("manual") } + var autoSocketProtocols by remember { mutableStateOf(AutoSocketProtocols.BOTH) } + var savingSocketProtocols by remember { mutableStateOf(false) } var autoConnect by remember { mutableStateOf(true) } val localSocketStates by vm.localSockets.collectAsState() @@ -290,6 +293,7 @@ private fun DeveloperSettingsTab(vm: ChatViewModel, onDirty: (Boolean) -> Unit, servers = provider.loadServersFromConfig() availableIfaces = allIface.drop(1) connectionMode = provider.getConnectionMode() + autoSocketProtocols = provider.getAutoSocketProtocols() autoConnect = provider.getInt("chat.group_autoconnect") != 0 } @@ -393,6 +397,35 @@ private fun DeveloperSettingsTab(vm: ChatViewModel, onDirty: (Boolean) -> Unit, } if (connectionMode == "auto") { + item(key = "auto-socket-protocols") { + Column { + Text(stringResource(R.string.socket_protocols), style = MaterialTheme.typography.bodyMedium) + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + AutoSocketProtocols.values().forEach { protocols -> + FilterChip(selected = autoSocketProtocols == protocols, enabled = !savingSocketProtocols, + onClick = { + if (autoSocketProtocols != protocols) { + savingSocketProtocols = true + scope.launch { + try { + withContext(Dispatchers.IO) { + provider.setAutoSocketProtocols(protocols) + if (NativeLib.isReady() && !NativeLib.restart(provider.getString("db.path") ?: "", + provider.getInt("control.port"), provider.buildConfigText())) + LogManager.addLog("ERROR", "CFG", "restart after socket protocol change failed") + } + autoSocketProtocols = protocols + } catch (e: CancellationException) { throw e + } catch (e: Exception) { + LogManager.addLog("ERROR", "CFG", "socket protocol change failed: ${e.message}") + } finally { savingSocketProtocols = false } + } + } + }, label = { Text(protocols.configValue.uppercase()) }) + } + } + } + } /* Auto mode: read-only live socket display */ if (localSocketStates.isEmpty()) { item(key = "no-sockets") { Text(stringResource(R.string.no_sockets), color = MaterialTheme.colorScheme.onSurfaceVariant) } diff --git a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml index a389dea5..d4f8a406 100644 --- a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml +++ b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml @@ -267,6 +267,7 @@ "Создать ключи" "Очистить БД" "Сетевые интерфейсы" + "Тип сокетов" "Авто" "Вручную" "Сокеты не обнаружены" diff --git a/tools/chatgui-android/app/src/main/res/values/strings.xml b/tools/chatgui-android/app/src/main/res/values/strings.xml index 4ff1958a..3a4ce0a3 100644 --- a/tools/chatgui-android/app/src/main/res/values/strings.xml +++ b/tools/chatgui-android/app/src/main/res/values/strings.xml @@ -268,6 +268,7 @@ "Generate keys" "Clear DB" "Network interfaces" + "Socket protocols" "Auto" "Manual" "No sockets detected"