From ae4f524448e20bfc071ade293cfac042728b2939 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 29 Oct 2026 13:51:58 +0100 Subject: [PATCH] Observe confirmed Bluetooth preferences from the application owner --- .../app/src/main/java/com/utun/chat/ChatApplication.kt | 9 ++++++++- .../src/main/java/com/utun/chat/data/ConfigProvider.kt | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt index 538d1997..6d494607 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ChatApplication.kt @@ -111,7 +111,14 @@ class ChatApplication : Application() { /* One-time event callback registration — survives ViewModel recreation */ NativeLib.setEventCallback(AppEventHandler) - com.utun.chat.data.BleRadio.init() + try { com.utun.chat.data.BleRadio.init() } + catch (e: Exception) { LogManager.addLog("ERROR", "discovery", "BLE initialization failed: $e") } + applicationScope.launch { + configProvider.changes.observe("Bluetooth", configProvider.bluetoothSettings).collect { flags -> + try { com.utun.chat.data.BleRadio.applySettings(flags) } + catch (e: Exception) { LogManager.addLog("ERROR", "discovery", "BLE preference application failed flags=$flags: $e") } + } + } /* Incoming-call system effects (wake + ringtone + notification) — app-scoped */ IncomingCallManager.init() diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt index 7ce5879a..785cd2bd 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt @@ -45,7 +45,11 @@ class ConfigProvider(private val context: Context) { val changes = SettingsOperations() private val configFiles = ConfigFileStore { level, message -> LogManager.addLog(level, "CFG", message) } private val bleFlags = intPreferencesKey("bluetooth_flags") - fun getBleFlags(): Int = runBlocking { context.dataStore.data.first()[bleFlags] ?: 0 } + val bluetoothSettings: Flow = context.dataStore.data.map { preferences -> + val flags = preferences[bleFlags] ?: 0 + if (flags !in 0..7) LogManager.addLog("WARN", "discovery", "Invalid stored BLE flags=$flags; disabling Bluetooth") + flags.takeIf { it in 0..7 } ?: 0 + }.distinctUntilChanged() suspend fun setBleFlags(flags: Int) { require(flags in 0..7) context.dataStore.edit { it[bleFlags] = flags }