Fix toolbar title

This commit is contained in:
Sylwester Zielinski
2023-04-18 12:52:18 +02:00
parent 06ea417cb7
commit d0aeefb010
39 changed files with 203 additions and 212 deletions

View File

@@ -46,4 +46,5 @@ dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.activity.compose)
implementation("no.nordicsemi.android.kotlin.ble:client:0.0.1")
}

View File

@@ -31,6 +31,7 @@
package no.nordicsemi.android.ui.view
import androidx.annotation.StringRes
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
@@ -43,6 +44,8 @@ import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.ui.R
@OptIn(ExperimentalMaterial3Api::class)
@@ -168,3 +171,24 @@ fun LoggerIconAppBar(text: String, onClick: () -> Unit, onDisconnectClick: () ->
}
)
}
@Composable
fun ProfileAppBar(
deviceName: String?,
connectionState: GattConnectionStateWithStatus?,
@StringRes
title: Int,
navigateUp: () -> Unit,
disconnect: () -> Unit,
openLogger: () -> Unit
) {
if (deviceName?.isNotBlank() == true) {
if (connectionState?.state == GattConnectionState.STATE_DISCONNECTING || connectionState?.state == GattConnectionState.STATE_DISCONNECTED) {
LoggerBackIconAppBar(deviceName, openLogger)
} else {
LoggerIconAppBar(deviceName, navigateUp, disconnect, openLogger)
}
} else {
BackIconAppBar(stringResource(id = title), navigateUp)
}
}

View File

@@ -1,6 +1,6 @@
package no.nordicsemi.android.bps.data
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.bps.data.BloodPressureMeasurementData
import no.nordicsemi.android.kotlin.ble.profile.bps.data.IntermediateCuffPressureData
@@ -8,5 +8,5 @@ data class BPSServiceData (
val bloodPressureMeasurement: BloodPressureMeasurementData? = null,
val intermediateCuffPressure: IntermediateCuffPressureData? = null,
val batteryLevel: Int? = null,
val connectionState: GattConnectionState? = null
val connectionState: GattConnectionStateWithStatus? = null
)

View File

