Fix manager in progress indicator

This commit is contained in:
Sylwester Zieliński
2022-02-15 09:46:45 +01:00
parent a6f0f58448
commit 1ae259fc65
44 changed files with 195 additions and 224 deletions

View File

@@ -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>()

View File

@@ -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)
}
}
}