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 dd1a35b3..23a4fdee 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 @@ -92,7 +92,7 @@ internal class CGMService : NotificationService() { @Inject lateinit var repository: CGMRepository - private lateinit var client: ClientBleGatt + private var client: ClientBleGatt? = null private var secured = false @@ -127,12 +127,13 @@ internal class CGMService : NotificationService() { CGMServiceCommand.REQUEST_ALL_RECORDS -> requestAllRecords() CGMServiceCommand.REQUEST_LAST_RECORD -> requestLastRecord() CGMServiceCommand.REQUEST_FIRST_RECORD -> requestFirstRecord() - CGMServiceCommand.DISCONNECT -> client.disconnect() + CGMServiceCommand.DISCONNECT -> disconnect() } } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect(this@CGMService, device, logger = { p, s -> repository.log(p, s) }) + val client = ClientBleGatt.connect(this@CGMService, device, logger = { p, s -> repository.log(p, s) }) + this@CGMService.client = client client.connectionStateWithStatus .onEach { repository.onConnectionStateChanged(it) } @@ -331,7 +332,7 @@ internal class CGMService : NotificationService() { } private fun disconnect() { - client.disconnect() + client?.disconnect() } override fun onDestroy() { 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 aa750bf5..8c84d311 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 @@ -66,7 +66,7 @@ internal class CSCService : NotificationService() { @Inject lateinit var repository: CSCRepository - private lateinit var client: ClientBleGatt + private var client: ClientBleGatt? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) @@ -85,7 +85,8 @@ internal class CSCService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect(this@CSCService, device, logger = { p, s -> repository.log(p, s) }) + val client = ClientBleGatt.connect(this@CSCService, device, logger = { p, s -> repository.log(p, s) }) + this@CSCService.client = client client.connectionStateWithStatus .onEach { repository.onConnectionStateChanged(it) } @@ -132,7 +133,7 @@ internal class CSCService : NotificationService() { } private fun disconnect() { - client.disconnect() + client?.disconnect() } override fun onDestroy() { 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 af1ea88c..679f74a9 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 @@ -68,7 +68,7 @@ internal class HRSService : NotificationService() { @Inject lateinit var repository: HRSRepository - private lateinit var client: ClientBleGatt + private var client: ClientBleGatt? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) @@ -87,7 +87,8 @@ internal class HRSService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect(this@HRSService, device, logger = { p, s -> repository.log(p, s) }) + val client = ClientBleGatt.connect(this@HRSService, device, logger = { p, s -> repository.log(p, s) }) + this@HRSService.client = client client.waitForBonding() @@ -139,7 +140,7 @@ internal class HRSService : NotificationService() { } private fun disconnect() { - client.disconnect() + client?.disconnect() } override fun onDestroy() { 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 921e736c..c02147d2 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 @@ -66,7 +66,7 @@ internal class HTSService : NotificationService() { @Inject lateinit var repository: HTSRepository - private lateinit var client: ClientBleGatt + private var client: ClientBleGatt? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) @@ -85,7 +85,8 @@ internal class HTSService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect(this@HTSService, device, logger = { p, s -> repository.log(p, s) }) + val client = ClientBleGatt.connect(this@HTSService, device, logger = { p, s -> repository.log(p, s) }) + this@HTSService.client = client client.connectionStateWithStatus .onEach { repository.onConnectionStateChanged(it) } @@ -131,7 +132,7 @@ internal class HTSService : NotificationService() { } private fun disconnect() { - client.disconnect() + client?.disconnect() } override fun onDestroy() { 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 c30956c3..944d4ad2 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 @@ -81,8 +81,8 @@ internal class PRXService : NotificationService() { @Inject lateinit var repository: PRXRepository - private lateinit var client: ClientBleGatt - private lateinit var server: ServerBleGatt + private var client: ClientBleGatt? = null + private var server: ServerBleGatt? = null private var alertLevelCharacteristic: ClientBleGattCharacteristic? = null @@ -127,7 +127,8 @@ internal class PRXService : NotificationService() { characteristicConfigs = listOf(linkLossCharacteristic) ) - server = ServerBleGatt.create(this@PRXService, prxServiceConfig, linkLossServiceConfig) + val server = ServerBleGatt.create(this@PRXService, prxServiceConfig, linkLossServiceConfig) + this@PRXService.server = server //Order is important. We don't want to connect before services have been added to the server. startGattClient(device) @@ -156,12 +157,13 @@ internal class PRXService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect( + val client = ClientBleGatt.connect( this@PRXService, device, logger = { p, s -> repository.log(p, s) }, options = BleGattConnectOptions(autoConnect = true) ) + this@PRXService.client = client client.waitForBonding() @@ -219,15 +221,15 @@ internal class PRXService : NotificationService() { private fun stopIfDisconnected(connectionState: GattConnectionState, connectionStatus: BleGattConnectionStatus) { if (connectionState == GattConnectionState.STATE_DISCONNECTED && !connectionStatus.isLinkLoss) { - server.stopServer() + server?.stopServer() repository.disconnect() stopSelf() } } private fun disconnect() { - client.disconnect() - server.stopServer() + client?.disconnect() + server?.stopServer() } override fun onDestroy() { 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 7384411f..ebb54cea 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 @@ -66,7 +66,7 @@ internal class RSCSService : NotificationService() { @Inject lateinit var repository: RSCSRepository - private lateinit var client: ClientBleGatt + private var client: ClientBleGatt? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) @@ -85,7 +85,8 @@ internal class RSCSService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect(this@RSCSService, device, logger = { p, s -> repository.log(p, s) }) + val client = ClientBleGatt.connect(this@RSCSService, device, logger = { p, s -> repository.log(p, s) }) + this@RSCSService.client = client client.connectionStateWithStatus .onEach { repository.onConnectionStateChanged(it) } @@ -131,7 +132,7 @@ internal class RSCSService : NotificationService() { } private fun disconnect() { - client.disconnect() + client?.disconnect() } override fun onDestroy() { 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 d1496fee..3992af8e 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 @@ -71,7 +71,7 @@ internal class UARTService : NotificationService() { @Inject lateinit var repository: UARTRepository - private lateinit var client: ClientBleGatt + private var client: ClientBleGatt? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) @@ -90,7 +90,8 @@ internal class UARTService : NotificationService() { } private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { - client = ClientBleGatt.connect(this@UARTService, device, logger = { p, s -> repository.log(p, s) }) + val client = ClientBleGatt.connect(this@UARTService, device, logger = { p, s -> repository.log(p, s) }) + this@UARTService.client = client if (!client.isConnected) { return@launch @@ -155,7 +156,7 @@ internal class UARTService : NotificationService() { } private fun disconnect() { - client.disconnect() + client?.disconnect() } override fun onDestroy() {