diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt index 1218c4cf..0ea647a1 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt @@ -77,7 +77,9 @@ fun BPSScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.result.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.result.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, 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 a23f0075..c60640f8 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 @@ -130,6 +130,11 @@ internal class BPSViewModel @Inject constructor( .onEach { logAnalytics(it.state) } .launchIn(viewModelScope) + if (!client.isConnected) { + _state.value = _state.value.copy(deviceName = device.name) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(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 713a1bf5..76b70fc7 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 @@ -75,7 +75,6 @@ class CGMRepository @Inject constructor( val highestSequenceNumber = data.value.records.maxOfOrNull { it.sequenceNumber } ?: -1 fun launch(device: ServerDevice) { - _data.value = _data.value.copy(deviceName = device.name) serviceManager.startService(CGMService::class.java, device) } @@ -88,7 +87,6 @@ class CGMRepository @Inject constructor( } fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) { - Log.i("AAATESTAAA", "Connection state: $connectionState") _data.value = _data.value.copy(connectionState = connectionState) } @@ -104,6 +102,10 @@ class CGMRepository @Inject constructor( _loggerEvent.tryEmit(OpenLoggerEvent()) } + fun onInitComplete(device: ServerDevice) { + _data.value = _data.value.copy(deviceName = device.name) + } + fun clear() { _data.value = _data.value.copy(records = emptyList()) } 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 da8209fd..097b83ee 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 @@ -146,13 +146,18 @@ internal class CGMService : NotificationService() { .onEach { stopIfDisconnected(it) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() - .onEach { configureGatt(it) } + .onEach { configureGatt(it, device) } .launchIn(lifecycleScope) } - private suspend fun configureGatt(services: BleGattServices) { + private suspend fun configureGatt(services: BleGattServices, device: ServerDevice) { val cgmService = services.findService(CGMS_SERVICE_UUID)!! val statusCharacteristic = cgmService.findCharacteristic(CGM_STATUS_UUID)!! val featureCharacteristic = cgmService.findCharacteristic(CGM_FEATURE_UUID)!! @@ -223,6 +228,8 @@ internal class CGMService : NotificationService() { if (sessionStartTime == 0L) { opsControlPointCharacteristic.write(CGMSpecificOpsControlPointData.startSession(secured).value!!) } + + repository.onInitComplete(device) } private fun onAccessControlPointDataReceived(data: RecordAccessControlPointData) = lifecycleScope.launch { diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt index 8555c10c..f777463a 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt @@ -81,7 +81,9 @@ fun CGMScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } 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 af557a69..afbaa898 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 @@ -102,6 +102,11 @@ internal class CSCService : NotificationService() { .onEach { stopIfDisconnected(it) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device) } diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt index 47a8a668..9e745a5e 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt @@ -77,7 +77,9 @@ fun CSCScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSScreen.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSScreen.kt index 1aeece97..1405893b 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSScreen.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSScreen.kt @@ -77,7 +77,9 @@ fun GLSScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.glsServiceData.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.glsServiceData.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, 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 dfd1badc..22d73b3d 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 @@ -158,7 +158,7 @@ internal class GLSViewModel @Inject constructor( } private fun startGattClient(device: ServerDevice) = viewModelScope.launch { - logger = NordicBlekLogger(context, stringConst.APP_NAME, "BPS", device.address) + logger = NordicBlekLogger(context, stringConst.APP_NAME, "GLS", device.address) client = device.connect(context, logger = logger) @@ -168,6 +168,11 @@ internal class GLSViewModel @Inject constructor( .onEach { logAnalytics(it) } .launchIn(viewModelScope) + if (!client.isConnected) { + _state.value = _state.value.copy(deviceName = device.name) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device) } 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 d9600c3e..d2a90758 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 @@ -104,6 +104,11 @@ internal class HRSService : NotificationService() { .onEach { stopIfDisconnected(it) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device) } diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt index 36394e06..daffe174 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt @@ -77,7 +77,9 @@ fun HRSScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, 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 65c04460..a97d36da 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 @@ -102,6 +102,11 @@ internal class HTSService : NotificationService() { .onEach { stopIfDisconnected(it) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device) } diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt index 3d320130..ef657c7a 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt @@ -81,7 +81,9 @@ fun HTSScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, 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 3770db68..7d137bef 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 @@ -172,6 +172,11 @@ internal class PRXService : NotificationService() { .onEach { stopIfDisconnected(it.state, it.status) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device) } diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt index 23cc17f7..2aca046d 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt @@ -77,8 +77,9 @@ fun PRXScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - Log.i("AAATESTAAA", "State: ${state.connectionState?.state}") - when (state.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, 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 dbe7e2b9..3cad3f41 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 @@ -102,6 +102,11 @@ internal class RSCSService : NotificationService() { .onEach { stopIfDisconnected(it) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device) } diff --git a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt index dd4d4983..c9706b05 100644 --- a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt +++ b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt @@ -77,7 +77,9 @@ fun RSCSScreen() { .padding(16.dp) .verticalScroll(rememberScrollState()) ) { - when (state.connectionState?.state) { + if (state.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) } GattConnectionState.STATE_DISCONNECTED, 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 6e66c785..cd4947a0 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 @@ -97,8 +97,6 @@ internal class UARTService : NotificationService() { client = device.connect(this@UARTService, logger = logger) - Log.d("AAATESTAAA","connect finish") - client.requestMtu(Mtu.max) repository.loggerEvent @@ -111,6 +109,11 @@ internal class UARTService : NotificationService() { .onEach { stopIfDisconnected(it) } .launchIn(lifecycleScope) + if (!client.isConnected) { + repository.onInitComplete(device) + return@launch + } + client.discoverServices() .filterNotNull() .onEach { configureGatt(it, device, logger) } @@ -140,8 +143,6 @@ internal class UARTService : NotificationService() { .onEach { logger.log(10, "Sent: $it") } .launchIn(lifecycleScope) - - repository.onInitComplete(device) } diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt index aab035c0..6de05a50 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt @@ -35,8 +35,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable @@ -47,7 +45,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import com.google.accompanist.pager.ExperimentalPagerApi import no.nordicsemi.android.common.theme.view.PagerView import no.nordicsemi.android.common.theme.view.PagerViewEntity import no.nordicsemi.android.common.theme.view.PagerViewItem @@ -57,8 +54,6 @@ import no.nordicsemi.android.common.ui.scanner.view.Reason import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState import no.nordicsemi.android.uart.R import no.nordicsemi.android.uart.viewmodel.UARTViewModel -import no.nordicsemi.android.ui.view.BackIconAppBar -import no.nordicsemi.android.ui.view.LoggerIconAppBar import no.nordicsemi.android.ui.view.NavigateUpButton import no.nordicsemi.android.ui.view.ProfileAppBar @@ -85,7 +80,9 @@ fun UARTScreen() { Column( modifier = Modifier.padding(it) ) { - when (state.uartManagerState.connectionState?.state) { + if (state.uartManagerState.deviceName == null) { + DeviceConnectingView { NavigateUpButton(navigateUp) } + } else when (state.uartManagerState.connectionState?.state) { null, GattConnectionState.STATE_CONNECTING -> PaddingBox { DeviceConnectingView { NavigateUpButton(navigateUp) } } GattConnectionState.STATE_DISCONNECTED,