From 4522fc71c8d8246b1aba9320b20c96344b975a79 Mon Sep 17 00:00:00 2001 From: Sylwester Zielinski Date: Thu, 23 Mar 2023 14:01:55 +0100 Subject: [PATCH] Add link loss alarm --- .../no/nordicsemi/android/prx/data/PRXServiceData.kt | 6 ++++-- .../no/nordicsemi/android/prx/repository/PRXService.kt | 4 ++-- .../java/no/nordicsemi/android/prx/view/PRXScreen.kt | 10 +++++++++- .../nordicsemi/android/prx/viewmodel/PRXViewModel.kt | 7 +++++-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXServiceData.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXServiceData.kt index 47893a30..e8f8529c 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXServiceData.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXServiceData.kt @@ -14,7 +14,9 @@ data class PRXServiceData( val deviceName: String? = null ) { - val isLinkLossDisconnected = connectionState?.let { - connectionStatus == BleGattConnectionStatus.LINK_LOSS + val isLinkLossDisconnected = connectionState?.let { connectionState -> + connectionStatus?.let { connectionStatus -> + connectionStatus != BleGattConnectionStatus.SUCCESS && connectionStatus != BleGattConnectionStatus.TERMINATE_PEER_USER + } ?: false } ?: false } diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXService.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXService.kt index 5991a39e..c044bc67 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXService.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/repository/PRXService.kt @@ -33,7 +33,6 @@ package no.nordicsemi.android.prx.repository import android.annotation.SuppressLint import android.content.Intent -import android.util.Log import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.filterNotNull @@ -42,6 +41,7 @@ import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import no.nordicsemi.android.kotlin.ble.core.ServerDevice +import no.nordicsemi.android.kotlin.ble.core.client.BleGattConnectOptions import no.nordicsemi.android.kotlin.ble.core.client.BleWriteType import no.nordicsemi.android.kotlin.ble.core.client.callback.BleGattClient import no.nordicsemi.android.kotlin.ble.core.client.service.BleGattCharacteristic @@ -154,7 +154,7 @@ internal class PRXService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = device.connect(this@PRXService) + client = device.connect(this@PRXService, BleGattConnectOptions(autoConnect = true)) client.connectionStateWithStatus .filterNotNull() diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt index 0a453206..e8716a52 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt @@ -78,7 +78,7 @@ fun PRXScreen() { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, - GattConnectionState.STATE_DISCONNECTING -> DeviceDisconnectedView(Reason.UNKNOWN) { NavigateUpButton(navigateUp) } + GattConnectionState.STATE_DISCONNECTING -> DeviceDisconnectedView(getReason(state.isLinkLossDisconnected)) { NavigateUpButton(navigateUp) } GattConnectionState.STATE_CONNECTED -> ContentView(state) { viewModel.onEvent(it) } } } @@ -86,6 +86,14 @@ fun PRXScreen() { } } +private fun getReason(isLinkLoss: Boolean): Reason { + return if (isLinkLoss) { + Reason.LINK_LOSS + } else { + Reason.UNKNOWN + } +} + @Composable private fun AppBar(state: PRXServiceData, navigateUp: () -> Unit, viewModel: PRXViewModel) { if (state.deviceName?.isNotBlank() == true) { diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt index 588202dc..b56e7849 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt @@ -32,7 +32,6 @@ package no.nordicsemi.android.prx.viewmodel import android.os.ParcelUuid -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel @@ -80,7 +79,6 @@ internal class PRXViewModel @Inject constructor( } repository.data.onEach { - Log.d("AAATESTAAA", "Data $it") if (it.isLinkLossDisconnected) { alarmHandler.playAlarm(it.linkLossAlarmLevel) } @@ -127,4 +125,9 @@ internal class PRXViewModel @Inject constructor( alarmHandler.pauseAlarm() navigationManager.navigateUp() } + + override fun onCleared() { + super.onCleared() + alarmHandler.pauseAlarm() + } }