From f9b1a97a37edd04727dfc32ea77105b45f63d572 Mon Sep 17 00:00:00 2001 From: Rui Oliveira Date: Fri, 24 Jul 2026 15:30:32 +0100 Subject: [PATCH] Refactor "Disconnect" and "Track" logic --- .../core/data/framework/Ic705Controller.kt | 28 ++++++++++--------- .../data/framework/RadioTrackingService.kt | 5 ++-- .../feature/settings/SettingsDialog.kt | 14 ++++++---- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/Ic705Controller.kt b/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/Ic705Controller.kt index 860df4d5..4641e11f 100644 --- a/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/Ic705Controller.kt +++ b/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/Ic705Controller.kt @@ -84,19 +84,21 @@ class Ic705Controller( } } - override suspend fun disconnect() = withContext(Dispatchers.IO) { - try { - inputStream?.close() - outputStream?.close() - socket?.close() - } catch (e: Exception) { - Log.e(tag, "Disconnect error: ${e.message}") - } finally { - inputStream = null - outputStream = null - socket = null - isConnected = false - Log.i(tag, "Disconnected from $deviceAddress") + override suspend fun disconnect() { + withContext(Dispatchers.IO) { + try { + inputStream?.close() + outputStream?.close() + socket?.close() + } catch (e: Exception) { + Log.e(tag, "Disconnect error: ${e.message}") + } finally { + inputStream = null + outputStream = null + socket = null + isConnected = false + Log.i(tag, "Disconnected from $deviceAddress") + } } } diff --git a/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/RadioTrackingService.kt b/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/RadioTrackingService.kt index 37d05d47..42ae5a5e 100644 --- a/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/RadioTrackingService.kt +++ b/core/data/src/main/java/com/rtbishop/look4sat/core/data/framework/RadioTrackingService.kt @@ -31,6 +31,7 @@ import com.rtbishop.look4sat.core.domain.repository.RadioTrackingState import com.rtbishop.look4sat.core.domain.utility.TransponderMapper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job +import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -189,7 +190,7 @@ class RadioTrackingService( var lastReadFreq = 0L var stableCount = 0 - while (isActive) { + while (currentCoroutineContext().isActive) { val currentState = _state.value if (!currentState.isActive) break @@ -360,7 +361,7 @@ class RadioTrackingService( // After initial setup we never change VFO or band. // We only update the active-VFO frequency using CMD 0x25 sub 0x00. // The IC-705 automatically makes VFO-B active while PTT is pressed. - while (isActive) { + while (currentCoroutineContext().isActive) { val currentState = _state.value if (!currentState.isActive) break diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt index 385f7a84..1dab7436 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt @@ -473,12 +473,14 @@ fun RadioControlDialog( // If current baud rate is not in the new list, default to the first available if (baudRate.intValue !in baudRates) baudRate.intValue = baudRates.first() - val pairedDevices = remember { - try { - val manager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager - manager.adapter?.bondedDevices?.map { it.name ?: "Unknown" to it.address } ?: emptyList() - } catch (_: SecurityException) { - emptyList() + val pairedDevices: List> = remember { + buildList { + try { + val manager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager + manager.adapter?.bondedDevices?.forEach { + add(Pair(it.name ?: "Unknown", it.address ?: "")) + } + } catch (_: SecurityException) { } } }