mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-30 04:44:27 +01:00
Fix manager in progress indicator
This commit is contained in:
@@ -4,14 +4,21 @@ enum class BleManagerStatus {
|
||||
CONNECTING, OK, LINK_LOSS, DISCONNECTED, MISSING_SERVICE
|
||||
}
|
||||
|
||||
sealed class BleManagerResult <T>
|
||||
sealed class BleManagerResult <T> {
|
||||
|
||||
fun isRunning(): Boolean {
|
||||
return this is SuccessResult
|
||||
}
|
||||
|
||||
fun hasBeenDisconnected(): Boolean {
|
||||
return this is LinkLossResult || this is DisconnectedResult || this is MissingServiceResult
|
||||
}
|
||||
}
|
||||
|
||||
class ConnectingResult<T> : BleManagerResult<T>()
|
||||
class ReadyResult<T> : BleManagerResult<T>()
|
||||
|
||||
data class SuccessResult<T>(val data: T) : BleManagerResult<T>()
|
||||
|
||||
class LinkLossResult<T> : BleManagerResult<T>()
|
||||
class DisconnectedResult<T> : BleManagerResult<T>()
|
||||
class UnknownErrorResult<T> : BleManagerResult<T>()
|
||||
class MissingServiceResult<T> : BleManagerResult<T>()
|
||||
|
||||
|
||||
@@ -13,18 +13,20 @@ class ConnectionObserverAdapter<T> : ConnectionObserver {
|
||||
private val _status = MutableStateFlow<BleManagerResult<T>>(ConnectingResult())
|
||||
val status = _status.asStateFlow()
|
||||
|
||||
private var lastValue: T? = null
|
||||
|
||||
override fun onDeviceConnecting(device: BluetoothDevice) {
|
||||
Log.d(TAG, "onDeviceConnecting()")
|
||||
}
|
||||
|
||||
override fun onDeviceConnected(device: BluetoothDevice) {
|
||||
Log.d(TAG, "onDeviceConnected()")
|
||||
_status.value = ReadyResult()
|
||||
_status.value = SuccessResult(lastValue!!)
|
||||
}
|
||||
|
||||
override fun onDeviceFailedToConnect(device: BluetoothDevice, reason: Int) {
|
||||
Log.d(TAG, "onDeviceFailedToConnect()")
|
||||
_status.value = DisconnectedResult()
|
||||
Log.d(TAG, "onDeviceFailedToConnect(), reason: $reason")
|
||||
_status.value = MissingServiceResult()
|
||||
}
|
||||
|
||||
override fun onDeviceReady(device: BluetoothDevice) {
|
||||
@@ -36,15 +38,19 @@ class ConnectionObserverAdapter<T> : ConnectionObserver {
|
||||
}
|
||||
|
||||
override fun onDeviceDisconnected(device: BluetoothDevice, reason: Int) {
|
||||
Log.d(TAG, "onDeviceDisconnected()")
|
||||
Log.d(TAG, "onDeviceDisconnected(), reason: $reason")
|
||||
_status.value = when (reason) {
|
||||
ConnectionObserver.REASON_NOT_SUPPORTED -> MissingServiceResult()
|
||||
ConnectionObserver.REASON_LINK_LOSS -> LinkLossResult()
|
||||
else -> DisconnectedResult()
|
||||
ConnectionObserver.REASON_SUCCESS -> DisconnectedResult()
|
||||
else -> UnknownErrorResult()
|
||||
}
|
||||
}
|
||||
|
||||
fun setValue(value: T) {
|
||||
_status.value = SuccessResult(value)
|
||||
lastValue = value
|
||||
if (_status.value.isRunning()) {
|
||||
_status.value = SuccessResult(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user