Wrap write operations in try-catch

This commit is contained in:
Sylwester Zieliński
2023-08-08 12:48:51 +02:00
parent 10f535ba13
commit a15fc7e5ec
4 changed files with 38 additions and 14 deletions

View File

@@ -0,0 +1,9 @@
package no.nordicsemi.android.utils
suspend fun tryOrLog(block: suspend () -> Unit) {
try {
block()
} catch (t: Throwable) {
t.printStackTrace()
}
}

View File

@@ -70,6 +70,7 @@ import no.nordicsemi.android.kotlin.ble.profile.racp.RACPResponseCode
import no.nordicsemi.android.service.DEVICE_DATA import no.nordicsemi.android.service.DEVICE_DATA
import no.nordicsemi.android.service.NotificationService import no.nordicsemi.android.service.NotificationService
import no.nordicsemi.android.utils.launchWithCatch import no.nordicsemi.android.utils.launchWithCatch
import no.nordicsemi.android.utils.tryOrLog
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@@ -224,9 +225,11 @@ internal class CGMService : NotificationService() {
} }
if (sessionStartTime == 0L) { if (sessionStartTime == 0L) {
tryOrLog {
opsControlPointCharacteristic.write(CGMSpecificOpsControlPointDataParser.startSession(secured)) opsControlPointCharacteristic.write(CGMSpecificOpsControlPointDataParser.startSession(secured))
} }
} }
}
private fun onAccessControlPointDataReceived(data: RecordAccessControlPointData) = lifecycleScope.launch { private fun onAccessControlPointDataReceived(data: RecordAccessControlPointData) = lifecycleScope.launch {
when (data) { when (data) {
@@ -260,15 +263,19 @@ internal class CGMService : NotificationService() {
private suspend fun onNumberOfRecordsReceived(numberOfRecords: Int) { private suspend fun onNumberOfRecordsReceived(numberOfRecords: Int) {
if (numberOfRecords > 0) { if (numberOfRecords > 0) {
if (repository.hasRecords) { if (repository.hasRecords) {
tryOrLog {
recordAccessControlPointCharacteristic.write( recordAccessControlPointCharacteristic.write(
RecordAccessControlPointInputParser.reportStoredRecordsGreaterThenOrEqualTo(repository.highestSequenceNumber) RecordAccessControlPointInputParser.reportStoredRecordsGreaterThenOrEqualTo(repository.highestSequenceNumber)
) )
}
} else { } else {
tryOrLog {
recordAccessControlPointCharacteristic.write( recordAccessControlPointCharacteristic.write(
RecordAccessControlPointInputParser.reportAllStoredRecords() RecordAccessControlPointInputParser.reportAllStoredRecords()
) )
} }
} }
}
repository.onNewRequestStatus(RequestStatus.SUCCESS) repository.onNewRequestStatus(RequestStatus.SUCCESS)
} }

View File

@@ -82,6 +82,7 @@ import no.nordicsemi.android.kotlin.ble.profile.racp.RACPResponseCode
import no.nordicsemi.android.toolbox.scanner.ScannerDestinationId import no.nordicsemi.android.toolbox.scanner.ScannerDestinationId
import no.nordicsemi.android.ui.view.NordicLoggerFactory import no.nordicsemi.android.ui.view.NordicLoggerFactory
import no.nordicsemi.android.ui.view.StringConst import no.nordicsemi.android.ui.view.StringConst
import no.nordicsemi.android.utils.tryOrLog
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@@ -268,14 +269,18 @@ internal class GLSViewModel @Inject constructor(
if (numberOfRecords > 0) { if (numberOfRecords > 0) {
try { try {
if (state.value.glsServiceData.records.isNotEmpty()) { if (state.value.glsServiceData.records.isNotEmpty()) {
tryOrLog {
recordAccessControlPointCharacteristic.write( recordAccessControlPointCharacteristic.write(
RecordAccessControlPointInputParser.reportStoredRecordsGreaterThenOrEqualTo(highestSequenceNumber) RecordAccessControlPointInputParser.reportStoredRecordsGreaterThenOrEqualTo(highestSequenceNumber)
) )
}
} else { } else {
tryOrLog {
recordAccessControlPointCharacteristic.write( recordAccessControlPointCharacteristic.write(
RecordAccessControlPointInputParser.reportAllStoredRecords() RecordAccessControlPointInputParser.reportAllStoredRecords()
) )
} }
}
} catch (e: GattOperationException) { } catch (e: GattOperationException) {
e.printStackTrace() e.printStackTrace()
} }

View File

@@ -62,6 +62,7 @@ import no.nordicsemi.android.kotlin.ble.server.main.service.ServerBleGattService
import no.nordicsemi.android.kotlin.ble.server.main.service.ServerBluetoothGattConnection import no.nordicsemi.android.kotlin.ble.server.main.service.ServerBluetoothGattConnection
import no.nordicsemi.android.service.DEVICE_DATA import no.nordicsemi.android.service.DEVICE_DATA
import no.nordicsemi.android.service.NotificationService import no.nordicsemi.android.service.NotificationService
import no.nordicsemi.android.utils.tryOrLog
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@@ -200,8 +201,10 @@ internal class PRXService : NotificationService() {
.catch { it.printStackTrace() } .catch { it.printStackTrace() }
.launchIn(lifecycleScope) .launchIn(lifecycleScope)
tryOrLog {
linkLossCharacteristic.write(AlertLevelInputParser.parse(AlarmLevel.HIGH)) linkLossCharacteristic.write(AlertLevelInputParser.parse(AlarmLevel.HIGH))
} }
}
private suspend fun writeAlertLevel(alarmLevel: AlarmLevel) { private suspend fun writeAlertLevel(alarmLevel: AlarmLevel) {
try { try {