diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSServiceData.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSServiceData.kt index 750fd306..11fcc397 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSServiceData.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSServiceData.kt @@ -40,6 +40,5 @@ internal data class HTSServiceData( val data: HTSData = HTSData(), val batteryLevel: Int? = null, val connectionState: GattConnectionStateWithStatus? = null, - val temperatureUnit: TemperatureUnit = TemperatureUnit.CELSIUS, - val deviceName: String? = null + val temperatureUnit: TemperatureUnit = TemperatureUnit.CELSIUS ) diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSRepository.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSRepository.kt index d3cf7635..4e4224fe 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSRepository.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSRepository.kt @@ -74,10 +74,6 @@ class HTSRepository @Inject constructor( serviceManager.startService(HTSService::class.java, device) } - fun onInitComplete(device: ServerDevice) { - _data.value = _data.value.copy(deviceName = device.name) - } - internal fun setTemperatureUnit(temperatureUnit: TemperatureUnit) { _data.value = _data.value.copy(temperatureUnit = temperatureUnit) } 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 107aef99..349620a2 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 @@ -33,6 +33,7 @@ package no.nordicsemi.android.hts.repository import android.annotation.SuppressLint import android.content.Intent +import android.util.Log import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.filterNotNull @@ -94,20 +95,20 @@ internal class HTSService : NotificationService() { client = device.connect(this@HTSService, logger = logger) + client.waitForBonding() + repository.loggerEvent .onEach { logger.launch() } .launchIn(lifecycleScope) client.connectionStateWithStatus + .onEach { Log.d("AAATESTAAA", "Connection state: $it") } .onEach { repository.onConnectionStateChanged(it) } .filterNotNull() .onEach { stopIfDisconnected(it) } - .onEach { unlockUiIfDisconnected(it, device) } .launchIn(lifecycleScope) if (!client.isConnected) { - hasBeenInitialized = true - repository.onInitComplete(device) return@launch } @@ -132,9 +133,6 @@ internal class HTSService : NotificationService() { .mapNotNull { HTSDataParser.parse(it) } .onEach { repository.onHTSDataChanged(it) } .launchIn(lifecycleScope) - - hasBeenInitialized = true - repository.onInitComplete(device) } private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) { @@ -143,12 +141,6 @@ internal class HTSService : NotificationService() { } } - private fun unlockUiIfDisconnected(connectionState: GattConnectionStateWithStatus, device: ServerDevice) { - if (connectionState.state == GattConnectionState.STATE_DISCONNECTED && !hasBeenInitialized) { - repository.onInitComplete(device) - } - } - private fun disconnect() { client.disconnect() } 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 9e921911..be224b0e 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 @@ -40,18 +40,14 @@ import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.common.ui.scanner.view.DeviceConnectingView import no.nordicsemi.android.common.ui.scanner.view.DeviceDisconnectedView import no.nordicsemi.android.common.ui.scanner.view.Reason import no.nordicsemi.android.hts.R -import no.nordicsemi.android.hts.data.HTSServiceData import no.nordicsemi.android.hts.viewmodel.HTSViewModel import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState -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 @@ -60,13 +56,14 @@ import no.nordicsemi.android.ui.view.ProfileAppBar fun HTSScreen() { val viewModel: HTSViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value + val deviceName = viewModel.deviceName.collectAsState().value val navigateUp = { viewModel.onEvent(NavigateUp) } Scaffold( topBar = { ProfileAppBar( - deviceName = state.deviceName, + deviceName = deviceName, connectionState = state.connectionState, title = R.string.hts_title, navigateUp = navigateUp, @@ -81,7 +78,7 @@ fun HTSScreen() { .verticalScroll(rememberScrollState()) .padding(16.dp) ) { - if (state.deviceName == null) { + if (deviceName == null) { DeviceConnectingView { NavigateUpButton(navigateUp) } } else when (state.connectionState?.state) { null, diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt index 8d28b961..fbc760f1 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt @@ -35,6 +35,8 @@ import android.os.ParcelUuid import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -65,6 +67,9 @@ internal class HTSViewModel @Inject constructor( val state = repository.data + private val _deviceName = MutableStateFlow(null) + val deviceName = _deviceName.asStateFlow() + init { viewModelScope.launch { if (repository.isRunning.firstOrNull() == false) { @@ -95,6 +100,7 @@ internal class HTSViewModel @Inject constructor( } private fun onDeviceSelected(device: ServerDevice) { + _deviceName.value = device.name repository.launch(device) }