mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2026-01-09 09:44:22 +01:00
Fix state on HTS profile
This commit is contained in:
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<String?>(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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user