From 5145266bdcf9ef702f5f25763c4762def1b46b91 Mon Sep 17 00:00:00 2001 From: Sylwester Zielinski Date: Fri, 28 Apr 2023 10:38:09 +0200 Subject: [PATCH] Apply fixes --- .../android/bps/viewmodel/BPSViewModel.kt | 2 ++ .../android/cgms/repository/CGMRepository.kt | 2 +- .../android/csc/repository/CSCRepository.kt | 22 ++++++++++++++++++- .../android/csc/repository/CSCService.kt | 8 +++++++ .../android/csc/viewmodel/CSCViewModel.kt | 7 ++++++ .../gls/main/viewmodel/GLSViewModel.kt | 6 +++-- .../android/hrs/service/HRSService.kt | 4 ++-- .../android/prx/repository/PRXService.kt | 9 +++++--- .../android/rscs/repository/RSCSService.kt | 4 ++-- .../android/uart/repository/UARTService.kt | 4 ++-- 10 files changed, 55 insertions(+), 13 deletions(-) diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt index 33ec55a6..debe10bb 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt @@ -123,6 +123,8 @@ internal class BPSViewModel @Inject constructor( client = device.connect(context, logger = logger) + client.waitForBonding() + client.connectionStateWithStatus .filterNotNull() .onEach { onDataUpdate(it) } diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMRepository.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMRepository.kt index 44a3e917..451c16fb 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMRepository.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/repository/CGMRepository.kt @@ -127,7 +127,7 @@ class CGMRepository @Inject constructor( _stopEvent.tryEmit(DisconnectAndStopEvent()) } - fun clean() { + private fun clean() { _data.value = CGMServiceData() } } diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCRepository.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCRepository.kt index 1aa79672..152b0eb9 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCRepository.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCRepository.kt @@ -72,6 +72,23 @@ class CSCRepository @Inject constructor( val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED } + private var isOnScreen = false + private var isServiceRunning = false + + fun setOnScreen(isOnScreen: Boolean) { + this.isOnScreen = isOnScreen + + if (shouldClean()) clean() + } + + fun setServiceRunning(serviceRunning: Boolean) { + this.isServiceRunning = serviceRunning + + if (shouldClean()) clean() + } + + private fun shouldClean() = !isOnScreen && !isServiceRunning + fun launch(device: ServerDevice) { _data.value = _data.value.copy(deviceName = device.name) serviceManager.startService(CSCService::class.java, device) @@ -102,7 +119,10 @@ class CSCRepository @Inject constructor( } fun disconnect() { - _data.value = CSCServiceData() _stopEvent.tryEmit(DisconnectAndStopEvent()) } + + private fun clean() { + _data.value = CSCServiceData() + } } 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 de72c23e..608e2c82 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 @@ -76,6 +76,8 @@ internal class CSCService : NotificationService() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) + repository.setServiceRunning(true) + val device = intent!!.getParcelableExtra(DEVICE_DATA)!! startGattClient(device) @@ -139,4 +141,10 @@ internal class CSCService : NotificationService() { private fun disconnect() { client.disconnect() } + + override fun onDestroy() { + super.onDestroy() + + repository.setServiceRunning(false) + } } diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt index 743647f4..dc447ac7 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt @@ -68,6 +68,8 @@ internal class CSCViewModel @Inject constructor( val state = repository.data init { + repository.setOnScreen(true) + viewModelScope.launch { if (repository.isRunning.firstOrNull() == false) { requestBluetoothDevice() @@ -118,4 +120,9 @@ internal class CSCViewModel @Inject constructor( repository.disconnect() navigationManager.navigateUp() } + + override fun onCleared() { + super.onCleared() + repository.setOnScreen(false) + } } diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/main/viewmodel/GLSViewModel.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/main/viewmodel/GLSViewModel.kt index 543364d1..3719852b 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/main/viewmodel/GLSViewModel.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/main/viewmodel/GLSViewModel.kt @@ -157,6 +157,8 @@ internal class GLSViewModel @Inject constructor( } private fun startGattClient(device: ServerDevice) = viewModelScope.launch { + _state.value = _state.value.copy(deviceName = device.name) + logger = NordicBlekLogger(context, stringConst.APP_NAME, "GLS", device.address) client = device.connect(context, logger = logger) @@ -175,7 +177,7 @@ internal class GLSViewModel @Inject constructor( client.discoverServices() .filterNotNull() - .onEach { configureGatt(it, device) } + .onEach { configureGatt(it) } .launchIn(viewModelScope) } @@ -185,7 +187,7 @@ internal class GLSViewModel @Inject constructor( } } - private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) { + private suspend fun configureGatt(services: BleGattServices) { val glsService = services.findService(GLS_SERVICE_UUID)!! glucoseMeasurementCharacteristic = glsService.findCharacteristic(GM_CHARACTERISTIC)!! recordAccessControlPointCharacteristic = glsService.findCharacteristic(RACP_CHARACTERISTIC)!! 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 71cccdc0..dac43536 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 @@ -114,11 +114,11 @@ internal class HRSService : NotificationService() { client.discoverServices() .filterNotNull() - .onEach { configureGatt(it, device) } + .onEach { configureGatt(it) } .launchIn(lifecycleScope) } - private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) { + private suspend fun configureGatt(services: BleGattServices) { val hrsService = services.findService(HRS_SERVICE_UUID)!! val hrsMeasurementCharacteristic = hrsService.findCharacteristic(HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID)!! val bodySensorLocationCharacteristic = hrsService.findCharacteristic(BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID)!! 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 062a447f..58c57bac 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 @@ -46,6 +46,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.connect 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 +import no.nordicsemi.android.kotlin.ble.core.data.BleGattConnectOptions import no.nordicsemi.android.kotlin.ble.core.data.BleGattConnectionStatus import no.nordicsemi.android.kotlin.ble.core.data.BleGattPermission import no.nordicsemi.android.kotlin.ble.core.data.BleGattProperty @@ -161,7 +162,9 @@ internal class PRXService : NotificationService() { private fun startGattClient(device: ServerDevice) = lifecycleScope.launch { val logger = NordicBlekLogger(this@PRXService, stringConst.APP_NAME, "PRX", device.address) - client = device.connect(this@PRXService, logger = logger) + client = device.connect(this@PRXService, logger = logger, options = BleGattConnectOptions(autoConnect = true)) + + client.waitForBonding() repository.loggerEvent .onEach { logger.launch() } @@ -180,7 +183,7 @@ internal class PRXService : NotificationService() { client.discoverServices() .filterNotNull() - .onEach { configureGatt(it, device) } + .onEach { configureGatt(it) } .launchIn(lifecycleScope) repository.remoteAlarmLevel @@ -188,7 +191,7 @@ internal class PRXService : NotificationService() { .launchIn(lifecycleScope) } - private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) { + private suspend fun configureGatt(services: BleGattServices) { val prxService = services.findService(PRX_SERVICE_UUID)!! alertLevelCharacteristic = prxService.findCharacteristic(ALERT_LEVEL_CHARACTERISTIC_UUID)!! val linkLossService = services.findService(LINK_LOSS_SERVICE_UUID)!! 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 17bae635..a8fd3054 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 @@ -110,11 +110,11 @@ internal class RSCSService : NotificationService() { client.discoverServices() .filterNotNull() - .onEach { configureGatt(it, device) } + .onEach { configureGatt(it) } .launchIn(lifecycleScope) } - private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) { + private suspend fun configureGatt(services: BleGattServices) { val rscsService = services.findService(RSCS_SERVICE_UUID)!! val rscsMeasurementCharacteristic = rscsService.findCharacteristic(RSC_MEASUREMENT_CHARACTERISTIC_UUID)!! val batteryService = services.findService(BATTERY_SERVICE_UUID)!! 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 32264bda..89ef3f86 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 @@ -116,11 +116,11 @@ internal class UARTService : NotificationService() { client.discoverServices() .filterNotNull() - .onEach { configureGatt(it, device, logger) } + .onEach { configureGatt(it, logger) } .launchIn(lifecycleScope) } - private suspend fun configureGatt(services: BleGattServices, device: ServerDevice, logger: NordicBlekLogger) { + private suspend fun configureGatt(services: BleGattServices, logger: NordicBlekLogger) { val uartService = services.findService(UART_SERVICE_UUID)!! val rxCharacteristic = uartService.findCharacteristic(UART_RX_CHARACTERISTIC_UUID)!! val txCharacteristic = uartService.findCharacteristic(UART_TX_CHARACTERISTIC_UUID)!!