From b523282e8e785b2b367e9f9495e6deaf849dbbb4 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 16 Oct 2026 01:28:59 +0200 Subject: [PATCH] Allow simultaneous stream publication and radio in Android UI --- .../src/main/java/com/utun/chat/data/StreamController.kt | 6 +++--- .../src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamController.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamController.kt index 2995a0a6..86aa465d 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamController.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamController.kt @@ -39,8 +39,8 @@ object StreamController { if (mutable.value?.ongoing == true) { LogManager.addLog("WARN", "stream", "publisher already owned"); return } val id = nextId() if (!NativeLib.isReady() || group == 0L || CallController.state.value?.ongoing == true || - RadioAudioEngine.instance().isActive() || NativeLib.voiceIsActive()) { - LogManager.addLog("WARN", "stream", "start rejected: core/call/radio/voice busy group=$group") + NativeLib.voiceIsActive()) { + LogManager.addLog("WARN", "stream", "start rejected: core/call/voice busy group=$group") mutable.value = StreamState(id, group, StreamPhase.FAILED, R.string.stream_resources_busy); return } capturing = true; mutable.value = StreamState(id, group, StreamPhase.STARTING, pendingConfig = config) @@ -119,7 +119,7 @@ object StreamController { } } - /** Звонок/рация/голосовое не отбирают микрофон у foreground-трансляции. */ + /** Звонок/голосовое не отбирают микрофон у foreground-трансляции; рация использует общий захват. */ fun blocksCapture(): Boolean { if (!capturing) return false LogManager.addLog("WARN", "stream", "microphone/camera owned by stream id=${mutable.value?.id}") 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 9dfb2065..a7e7dfea 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 @@ -944,7 +944,6 @@ class ChatViewModel : ViewModel() { val groupId = ch.id.toULongOrNull()?.toLong() ?: return val wasOnHere = radioChannelId == ch.id val next = !wasOnHere - if (next && com.utun.chat.data.StreamController.blocksCapture()) return radioToggleCount++ val caller = Throwable().stackTrace.drop(1).take(8) .joinToString(" <- ") { "${it.className.substringAfterLast('.')}.${it.methodName}:${it.lineNumber}" }