@@ -40,7 +40,6 @@ 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.bps.R
@@ -49,9 +48,8 @@ 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.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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -62,7 +60,16 @@ fun BPSScreen() {
val navigateUp = { viewModel.onEvent(DisconnectEvent) }
Scaffold(
topBar = { AppBar(state = state, navigateUp = navigateUp, viewModel = viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.result.connectionState,
title = R.string.bps_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -70,7 +77,7 @@ fun BPSScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
when (state.result.connectionState) {
when (state.result.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
@@ -82,16 +89,3 @@ fun BPSScreen() {
}
}
}
@Composable
private fun AppBar(state: BPSViewState, navigateUp: () -> Unit, viewModel: BPSViewModel) {
if (state.deviceName == null) {
BackIconAppBar(stringResource(id = R.string.bps_title), navigateUp)
} else {
LoggerIconAppBar(state.deviceName, {
viewModel.onEvent(DisconnectEvent)
}, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
}
}

View File

@@ -60,6 +60,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.connect
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.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.bps.BloodPressureMeasurementParser
import no.nordicsemi.android.kotlin.ble.profile.bps.IntermediateCuffPressureParser
@@ -122,11 +123,11 @@ internal class BPSViewModel @Inject constructor(
client = device.connect(context, logger = logger)
client.connectionState
client.connectionStateWithStatus
.filterNotNull()
.onEach { onDataUpdate(it) }
.onEach { stopIfDisconnected(it) }
.onEach { logAnalytics(it) }
.onEach { stopIfDisconnected(it.state) }
.onEach { logAnalytics(it.state) }
.launchIn(viewModelScope)
client.services
@@ -158,7 +159,7 @@ internal class BPSViewModel @Inject constructor(
?.launchIn(viewModelScope)
}
private fun onDataUpdate(connectionState: GattConnectionState) {
private fun onDataUpdate(connectionState: GattConnectionStateWithStatus) {
val newResult = _state.value.result.copy(connectionState = connectionState)
_state.value = _state.value.copy(result = newResult)
}

View File

@@ -32,6 +32,7 @@
package no.nordicsemi.android.cgms.repository
import android.content.Context
import android.util.Log
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asSharedFlow
@@ -87,6 +88,7 @@ class CGMRepository @Inject constructor(
}
fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) {
Log.i("AAATESTAAA", "Connection state: $connectionState")
_data.value = _data.value.copy(connectionState = connectionState)
}

View File

@@ -48,12 +48,12 @@ import no.nordicsemi.android.cgms.data.CGMServiceData
import no.nordicsemi.android.cgms.viewmodel.CGMViewModel
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.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.ui.view.BackIconAppBar
import no.nordicsemi.android.ui.view.LoggerBackIconAppBar
import no.nordicsemi.android.ui.view.LoggerIconAppBar
import no.nordicsemi.android.ui.view.NavigateUpButton
import no.nordicsemi.android.ui.view.ProfileAppBar
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -64,7 +64,16 @@ fun CGMScreen() {
val navigateUp = { viewModel.onEvent(NavigateUp) }
Scaffold(
topBar = { AppBar(state = state, navigateUp = navigateUp, viewModel = viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.connectionState,
title = R.string.cgms_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -75,27 +84,14 @@ fun CGMScreen() {
when (state.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
GattConnectionState.STATE_DISCONNECTING -> DeviceDisconnectedView(state.connectionState.status) {
NavigateUpButton(navigateUp)
}
GattConnectionState.STATE_CONNECTED -> CGMContentView(state) { viewModel.onEvent(it) }
}
}
}
}
@Composable
private fun AppBar(state: CGMServiceData, navigateUp: () -> Unit, viewModel: CGMViewModel) {
if (state.deviceName?.isNotBlank() == true) {
if (state.connectionState?.state == GattConnectionState.STATE_DISCONNECTING || state.connectionState?.state == GattConnectionState.STATE_DISCONNECTED) {
LoggerBackIconAppBar(state.deviceName) { viewModel.onEvent(OpenLoggerEvent) }
} else {
LoggerIconAppBar(state.deviceName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
}
} else {
BackIconAppBar(stringResource(id = R.string.cgms_title), navigateUp)
}
}

View File

@@ -1,12 +1,12 @@
package no.nordicsemi.android.csc.data
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.csc.data.CSCData
internal data class CSCServiceData(
val data: CSCData = CSCData(),
val batteryLevel: Int? = null,
val connectionState: GattConnectionState? = null,
val connectionState: GattConnectionStateWithStatus? = null,
val speedUnit: SpeedUnit = SpeedUnit.M_S,
val deviceName: String? = null
)

View File

@@ -43,6 +43,7 @@ import no.nordicsemi.android.csc.data.CSCServiceData
import no.nordicsemi.android.csc.data.SpeedUnit
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.csc.data.CSCData
import no.nordicsemi.android.kotlin.ble.profile.csc.data.WheelSize
import no.nordicsemi.android.kotlin.ble.profile.csc.data.WheelSizes
@@ -70,7 +71,7 @@ class CSCRepository @Inject constructor(
private val _loggerEvent = simpleSharedFlow<OpenLoggerEvent>()
internal val loggerEvent = _loggerEvent.asSharedFlow()
val isRunning = data.map { it.connectionState == GattConnectionState.STATE_CONNECTED }
val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED }
fun launch(device: ServerDevice) {
serviceManager.startService(CSCService::class.java, device)
@@ -88,7 +89,7 @@ class CSCRepository @Inject constructor(
_wheelSize.value = wheelSize
}
fun onConnectionStateChanged(connectionState: GattConnectionState?) {
fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) {
_data.value = _data.value.copy(connectionState = connectionState)
}

View File

@@ -46,6 +46,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.connect
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.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.csc.CSCDataParser
import no.nordicsemi.android.service.DEVICE_DATA
@@ -95,7 +96,7 @@ internal class CSCService : NotificationService() {
.onEach { logger.launch() }
.launchIn(lifecycleScope)
client.connectionState
client.connectionStateWithStatus
.onEach { repository.onConnectionStateChanged(it) }
.filterNotNull()
.onEach { stopIfDisconnected(it) }
@@ -127,8 +128,8 @@ internal class CSCService : NotificationService() {
repository.onInitComplete(device)
}
private fun stopIfDisconnected(connectionState: GattConnectionState) {
if (connectionState == GattConnectionState.STATE_DISCONNECTED) {
private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) {
if (connectionState.state == GattConnectionState.STATE_DISCONNECTED) {
stopSelf()
}
}

View File

@@ -40,19 +40,16 @@ 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.csc.R
import no.nordicsemi.android.csc.data.CSCServiceData
import no.nordicsemi.android.csc.viewmodel.CSCViewModel
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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -63,7 +60,16 @@ fun CSCScreen() {
val navigateUp = { viewModel.onEvent(NavigateUp) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.connectionState,
title = R.string.csc_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(OnDisconnectButtonClick) },
openLogger = { viewModel.onEvent(OpenLogger) }
)
}
) {
Column(
modifier = Modifier
@@ -71,7 +77,7 @@ fun CSCScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
when (state.connectionState) {
when (state.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
@@ -83,14 +89,3 @@ fun CSCScreen() {
}
}
}
@Composable
private fun AppBar(state: CSCServiceData, navigateUp: () -> Unit, viewModel: CSCViewModel) {
if (state.deviceName?.isNotBlank() == true) {
LoggerIconAppBar(state.deviceName, navigateUp, { viewModel.onEvent(OnDisconnectButtonClick) }) {
viewModel.onEvent(OpenLogger)
}
} else {
BackIconAppBar(stringResource(id = R.string.csc_title), navigateUp)
}
}

View File

@@ -75,7 +75,7 @@ internal class CSCViewModel @Inject constructor(
}
repository.data.onEach {
if (it.connectionState == GattConnectionState.STATE_CONNECTED) {
if (it.connectionState?.state == GattConnectionState.STATE_CONNECTED) {
analytics.logEvent(ProfileConnectedEvent(Profile.CSC))
}
}.launchIn(viewModelScope)

View File

@@ -32,6 +32,7 @@
package no.nordicsemi.android.gls.data
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.gls.data.GLSRecord
import no.nordicsemi.android.kotlin.ble.profile.gls.data.GLSMeasurementContext
import no.nordicsemi.android.kotlin.ble.profile.gls.data.RequestStatus
@@ -39,6 +40,6 @@ import no.nordicsemi.android.kotlin.ble.profile.gls.data.RequestStatus
internal data class GLSServiceData(
val records: Map<GLSRecord, GLSMeasurementContext?> = mapOf(),
val batteryLevel: Int? = null,
val connectionState: GattConnectionState? = null,
val connectionState: GattConnectionStateWithStatus? = null,
val requestStatus: RequestStatus = RequestStatus.IDLE
)

View File

@@ -40,7 +40,6 @@ 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
@@ -49,9 +48,8 @@ import no.nordicsemi.android.common.ui.scanner.view.Reason
import no.nordicsemi.android.gls.R
import no.nordicsemi.android.gls.main.viewmodel.GLSViewModel
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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -62,7 +60,16 @@ fun GLSScreen() {
val navigateUp = { viewModel.onEvent(DisconnectEvent) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.glsServiceData.connectionState,
title = R.string.gls_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -70,7 +77,7 @@ fun GLSScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
when (state.glsServiceData.connectionState) {
when (state.glsServiceData.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
@@ -82,16 +89,3 @@ fun GLSScreen() {
}
}
}
@Composable
private fun AppBar(state: GLSViewState, navigateUp: () -> Unit, viewModel: GLSViewModel) {
if (state.deviceName == null) {
BackIconAppBar(stringResource(id = R.string.gls_title), navigateUp)
} else {
LoggerIconAppBar(state.deviceName, {
viewModel.onEvent(DisconnectEvent)
}, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
}
}

View File

@@ -33,6 +33,7 @@ package no.nordicsemi.android.gls.main.view
import no.nordicsemi.android.gls.data.GLSServiceData
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.gls.data.GLSMeasurementContext
import no.nordicsemi.android.kotlin.ble.profile.gls.data.GLSRecord
import no.nordicsemi.android.kotlin.ble.profile.gls.data.RequestStatus
@@ -42,7 +43,7 @@ internal data class GLSViewState(
val deviceName: String? = null
) {
fun copyWithNewConnectionState(connectionState: GattConnectionState): GLSViewState {
fun copyWithNewConnectionState(connectionState: GattConnectionStateWithStatus): GLSViewState {
return copy(glsServiceData = glsServiceData.copy(connectionState = connectionState))
}

View File

@@ -66,6 +66,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattCharacteristi
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.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.gls.GlucoseMeasurementContextParser
import no.nordicsemi.android.kotlin.ble.profile.gls.GlucoseMeasurementParser
@@ -161,7 +162,7 @@ internal class GLSViewModel @Inject constructor(
client = device.connect(context, logger = logger)
client.connectionState
client.connectionStateWithStatus
.filterNotNull()
.onEach { _state.value = _state.value.copyWithNewConnectionState(it) }
.onEach { logAnalytics(it) }
@@ -173,8 +174,8 @@ internal class GLSViewModel @Inject constructor(
.launchIn(viewModelScope)
}
private fun logAnalytics(connectionState: GattConnectionState) {
if (connectionState == GattConnectionState.STATE_CONNECTED) {
private fun logAnalytics(connectionState: GattConnectionStateWithStatus) {
if (connectionState.state == GattConnectionState.STATE_CONNECTED) {
analytics.logEvent(ProfileConnectedEvent(Profile.GLS))
}
}

View File

@@ -32,13 +32,14 @@
package no.nordicsemi.android.hrs.data
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.hrs.data.HRSData
internal data class HRSServiceData(
val data: List<HRSData> = emptyList(),
val bodySensorLocation: Int? = null,
val batteryLevel: Int? = null,
val connectionState: GattConnectionState? = null,
val connectionState: GattConnectionStateWithStatus? = null,
val zoomIn: Boolean = false,
val deviceName: String? = null
) {

View File

@@ -42,6 +42,7 @@ import no.nordicsemi.android.common.logger.NordicBlekLogger
import no.nordicsemi.android.hrs.data.HRSServiceData
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.hrs.data.HRSData
import no.nordicsemi.android.service.DisconnectAndStopEvent
import no.nordicsemi.android.service.OpenLoggerEvent
@@ -66,7 +67,7 @@ class HRSRepository @Inject constructor(
private val _loggerEvent = simpleSharedFlow<OpenLoggerEvent>()
internal val loggerEvent = _loggerEvent.asSharedFlow()
val isRunning = data.map { it.connectionState == GattConnectionState.STATE_CONNECTED }
val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED }
fun launch(device: ServerDevice) {
serviceManager.startService(HRSService::class.java, device)
@@ -80,7 +81,7 @@ class HRSRepository @Inject constructor(
_data.value = _data.value.copy(zoomIn = !_data.value.zoomIn)
}
fun onConnectionStateChanged(connectionState: GattConnectionState?) {
fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) {
_data.value = _data.value.copy(connectionState = connectionState)
}

View File

@@ -46,6 +46,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.connect
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.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.hrs.BodySensorLocationParser
import no.nordicsemi.android.kotlin.ble.profile.hrs.HRSDataParser
@@ -97,7 +98,7 @@ internal class HRSService : NotificationService() {
.onEach { logger.launch() }
.launchIn(lifecycleScope)
client.connectionState
client.connectionStateWithStatus
.onEach { repository.onConnectionStateChanged(it) }
.filterNotNull()
.onEach { stopIfDisconnected(it) }
@@ -132,8 +133,8 @@ internal class HRSService : NotificationService() {
repository.onInitComplete(device)
}
private fun stopIfDisconnected(connectionState: GattConnectionState) {
if (connectionState == GattConnectionState.STATE_DISCONNECTED) {
private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) {
if (connectionState.state == GattConnectionState.STATE_DISCONNECTED) {
stopSelf()
}
}

View File

@@ -40,19 +40,16 @@ 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.hrs.R
import no.nordicsemi.android.hrs.data.HRSServiceData
import no.nordicsemi.android.hrs.viewmodel.HRSViewModel
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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -63,7 +60,16 @@ fun HRSScreen() {
val navigateUp = { viewModel.onEvent(NavigateUpEvent) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.connectionState,
title = R.string.hrs_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -71,7 +77,7 @@ fun HRSScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
when (state.connectionState) {
when (state.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
@@ -83,14 +89,3 @@ fun HRSScreen() {
}
}
}
@Composable
private fun AppBar(state: HRSServiceData, navigateUp: () -> Unit, viewModel: HRSViewModel) {
if (state.deviceName?.isNotBlank() == true) {
LoggerIconAppBar(state.deviceName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
} else {
BackIconAppBar(stringResource(id = R.string.hrs_title), navigateUp)
}
}

View File

@@ -73,7 +73,7 @@ internal class HRSViewModel @Inject constructor(
}
repository.data.onEach {
if (it.connectionState == GattConnectionState.STATE_CONNECTED) {
if (it.connectionState?.state == GattConnectionState.STATE_CONNECTED) {
analytics.logEvent(ProfileConnectedEvent(Profile.HRS))
}
}.launchIn(viewModelScope)

View File

@@ -33,12 +33,13 @@ package no.nordicsemi.android.hts.data
import no.nordicsemi.android.hts.view.TemperatureUnit
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.hts.data.HTSData
internal data class HTSServiceData(
val data: HTSData = HTSData(),
val batteryLevel: Int? = null,
val connectionState: GattConnectionState? = null,
val connectionState: GattConnectionStateWithStatus? = null,
val temperatureUnit: TemperatureUnit = TemperatureUnit.CELSIUS,
val deviceName: String? = null
)

View File

@@ -43,6 +43,7 @@ import no.nordicsemi.android.hts.data.HTSServiceData
import no.nordicsemi.android.hts.view.TemperatureUnit
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.hts.data.HTSData
import no.nordicsemi.android.service.DisconnectAndStopEvent
import no.nordicsemi.android.service.OpenLoggerEvent
@@ -67,7 +68,7 @@ class HTSRepository @Inject constructor(
private val _loggerEvent = simpleSharedFlow<OpenLoggerEvent>()
internal val loggerEvent = _loggerEvent.asSharedFlow()
val isRunning = data.map { it.connectionState == GattConnectionState.STATE_CONNECTED }
val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED }
fun launch(device: ServerDevice) {
serviceManager.startService(HTSService::class.java, device)
@@ -81,7 +82,7 @@ class HTSRepository @Inject constructor(
_data.value = _data.value.copy(temperatureUnit = temperatureUnit)
}
fun onConnectionStateChanged(connectionState: GattConnectionState?) {
fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) {
_data.value = _data.value.copy(connectionState = connectionState)
}

View File

@@ -46,6 +46,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.connect
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.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.hts.HTSDataParser
import no.nordicsemi.android.service.DEVICE_DATA
@@ -95,7 +96,7 @@ internal class HTSService : NotificationService() {
.onEach { logger.launch() }
.launchIn(lifecycleScope)
client.connectionState
client.connectionStateWithStatus
.onEach { repository.onConnectionStateChanged(it) }
.filterNotNull()
.onEach { stopIfDisconnected(it) }
@@ -126,8 +127,8 @@ internal class HTSService : NotificationService() {
repository.onInitComplete(device)
}
private fun stopIfDisconnected(connectionState: GattConnectionState) {
if (connectionState == GattConnectionState.STATE_DISCONNECTED) {
private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) {
if (connectionState.state == GattConnectionState.STATE_DISCONNECTED) {
stopSelf()
}
}

View File

@@ -53,6 +53,7 @@ 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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -63,7 +64,16 @@ fun HTSScreen() {
val navigateUp = { viewModel.onEvent(NavigateUp) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.connectionState,
title = R.string.hts_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -71,7 +81,7 @@ fun HTSScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
when (state.connectionState) {
when (state.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
@@ -83,14 +93,3 @@ fun HTSScreen() {
}
}
}
@Composable
private fun AppBar(state: HTSServiceData, navigateUp: () -> Unit, viewModel: HTSViewModel) {
if (state.deviceName?.isNotBlank() == true) {
LoggerIconAppBar(state.deviceName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
} else {
BackIconAppBar(stringResource(id = R.string.hts_title), navigateUp)
}
}

View File

@@ -73,7 +73,7 @@ internal class HTSViewModel @Inject constructor(
}
repository.data.onEach {
if (it.connectionState == GattConnectionState.STATE_CONNECTED) {
if (it.connectionState?.state == GattConnectionState.STATE_CONNECTED) {
analytics.logEvent(ProfileConnectedEvent(Profile.HTS))
}
}.launchIn(viewModelScope)

View File

@@ -39,7 +39,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.map
import no.nordicsemi.android.common.core.simpleSharedFlow
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.BleGattConnectionStatus
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.prx.AlarmLevel

View File

@@ -31,6 +31,7 @@
package no.nordicsemi.android.prx.view
import android.util.Log
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
@@ -40,19 +41,15 @@ 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.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.prx.R
import no.nordicsemi.android.prx.data.PRXServiceData
import no.nordicsemi.android.prx.viewmodel.PRXViewModel
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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -63,7 +60,16 @@ fun PRXScreen() {
val navigateUp = { viewModel.onEvent(NavigateUpEvent) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.connectionState,
title = R.string.prx_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -71,6 +77,7 @@ fun PRXScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
Log.i("AAATESTAAA", "State: ${state.connectionState?.state}")
when (state.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
@@ -83,22 +90,3 @@ fun PRXScreen() {
}
}
}
private fun getReason(isLinkLoss: Boolean): Reason {
return if (isLinkLoss) {
Reason.LINK_LOSS
} else {
Reason.UNKNOWN
}
}
@Composable
private fun AppBar(state: PRXServiceData, navigateUp: () -> Unit, viewModel: PRXViewModel) {
if (state.deviceName?.isNotBlank() == true) {
LoggerIconAppBar(state.deviceName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
} else {
BackIconAppBar(stringResource(id = R.string.prx_title), navigateUp)
}
}

View File

@@ -121,9 +121,9 @@ internal class PRXViewModel @Inject constructor(
}
private fun disconnect() {
repository.release()
alarmHandler.pauseAlarm()
navigationManager.navigateUp()
repository.release()
}
override fun onCleared() {

View File

@@ -34,13 +34,14 @@ package no.nordicsemi.android.rscs.data
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.rscs.data.RSCSData
import no.nordicsemi.android.rscs.R
internal data class RSCSServiceData(
val data: RSCSData = RSCSData(),
val batteryLevel: Int? = null,
val connectionState: GattConnectionState? = null,
val connectionState: GattConnectionStateWithStatus? = null,
val deviceName: String? = null
) {
@Composable

View File

@@ -41,6 +41,7 @@ import no.nordicsemi.android.common.core.simpleSharedFlow
import no.nordicsemi.android.common.logger.NordicBlekLogger
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.rscs.data.RSCSData
import no.nordicsemi.android.rscs.data.RSCSServiceData
import no.nordicsemi.android.service.DisconnectAndStopEvent
@@ -66,7 +67,7 @@ class RSCSRepository @Inject constructor(
private val _loggerEvent = simpleSharedFlow<OpenLoggerEvent>()
internal val loggerEvent = _loggerEvent.asSharedFlow()
val isRunning = data.map { it.connectionState == GattConnectionState.STATE_CONNECTED }
val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED }
fun launch(device: ServerDevice) {
serviceManager.startService(RSCSService::class.java, device)
@@ -76,7 +77,7 @@ class RSCSRepository @Inject constructor(
_data.value = _data.value.copy(deviceName = device.name)
}
fun onConnectionStateChanged(connectionState: GattConnectionState?) {
fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) {
_data.value = _data.value.copy(connectionState = connectionState)
}

View File

@@ -46,6 +46,7 @@ import no.nordicsemi.android.kotlin.ble.client.main.connect
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.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.rscs.RSCSDataParser
import no.nordicsemi.android.service.DEVICE_DATA
@@ -95,7 +96,7 @@ internal class RSCSService : NotificationService() {
.onEach { logger.launch() }
.launchIn(lifecycleScope)
client.connectionState
client.connectionStateWithStatus
.onEach { repository.onConnectionStateChanged(it) }
.filterNotNull()
.onEach { stopIfDisconnected(it) }
@@ -126,8 +127,8 @@ internal class RSCSService : NotificationService() {
repository.onInitComplete(device)
}
private fun stopIfDisconnected(connectionState: GattConnectionState) {
if (connectionState == GattConnectionState.STATE_DISCONNECTED) {
private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) {
if (connectionState.state == GattConnectionState.STATE_DISCONNECTED) {
stopSelf()
}
}

View File

@@ -40,7 +40,6 @@ 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
@@ -48,11 +47,9 @@ import no.nordicsemi.android.common.ui.scanner.view.DeviceDisconnectedView
import no.nordicsemi.android.common.ui.scanner.view.Reason
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.rscs.R
import no.nordicsemi.android.rscs.data.RSCSServiceData
import no.nordicsemi.android.rscs.viewmodel.RSCSViewModel
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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -63,7 +60,16 @@ fun RSCSScreen() {
val navigateUp = { viewModel.onEvent(NavigateUpEvent) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.deviceName,
connectionState = state.connectionState,
title = R.string.rscs_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLoggerEvent) }
)
}
) {
Column(
modifier = Modifier
@@ -71,7 +77,7 @@ fun RSCSScreen() {
.padding(16.dp)
.verticalScroll(rememberScrollState())
) {
when (state.connectionState) {
when (state.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
@@ -83,14 +89,3 @@ fun RSCSScreen() {
}
}
}
@Composable
private fun AppBar(state: RSCSServiceData, navigateUp: () -> Unit, viewModel: RSCSViewModel) {
if (state.deviceName?.isNotBlank() == true) {
LoggerIconAppBar(state.deviceName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLoggerEvent)
}
} else {
BackIconAppBar(stringResource(id = R.string.rscs_title), navigateUp)
}
}

View File

@@ -72,7 +72,7 @@ internal class RSCSViewModel @Inject constructor(
}
repository.data.onEach {
if (it.connectionState == GattConnectionState.STATE_CONNECTED) {
if (it.connectionState?.state == GattConnectionState.STATE_CONNECTED) {
analytics.logEvent(ProfileConnectedEvent(Profile.RSCS))
}
}.launchIn(viewModelScope)

View File

@@ -32,10 +32,11 @@
package no.nordicsemi.android.uart.data
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
internal data class UARTServiceData(
val messages: List<UARTRecord> = emptyList(),
val connectionState: GattConnectionState? = null,
val connectionState: GattConnectionStateWithStatus? = null,
val batteryLevel: Int? = null,
val deviceName: String? = null
) {

View File

@@ -40,6 +40,7 @@ import kotlinx.coroutines.flow.map
import no.nordicsemi.android.common.core.simpleSharedFlow
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.service.DisconnectAndStopEvent
import no.nordicsemi.android.service.OpenLoggerEvent
import no.nordicsemi.android.service.ServiceManager
@@ -72,7 +73,7 @@ class UARTRepository @Inject internal constructor(
private val _loggerEvent = simpleSharedFlow<OpenLoggerEvent>()
internal val loggerEvent = _loggerEvent.asSharedFlow()
val isRunning = data.map { it.connectionState == GattConnectionState.STATE_CONNECTED }
val isRunning = data.map { it.connectionState?.state == GattConnectionState.STATE_CONNECTED }
val lastConfigurationName = configurationDataSource.lastConfigurationName
@@ -80,7 +81,7 @@ class UARTRepository @Inject internal constructor(
serviceManager.startService(UARTService::class.java, device)
}
fun onConnectionStateChanged(connectionState: GattConnectionState) {
fun onConnectionStateChanged(connectionState: GattConnectionStateWithStatus?) {
_data.value = _data.value.copy(connectionState = connectionState)
}

View File

@@ -50,6 +50,7 @@ import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.BleGattProperty
import no.nordicsemi.android.kotlin.ble.core.data.BleWriteType
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.core.data.Mtu
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.service.DEVICE_DATA
@@ -100,7 +101,7 @@ internal class UARTService : NotificationService() {
.onEach { logger.launch() }
.launchIn(lifecycleScope)
client.connectionState
client.connectionStateWithStatus
.onEach { repository.onConnectionStateChanged(it) }
.filterNotNull()
.onEach { stopIfDisconnected(it) }
@@ -148,8 +149,8 @@ internal class UARTService : NotificationService() {
}
}
private fun stopIfDisconnected(connectionState: GattConnectionState) {
if (connectionState == GattConnectionState.STATE_DISCONNECTED) {
private fun stopIfDisconnected(connectionState: GattConnectionStateWithStatus) {
if (connectionState.state == GattConnectionState.STATE_DISCONNECTED) {
stopSelf()
}
}

View File

@@ -60,6 +60,7 @@ 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
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -70,12 +71,21 @@ fun UARTScreen() {
val navigateUp = { viewModel.onEvent(NavigateUp) }
Scaffold(
topBar = { AppBar(state, navigateUp, viewModel) }
topBar = {
ProfileAppBar(
deviceName = state.uartManagerState.deviceName,
connectionState = state.uartManagerState.connectionState,
title = R.string.uart_title,
navigateUp = navigateUp,
disconnect = { viewModel.onEvent(DisconnectEvent) },
openLogger = { viewModel.onEvent(OpenLogger) }
)
}
) {
Column(
modifier = Modifier.padding(it)
) {
when (state.uartManagerState.connectionState) {
when (state.uartManagerState.connectionState?.state) {
null,
GattConnectionState.STATE_CONNECTING -> PaddingBox { DeviceConnectingView { NavigateUpButton(navigateUp) } }
GattConnectionState.STATE_DISCONNECTED,
@@ -95,18 +105,6 @@ private fun PaddingBox(content: @Composable () -> Unit) {
}
}
@Composable
private fun AppBar(state: UARTViewState, navigateUp: () -> Unit, viewModel: UARTViewModel) {
if (state.uartManagerState.deviceName?.isNotBlank() == true) {
LoggerIconAppBar(state.uartManagerState.deviceName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) {
viewModel.onEvent(OpenLogger)
}
} else {
BackIconAppBar(stringResource(id = R.string.uart_title), navigateUp)
}
}
@OptIn(ExperimentalPagerApi::class)
@Composable
private fun SuccessScreen() {
val input = stringResource(id = R.string.uart_input)
@@ -141,10 +139,3 @@ private fun MacroView() {
val state = viewModel.state.collectAsState().value
MacroSection(state) { viewModel.onEvent(it) }
}
@Composable
fun Scroll(content: @Composable () -> Unit) {
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
content()
}
}

View File

@@ -100,7 +100,7 @@ internal class UARTViewModel @Inject constructor(
repository.data.onEach {
_state.value = _state.value.copy(uartManagerState = it)
if (it.connectionState == GattConnectionState.STATE_CONNECTED) {
if (it.connectionState?.state == GattConnectionState.STATE_CONNECTED) {
analytics.logEvent(ProfileConnectedEvent(Profile.UART))
}
}.launchIn(viewModelScope)