From 8283d210cc72572b4d851f4317d1c9fcd6c33065 Mon Sep 17 00:00:00 2001 From: Sylwester Zielinski Date: Wed, 3 May 2023 16:11:25 +0200 Subject: [PATCH] Catch exceptions --- .../android/cgms/repository/CGMService.kt | 26 ++++++++++++++++--- .../android/csc/repository/CSCService.kt | 2 ++ .../android/hrs/service/HRSService.kt | 2 ++ .../android/hts/repository/HTSService.kt | 2 ++ .../android/prx/repository/PRXService.kt | 11 +++++--- .../android/rscs/repository/RSCSService.kt | 2 ++ .../android/uart/repository/UARTService.kt | 2 ++ 7 files changed, 41 insertions(+), 6 deletions(-) diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMService.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMService.kt index 901d6513..781a729e 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMService.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMService.kt @@ -47,6 +47,7 @@ import no.nordicsemi.android.cgms.data.CGMServiceCommand import no.nordicsemi.android.common.logger.NordicBlekLogger import no.nordicsemi.android.kotlin.ble.client.main.callback.BleGattClient import no.nordicsemi.android.kotlin.ble.client.main.connect +import no.nordicsemi.android.kotlin.ble.client.main.errors.GattOperationException import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattCharacteristic import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattServices import no.nordicsemi.android.kotlin.ble.core.ServerDevice @@ -173,6 +174,7 @@ internal class CGMService : NotificationService() { batteryLevelCharacteristic.getNotifications() .mapNotNull { BatteryLevelParser.parse(it) } .onEach { repository.onBatteryLevelChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) measurementCharacteristic.getNotifications() @@ -190,6 +192,7 @@ internal class CGMService : NotificationService() { repository.onDataReceived(result) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) opsControlPointCharacteristic.getNotifications() @@ -209,11 +212,13 @@ internal class CGMService : NotificationService() { } } } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) recordAccessControlPointCharacteristic.getNotifications() .mapNotNull { RecordAccessControlPointParser.parse(it) } .onEach { onAccessControlPointDataReceived(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) lifecycleScope.launchWithCatch { @@ -292,19 +297,34 @@ internal class CGMService : NotificationService() { private suspend fun requestLastRecord() { clear() repository.onNewRequestStatus(RequestStatus.PENDING) - recordAccessControlPointCharacteristic.write(RecordAccessControlPointInputParser.reportLastStoredRecord().value) + try { + recordAccessControlPointCharacteristic.write(RecordAccessControlPointInputParser.reportLastStoredRecord().value) + } catch (e: GattOperationException) { + e.printStackTrace() + repository.onNewRequestStatus(RequestStatus.FAILED) + } } private suspend fun requestFirstRecord() { clear() repository.onNewRequestStatus(RequestStatus.PENDING) - recordAccessControlPointCharacteristic.write(RecordAccessControlPointInputParser.reportFirstStoredRecord().value) + try { + recordAccessControlPointCharacteristic.write(RecordAccessControlPointInputParser.reportFirstStoredRecord().value) + } catch (e: GattOperationException) { + e.printStackTrace() + repository.onNewRequestStatus(RequestStatus.FAILED) + } } private suspend fun requestAllRecords() { clear() repository.onNewRequestStatus(RequestStatus.PENDING) - recordAccessControlPointCharacteristic.write(RecordAccessControlPointInputParser.reportNumberOfAllStoredRecords().value) + try { + recordAccessControlPointCharacteristic.write(RecordAccessControlPointInputParser.reportNumberOfAllStoredRecords().value) + } catch (e: GattOperationException) { + e.printStackTrace() + repository.onNewRequestStatus(RequestStatus.FAILED) + } } private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) { diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCService.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCService.kt index 7717a4c5..f50726ad 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCService.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCService.kt @@ -125,12 +125,14 @@ internal class CSCService : NotificationService() { batteryLevelCharacteristic.getNotifications() .mapNotNull { BatteryLevelParser.parse(it) } .onEach { repository.onBatteryLevelChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) val cscDataParser = CSCDataParser() cscMeasurementCharacteristic.getNotifications() .mapNotNull { cscDataParser.parse(it, repository.wheelSize.value) } .onEach { repository.onCSCDataChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) } diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSService.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSService.kt index 632ad906..acdecd09 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSService.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSService.kt @@ -133,11 +133,13 @@ internal class HRSService : NotificationService() { batteryLevelCharacteristic.getNotifications() .mapNotNull { BatteryLevelParser.parse(it) } .onEach { repository.onBatteryLevelChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) hrsMeasurementCharacteristic.getNotifications() .mapNotNull { HRSDataParser.parse(it) } .onEach { repository.onHRSDataChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) } diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSService.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSService.kt index 266e51da..0abb94f8 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSService.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSService.kt @@ -127,11 +127,13 @@ internal class HTSService : NotificationService() { batteryLevelCharacteristic.getNotifications() .mapNotNull { BatteryLevelParser.parse(it) } .onEach { repository.onBatteryLevelChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) htsMeasurementCharacteristic.getNotifications() .mapNotNull { HTSDataParser.parse(it) } .onEach { repository.onHTSDataChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) } 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 7c47810f..4753d277 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 @@ -44,6 +44,7 @@ import kotlinx.coroutines.launch import no.nordicsemi.android.common.logger.NordicBlekLogger import no.nordicsemi.android.kotlin.ble.client.main.callback.BleGattClient import no.nordicsemi.android.kotlin.ble.client.main.connect +import no.nordicsemi.android.kotlin.ble.client.main.errors.GattOperationException import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattCharacteristic import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattServices import no.nordicsemi.android.kotlin.ble.core.ServerDevice @@ -174,7 +175,6 @@ internal class PRXService : NotificationService() { client.connectionStateWithStatus .filterNotNull() .onEach { repository.onConnectionStateChanged(it) } - .filterNotNull() .onEach { stopIfDisconnected(it.state, it.status) } .launchIn(lifecycleScope) @@ -204,14 +204,19 @@ internal class PRXService : NotificationService() { batteryLevelCharacteristic.getNotifications() .mapNotNull { BatteryLevelParser.parse(it) } .onEach { repository.onBatteryLevelChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) linkLossCharacteristic.write(AlertLevelInputParser.parse(AlarmLevel.HIGH)) } private suspend fun writeAlertLevel(alarmLevel: AlarmLevel) { - alertLevelCharacteristic.write(AlertLevelInputParser.parse(alarmLevel), BleWriteType.NO_RESPONSE) - repository.onRemoteAlarmLevelSet(alarmLevel) + try { + alertLevelCharacteristic.write(AlertLevelInputParser.parse(alarmLevel), BleWriteType.NO_RESPONSE) + repository.onRemoteAlarmLevelSet(alarmLevel) + } catch (e: GattOperationException) { + e.printStackTrace() + } } private fun stopIfDisconnected(connectionState: GattConnectionState, connectionStatus: BleGattConnectionStatus) { diff --git a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/repository/RSCSService.kt b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/repository/RSCSService.kt index 0cb8c76a..c65e1058 100644 --- a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/repository/RSCSService.kt +++ b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/repository/RSCSService.kt @@ -125,11 +125,13 @@ internal class RSCSService : NotificationService() { batteryLevelCharacteristic.getNotifications() .mapNotNull { BatteryLevelParser.parse(it) } .onEach { repository.onBatteryLevelChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) rscsMeasurementCharacteristic.getNotifications() .mapNotNull { RSCSDataParser.parse(it) } .onEach { repository.onRSCSDataChanged(it) } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) } diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTService.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTService.kt index 9efd9614..0a0046ba 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTService.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTService.kt @@ -132,11 +132,13 @@ internal class UARTService : NotificationService() { batteryService?.findCharacteristic(BATTERY_LEVEL_CHARACTERISTIC_UUID)?.getNotifications() ?.mapNotNull { BatteryLevelParser.parse(it) } ?.onEach { repository.onBatteryLevelChanged(it) } + ?.catch { it.printStackTrace() } ?.launchIn(lifecycleScope) txCharacteristic.getNotifications() .onEach { repository.onNewMessageReceived(String(it)) } .onEach { logger.log(10, "Received: ${String(it)}") } + .catch { it.printStackTrace() } .launchIn(lifecycleScope) repository.command