mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-23 17:34:28 +01:00
Apply fixes
This commit is contained in:
@@ -123,6 +123,8 @@ internal class BPSViewModel @Inject constructor(
|
|||||||
|
|
||||||
client = device.connect(context, logger = logger)
|
client = device.connect(context, logger = logger)
|
||||||
|
|
||||||
|
client.waitForBonding()
|
||||||
|
|
||||||
client.connectionStateWithStatus
|
client.connectionStateWithStatus
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.onEach { onDataUpdate(it) }
|
.onEach { onDataUpdate(it) }
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ class CGMRepository @Inject constructor(
|
|||||||
_stopEvent.tryEmit(DisconnectAndStopEvent())
|
_stopEvent.tryEmit(DisconnectAndStopEvent())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clean() {
|
private fun clean() {
|
||||||
_data.value = CGMServiceData()
|
_data.value = CGMServiceData()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,23 @@ class CSCRepository @Inject constructor(
|
|||||||
|
|
||||||
val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED }
|
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) {
|
fun launch(device: ServerDevice) {
|
||||||
_data.value = _data.value.copy(deviceName = device.name)
|
_data.value = _data.value.copy(deviceName = device.name)
|
||||||
serviceManager.startService(CSCService::class.java, device)
|
serviceManager.startService(CSCService::class.java, device)
|
||||||
@@ -102,7 +119,10 @@ class CSCRepository @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun disconnect() {
|
fun disconnect() {
|
||||||
_data.value = CSCServiceData()
|
|
||||||
_stopEvent.tryEmit(DisconnectAndStopEvent())
|
_stopEvent.tryEmit(DisconnectAndStopEvent())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun clean() {
|
||||||
|
_data.value = CSCServiceData()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ internal class CSCService : NotificationService() {
|
|||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
super.onStartCommand(intent, flags, startId)
|
super.onStartCommand(intent, flags, startId)
|
||||||
|
|
||||||
|
repository.setServiceRunning(true)
|
||||||
|
|
||||||
val device = intent!!.getParcelableExtra<ServerDevice>(DEVICE_DATA)!!
|
val device = intent!!.getParcelableExtra<ServerDevice>(DEVICE_DATA)!!
|
||||||
|
|
||||||
startGattClient(device)
|
startGattClient(device)
|
||||||
@@ -139,4 +141,10 @@ internal class CSCService : NotificationService() {
|
|||||||
private fun disconnect() {
|
private fun disconnect() {
|
||||||
client.disconnect()
|
client.disconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
super.onDestroy()
|
||||||
|
|
||||||
|
repository.setServiceRunning(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ internal class CSCViewModel @Inject constructor(
|
|||||||
val state = repository.data
|
val state = repository.data
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
repository.setOnScreen(true)
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
if (repository.isRunning.firstOrNull() == false) {
|
if (repository.isRunning.firstOrNull() == false) {
|
||||||
requestBluetoothDevice()
|
requestBluetoothDevice()
|
||||||
@@ -118,4 +120,9 @@ internal class CSCViewModel @Inject constructor(
|
|||||||
repository.disconnect()
|
repository.disconnect()
|
||||||
navigationManager.navigateUp()
|
navigationManager.navigateUp()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCleared() {
|
||||||
|
super.onCleared()
|
||||||
|
repository.setOnScreen(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,6 +157,8 @@ internal class GLSViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun startGattClient(device: ServerDevice) = viewModelScope.launch {
|
private fun startGattClient(device: ServerDevice) = viewModelScope.launch {
|
||||||
|
_state.value = _state.value.copy(deviceName = device.name)
|
||||||
|
|
||||||
logger = NordicBlekLogger(context, stringConst.APP_NAME, "GLS", device.address)
|
logger = NordicBlekLogger(context, stringConst.APP_NAME, "GLS", device.address)
|
||||||
|
|
||||||
client = device.connect(context, logger = logger)
|
client = device.connect(context, logger = logger)
|
||||||
@@ -175,7 +177,7 @@ internal class GLSViewModel @Inject constructor(
|
|||||||
|
|
||||||
client.discoverServices()
|
client.discoverServices()
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.onEach { configureGatt(it, device) }
|
.onEach { configureGatt(it) }
|
||||||
.launchIn(viewModelScope)
|
.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)!!
|
val glsService = services.findService(GLS_SERVICE_UUID)!!
|
||||||
glucoseMeasurementCharacteristic = glsService.findCharacteristic(GM_CHARACTERISTIC)!!
|
glucoseMeasurementCharacteristic = glsService.findCharacteristic(GM_CHARACTERISTIC)!!
|
||||||
recordAccessControlPointCharacteristic = glsService.findCharacteristic(RACP_CHARACTERISTIC)!!
|
recordAccessControlPointCharacteristic = glsService.findCharacteristic(RACP_CHARACTERISTIC)!!
|
||||||
|
|||||||
@@ -114,11 +114,11 @@ internal class HRSService : NotificationService() {
|
|||||||
|
|
||||||
client.discoverServices()
|
client.discoverServices()
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.onEach { configureGatt(it, device) }
|
.onEach { configureGatt(it) }
|
||||||
.launchIn(lifecycleScope)
|
.launchIn(lifecycleScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) {
|
private suspend fun configureGatt(services: BleGattServices) {
|
||||||
val hrsService = services.findService(HRS_SERVICE_UUID)!!
|
val hrsService = services.findService(HRS_SERVICE_UUID)!!
|
||||||
val hrsMeasurementCharacteristic = hrsService.findCharacteristic(HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID)!!
|
val hrsMeasurementCharacteristic = hrsService.findCharacteristic(HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID)!!
|
||||||
val bodySensorLocationCharacteristic = hrsService.findCharacteristic(BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID)!!
|
val bodySensorLocationCharacteristic = hrsService.findCharacteristic(BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID)!!
|
||||||
|
|||||||
@@ -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.BleGattCharacteristic
|
||||||
import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattServices
|
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.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.BleGattConnectionStatus
|
||||||
import no.nordicsemi.android.kotlin.ble.core.data.BleGattPermission
|
import no.nordicsemi.android.kotlin.ble.core.data.BleGattPermission
|
||||||
import no.nordicsemi.android.kotlin.ble.core.data.BleGattProperty
|
import no.nordicsemi.android.kotlin.ble.core.data.BleGattProperty
|
||||||
@@ -161,7 +162,9 @@ internal class PRXService : NotificationService() {
|
|||||||
private fun startGattClient(device: ServerDevice) = lifecycleScope.launch {
|
private fun startGattClient(device: ServerDevice) = lifecycleScope.launch {
|
||||||
val logger = NordicBlekLogger(this@PRXService, stringConst.APP_NAME, "PRX", device.address)
|
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
|
repository.loggerEvent
|
||||||
.onEach { logger.launch() }
|
.onEach { logger.launch() }
|
||||||
@@ -180,7 +183,7 @@ internal class PRXService : NotificationService() {
|
|||||||
|
|
||||||
client.discoverServices()
|
client.discoverServices()
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.onEach { configureGatt(it, device) }
|
.onEach { configureGatt(it) }
|
||||||
.launchIn(lifecycleScope)
|
.launchIn(lifecycleScope)
|
||||||
|
|
||||||
repository.remoteAlarmLevel
|
repository.remoteAlarmLevel
|
||||||
@@ -188,7 +191,7 @@ internal class PRXService : NotificationService() {
|
|||||||
.launchIn(lifecycleScope)
|
.launchIn(lifecycleScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) {
|
private suspend fun configureGatt(services: BleGattServices) {
|
||||||
val prxService = services.findService(PRX_SERVICE_UUID)!!
|
val prxService = services.findService(PRX_SERVICE_UUID)!!
|
||||||
alertLevelCharacteristic = prxService.findCharacteristic(ALERT_LEVEL_CHARACTERISTIC_UUID)!!
|
alertLevelCharacteristic = prxService.findCharacteristic(ALERT_LEVEL_CHARACTERISTIC_UUID)!!
|
||||||
val linkLossService = services.findService(LINK_LOSS_SERVICE_UUID)!!
|
val linkLossService = services.findService(LINK_LOSS_SERVICE_UUID)!!
|
||||||
|
|||||||
@@ -110,11 +110,11 @@ internal class RSCSService : NotificationService() {
|
|||||||
|
|
||||||
client.discoverServices()
|
client.discoverServices()
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.onEach { configureGatt(it, device) }
|
.onEach { configureGatt(it) }
|
||||||
.launchIn(lifecycleScope)
|
.launchIn(lifecycleScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) {
|
private suspend fun configureGatt(services: BleGattServices) {
|
||||||
val rscsService = services.findService(RSCS_SERVICE_UUID)!!
|
val rscsService = services.findService(RSCS_SERVICE_UUID)!!
|
||||||
val rscsMeasurementCharacteristic = rscsService.findCharacteristic(RSC_MEASUREMENT_CHARACTERISTIC_UUID)!!
|
val rscsMeasurementCharacteristic = rscsService.findCharacteristic(RSC_MEASUREMENT_CHARACTERISTIC_UUID)!!
|
||||||
val batteryService = services.findService(BATTERY_SERVICE_UUID)!!
|
val batteryService = services.findService(BATTERY_SERVICE_UUID)!!
|
||||||
|
|||||||
@@ -116,11 +116,11 @@ internal class UARTService : NotificationService() {
|
|||||||
|
|
||||||
client.discoverServices()
|
client.discoverServices()
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.onEach { configureGatt(it, device, logger) }
|
.onEach { configureGatt(it, logger) }
|
||||||
.launchIn(lifecycleScope)
|
.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 uartService = services.findService(UART_SERVICE_UUID)!!
|
||||||
val rxCharacteristic = uartService.findCharacteristic(UART_RX_CHARACTERISTIC_UUID)!!
|
val rxCharacteristic = uartService.findCharacteristic(UART_RX_CHARACTERISTIC_UUID)!!
|
||||||
val txCharacteristic = uartService.findCharacteristic(UART_TX_CHARACTERISTIC_UUID)!!
|
val txCharacteristic = uartService.findCharacteristic(UART_TX_CHARACTERISTIC_UUID)!!
|
||||||
|
|||||||
Reference in New Issue
Block a user