From 91662681027066779838ca123745e4305ff252c5 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 29 Oct 2026 01:55:27 +0100 Subject: [PATCH] Compile publisher service and controller in the lifecycle test harness --- .../call-service-tests/build.gradle.kts | 3 ++- .../com/utun/chat/data/StreamServiceHost.kt | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tools/chatgui-android/call-service-tests/src/main/kotlin/com/utun/chat/data/StreamServiceHost.kt diff --git a/tools/chatgui-android/call-service-tests/build.gradle.kts b/tools/chatgui-android/call-service-tests/build.gradle.kts index 79654d13..4edc2af7 100644 --- a/tools/chatgui-android/call-service-tests/build.gradle.kts +++ b/tools/chatgui-android/call-service-tests/build.gradle.kts @@ -9,7 +9,8 @@ kotlin { "com/utun/chat/data/RouterHostEnvironment.kt", "com/utun/chat/data/RadioHostEnvironment.kt", "com/utun/chat/data/CallServiceHost.kt", "com/utun/chat/data/CallService.kt", "com/utun/chat/data/CallController.kt", "com/utun/chat/data/CallState.kt", "com/utun/chat/data/CallAudioRouter.kt", "com/utun/chat/data/CoreActivity.kt", - "com/utun/chat/data/RadioAutoSettings.kt") + "com/utun/chat/data/RadioAutoSettings.kt", "com/utun/chat/data/StreamServiceHost.kt", + "com/utun/chat/data/StreamService.kt", "com/utun/chat/data/StreamController.kt", "com/utun/chat/data/StreamTxStats.kt") } } diff --git a/tools/chatgui-android/call-service-tests/src/main/kotlin/com/utun/chat/data/StreamServiceHost.kt b/tools/chatgui-android/call-service-tests/src/main/kotlin/com/utun/chat/data/StreamServiceHost.kt new file mode 100644 index 00000000..0c218d5d --- /dev/null +++ b/tools/chatgui-android/call-service-tests/src/main/kotlin/com/utun/chat/data/StreamServiceHost.kt @@ -0,0 +1,27 @@ +package com.utun.chat.data + +import android.content.Context + +/** Camera/DSP — управляемая граница, настоящие StreamController/StreamService компилируются из приложения. */ +data class StreamCaptureConfig(val value: Int = 1) +typealias RadioCompressorSettings = Any +class StreamPreview { var closed = false; fun close() { closed = true } } +class StreamCaptureEngine(context: Context, val id: Long, group: Long, val config: StreamCaptureConfig, microphone: Boolean, + preview: StreamPreview, initialAudioCompressor: RadioCompressorSettings, + private val ready: (StreamCaptureConfig, Boolean) -> Unit, failure: (String) -> Unit) { + companion object { var nextFailures = emptySet(); val created = mutableListOf() } + init { created.add(this) } + var failures = nextFailures + var started = false + var stopped = false + var stops = 0 + var audioCompressorSettings = initialAudioCompressor + fun start() { started = true; check("start" !in failures); ready(config, false) } + fun stop(): Boolean { + stops++; check("stop" !in failures) + if ("pending" in failures) return false + stopped = true; check("stop after" !in failures); return true + } + fun change(config: StreamCaptureConfig) { check("change" !in failures); ready(config, false) } + fun setAudioEnabled(enabled: Boolean): Boolean { check("audio" !in failures); return "audio reject" !in failures } +}