From de54c2d0592c2c19165cd6ce6b8b24d591a1d6a0 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 3 Oct 2026 14:08:17 +0300 Subject: [PATCH] android radio: add volume PTT toggle to radio panel --- .../src/main/java/com/utun/chat/ui/screens/ChatScreen.kt | 6 +++++- .../main/java/com/utun/chat/ui/screens/SettingsScreen.kt | 3 +-- .../src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt | 7 +++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt index ff6839a4..5eb28993 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/ChatScreen.kt @@ -249,7 +249,7 @@ private fun RadioPttButton( } } -/* Единый выбор входа/выхода, VAD и плавающая PTT-кнопка. */ +/* Единый выбор входа/выхода, PTT громкостью, VAD и плавающая PTT-кнопка. */ @Composable private fun RadioSourceBar(viewModel: ChatViewModel) { val radioAuto by viewModel.radioAuto.collectAsState() @@ -261,6 +261,7 @@ private fun RadioSourceBar(viewModel: ChatViewModel) { val scope = rememberCoroutineScope() val overlayEnabled by provider.radioOverlayEnabled.collectAsState(initial = provider.getRadioOverlay()) val vadEnabled by provider.radioVadEnabled.collectAsState(initial = provider.getInt("radio.vad_enabled") != 0) + val volumePttEnabled by provider.radioVolumePttEnabled.collectAsState(initial = provider.getRadioVolumePtt()) val overlayShown by RadioOverlayService.isShown.collectAsState() val overlayStatus by RadioOverlayService.status.collectAsState() @@ -300,6 +301,9 @@ private fun RadioSourceBar(viewModel: ChatViewModel) { } } VerticalDivider(modifier = Modifier.height(32.dp), color = Color(0xFF344550)) + RadioControlButton(Icons.AutoMirrored.Filled.VolumeUp, stringResource(R.string.volume_ptt), volumePttEnabled) { + viewModel.setRadioVolumePtt(!volumePttEnabled) + } RadioControlButton(null, stringResource(if (vadEnabled) R.string.disable_vad else R.string.enable_vad), vadEnabled, text = stringResource(R.string.vad_button)) { viewModel.setRadioVad(!vadEnabled) 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 9165e4a2..3661e89e 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 @@ -604,11 +604,10 @@ private fun RadioSettingsTab() { HorizontalDivider(Modifier.padding(vertical = 4.dp)) /* ── Volume-кнопки PTT ── */ - var volumePtt by remember { mutableStateOf(provider.getRadioVolumePtt()) } + val volumePtt by provider.radioVolumePttEnabled.collectAsState(initial = provider.getRadioVolumePtt()) Row(verticalAlignment = Alignment.CenterVertically) { Text(stringResource(R.string.volume_ptt), modifier = Modifier.weight(1f)) Switch(checked = volumePtt, onCheckedChange = { - volumePtt = it scope.launch { provider.setRadioVolumePtt(it) } }) } diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt index 536487ca..e39be563 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt @@ -661,6 +661,13 @@ class ChatViewModel : ViewModel() { radioAudio.talkEnd() } + fun setRadioVolumePtt(enabled: Boolean) { + if (!_radioActive.value) return + viewModelScope.launch { + ChatApplication.instance.configProvider.setRadioVolumePtt(enabled) + } + } + /** Переключатель авто-PTT на панели рации: сохранить выбор и перенастроить захват. */ fun setRadioVad(enabled: Boolean) { if (!_radioActive.value) return