diff --git a/lib_service/src/main/java/no/nordicsemi/android/service/BleManagerStatus.kt b/lib_service/src/main/java/no/nordicsemi/android/service/BleManagerStatus.kt index e57e07e0..ebd7e812 100644 --- a/lib_service/src/main/java/no/nordicsemi/android/service/BleManagerStatus.kt +++ b/lib_service/src/main/java/no/nordicsemi/android/service/BleManagerStatus.kt @@ -1,5 +1,8 @@ package no.nordicsemi.android.service +import android.annotation.SuppressLint +import android.bluetooth.BluetoothDevice + sealed class BleManagerResult { fun isRunning(): Boolean { @@ -17,7 +20,11 @@ sealed class BleManagerResult { class IdleResult : BleManagerResult() class ConnectingResult : BleManagerResult() -data class SuccessResult(val data: T) : BleManagerResult() +data class SuccessResult(val device: BluetoothDevice, val data: T) : BleManagerResult() { + + @SuppressLint("MissingPermission") + fun deviceName(): String = device.name ?: device.address +} class LinkLossResult(val data: T) : BleManagerResult() class DisconnectedResult : BleManagerResult() diff --git a/lib_service/src/main/java/no/nordicsemi/android/service/ConnectionObserverAdapter.kt b/lib_service/src/main/java/no/nordicsemi/android/service/ConnectionObserverAdapter.kt index 82d1dab7..dff8cda7 100644 --- a/lib_service/src/main/java/no/nordicsemi/android/service/ConnectionObserverAdapter.kt +++ b/lib_service/src/main/java/no/nordicsemi/android/service/ConnectionObserverAdapter.kt @@ -34,7 +34,7 @@ class ConnectionObserverAdapter : ConnectionObserver { override fun onDeviceReady(device: BluetoothDevice) { Log.d(TAG, "onDeviceReady()") - _status.value = SuccessResult(lastValue!!) + _status.value = SuccessResult(device, lastValue!!) } override fun onDeviceDisconnecting(device: BluetoothDevice) { @@ -53,8 +53,8 @@ class ConnectionObserverAdapter : ConnectionObserver { fun setValue(value: T) { lastValue = value - if (_status.value.isRunning()) { - _status.value = SuccessResult(value) + (_status.value as? SuccessResult)?.let { + _status.value = SuccessResult(it.device, value) } } } diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/data/BPSManager.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/data/BPSManager.kt index 1837aaf8..0b4d02e5 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/data/BPSManager.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/data/BPSManager.kt @@ -61,7 +61,7 @@ internal class BPSManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/repository/BPSRepository.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/repository/BPSRepository.kt index c723e49c..d4a3f043 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/repository/BPSRepository.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/repository/BPSRepository.kt @@ -1,6 +1,5 @@ package no.nordicsemi.android.bps.repository -import android.bluetooth.BluetoothDevice import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.scopes.ViewModelScoped diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSContentView.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSContentView.kt index 29b017cc..acd10f1a 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSContentView.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSContentView.kt @@ -15,7 +15,7 @@ import no.nordicsemi.android.bps.R import no.nordicsemi.android.bps.data.BPSData @Composable -internal fun BPSContentView(state: BPSData, onEvent: (BPSScreenViewEvent) -> Unit) { +internal fun BPSContentView(state: BPSData, onEvent: (BPSViewEvent) -> Unit) { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(16.dp) 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 81c0fbf0..ce7c0a17 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 @@ -1,5 +1,6 @@ package no.nordicsemi.android.bps.view +import android.annotation.SuppressLint import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -9,8 +10,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.bps.R +import no.nordicsemi.android.bps.data.BPSData import no.nordicsemi.android.bps.viewmodel.BPSViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -26,11 +29,7 @@ fun BPSScreen() { Column { val navigateUp = { viewModel.onEvent(DisconnectEvent) } - LoggerIconAppBar(stringResource(id = R.string.bps_title), { - viewModel.onEvent(DisconnectEvent) - }, { viewModel.onEvent(DisconnectEvent) }) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state = state, navigateUp = navigateUp, viewModel = viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state) { @@ -48,3 +47,20 @@ fun BPSScreen() { } } } + +@Composable +private fun AppBar(state: BPSViewState, navigateUp: () -> Unit, viewModel: BPSViewModel) { + val toolbarName = (state as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.bps_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, { + viewModel.onEvent(DisconnectEvent) + }, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreenViewEvent.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreenViewEvent.kt deleted file mode 100644 index d057a27a..00000000 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreenViewEvent.kt +++ /dev/null @@ -1,7 +0,0 @@ -package no.nordicsemi.android.bps.view - -internal sealed class BPSScreenViewEvent - -internal object DisconnectEvent : BPSScreenViewEvent() - -internal object OpenLoggerEvent : BPSScreenViewEvent() diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewEvent.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewEvent.kt new file mode 100644 index 00000000..acb1adf3 --- /dev/null +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewEvent.kt @@ -0,0 +1,7 @@ +package no.nordicsemi.android.bps.view + +internal sealed class BPSViewEvent + +internal object DisconnectEvent : BPSViewEvent() + +internal object OpenLoggerEvent : BPSViewEvent() diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewState.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewState.kt index e720d7c2..d5b145a2 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewState.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSViewState.kt @@ -2,6 +2,7 @@ package no.nordicsemi.android.bps.view import no.nordicsemi.android.bps.data.BPSData import no.nordicsemi.android.service.BleManagerResult +import no.nordicsemi.ui.scanner.DiscoveredBluetoothDevice internal sealed class BPSViewState 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 62664cdc..8ea7928a 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 @@ -43,7 +43,7 @@ internal class BPSViewModel @Inject constructor( }.exhaustive } - fun onEvent(event: BPSScreenViewEvent) { + fun onEvent(event: BPSViewEvent) { when (event) { DisconnectEvent -> navigationManager.navigateUp() OpenLoggerEvent -> repository.openLogger() diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/data/CGMManager.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/data/CGMManager.kt index 034e3c6c..cb17db14 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/data/CGMManager.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/data/CGMManager.kt @@ -85,7 +85,7 @@ internal class CGMManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 ac2bd00c..2246958c 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 @@ -9,8 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.cgms.R -import no.nordicsemi.android.cgms.viewmodel.CGMScreenViewModel +import no.nordicsemi.android.cgms.data.CGMData +import no.nordicsemi.android.cgms.viewmodel.CGMViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -20,15 +22,13 @@ import no.nordicsemi.ui.scanner.ui.Reason @Composable fun CGMScreen() { - val viewModel: CGMScreenViewModel = hiltViewModel() + val viewModel: CGMViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value Column { val navigateUp = { viewModel.onEvent(NavigateUp) } - LoggerIconAppBar(stringResource(id = R.string.cgms_title), navigateUp, { viewModel.onEvent(DisconnectEvent)}) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state) { @@ -46,3 +46,18 @@ fun CGMScreen() { } } } + +@Composable +private fun AppBar(state: CGMViewState, navigateUp: () -> Unit, viewModel: CGMViewModel) { + val toolbarName = (state as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.cgms_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt index f25acb02..35db4a28 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt @@ -3,7 +3,7 @@ package no.nordicsemi.android.cgms.view import no.nordicsemi.android.cgms.data.CGMData import no.nordicsemi.android.service.BleManagerResult -internal sealed class BPSViewState +internal sealed class CGMViewState -internal data class WorkingState(val result: BleManagerResult) : BPSViewState() -internal object NoDeviceState : BPSViewState() +internal data class WorkingState(val result: BleManagerResult) : CGMViewState() +internal object NoDeviceState : CGMViewState() diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMViewModel.kt similarity index 95% rename from profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt rename to profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMViewModel.kt index 76a5115b..9cf47f27 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMViewModel.kt @@ -16,12 +16,12 @@ import no.nordicsemi.ui.scanner.ScannerDestinationId import javax.inject.Inject @HiltViewModel -internal class CGMScreenViewModel @Inject constructor( +internal class CGMViewModel @Inject constructor( private val repository: CGMRepository, private val navigationManager: NavigationManager ) : ViewModel() { - private val _state = MutableStateFlow(NoDeviceState) + private val _state = MutableStateFlow(NoDeviceState) val state = _state.asStateFlow() init { diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/data/CSCManager.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/data/CSCManager.kt index 273ce2af..520fa5fa 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/data/CSCManager.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/data/CSCManager.kt @@ -59,7 +59,7 @@ internal class CSCManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 045ba619..f9ec79d6 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 @@ -9,8 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.csc.R +import no.nordicsemi.android.csc.data.CSCData import no.nordicsemi.android.csc.viewmodel.CSCViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -26,9 +28,7 @@ fun CSCScreen() { Column { val navigateUp = { viewModel.onEvent(NavigateUp) } - LoggerIconAppBar(stringResource(id = R.string.csc_title), navigateUp, { viewModel.onEvent(OnDisconnectButtonClick) }) { - viewModel.onEvent(OpenLogger) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state.cscManagerState) { @@ -46,3 +46,18 @@ fun CSCScreen() { } } } + +@Composable +private fun AppBar(state: CSCViewState, navigateUp: () -> Unit, viewModel: CSCViewModel) { + val toolbarName = (state.cscManagerState as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.csc_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { viewModel.onEvent(OnDisconnectButtonClick) }) { + viewModel.onEvent(OpenLogger) + } + } +} diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/data/GLSManager.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/data/GLSManager.kt index 5ede2603..c6b99e46 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/data/GLSManager.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/data/GLSManager.kt @@ -71,7 +71,7 @@ internal class GLSManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 342d672e..6b4e90f9 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 @@ -9,8 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.gls.R +import no.nordicsemi.android.gls.data.GLSData import no.nordicsemi.android.gls.main.viewmodel.GLSViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -26,11 +28,7 @@ fun GLSScreen() { Column { val navigateUp = { viewModel.onEvent(DisconnectEvent) } - LoggerIconAppBar(stringResource(id = R.string.gls_title), { - viewModel.onEvent(DisconnectEvent) - }, { viewModel.onEvent(DisconnectEvent) }) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state) { @@ -48,3 +46,20 @@ fun GLSScreen() { } } } + +@Composable +private fun AppBar(state: GLSViewState, navigateUp: () -> Unit, viewModel: GLSViewModel) { + val toolbarName = (state as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.gls_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, { + viewModel.onEvent(DisconnectEvent) + }, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSState.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSState.kt index 63839047..f9ded715 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSState.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/main/view/GLSState.kt @@ -3,7 +3,7 @@ package no.nordicsemi.android.gls.main.view import no.nordicsemi.android.gls.data.GLSData import no.nordicsemi.android.service.BleManagerResult -internal sealed class BPSViewState +internal sealed class GLSViewState -internal data class WorkingState(val result: BleManagerResult) : BPSViewState() -internal object NoDeviceState : BPSViewState() +internal data class WorkingState(val result: BleManagerResult) : GLSViewState() +internal object NoDeviceState : GLSViewState() 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 033c101f..eb62319b 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 @@ -21,7 +21,7 @@ internal class GLSViewModel @Inject constructor( private val navigationManager: NavigationManager ) : ViewModel() { - private val _state = MutableStateFlow(NoDeviceState) + private val _state = MutableStateFlow(NoDeviceState) val state = _state.asStateFlow() init { diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/data/HRSManager.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/data/HRSManager.kt index 41466198..c1095d9a 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/data/HRSManager.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/data/HRSManager.kt @@ -61,7 +61,7 @@ internal class HRSManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 f2960a89..87505533 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 @@ -9,8 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.hrs.R +import no.nordicsemi.android.hrs.data.HRSData import no.nordicsemi.android.hrs.viewmodel.HRSViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -26,9 +28,7 @@ fun HRSScreen() { Column { val navigateUp = { viewModel.onEvent(NavigateUpEvent) } - LoggerIconAppBar(stringResource(id = R.string.hrs_title), navigateUp, { viewModel.onEvent(DisconnectEvent) }) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state) { @@ -46,3 +46,18 @@ fun HRSScreen() { } } } + +@Composable +private fun AppBar(state: HRSViewState, navigateUp: () -> Unit, viewModel: HRSViewModel) { + val toolbarName = (state as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.hrs_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSManager.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSManager.kt index cfeb285e..7be575f3 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSManager.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/data/HTSManager.kt @@ -56,7 +56,7 @@ internal class HTSManager internal constructor( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 c5075b8a..4b780caf 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 @@ -9,8 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.hts.R +import no.nordicsemi.android.hts.data.HTSData import no.nordicsemi.android.hts.viewmodel.HTSViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -26,9 +28,7 @@ fun HTSScreen() { Column { val navigateUp = { viewModel.onEvent(NavigateUp) } - LoggerIconAppBar(stringResource(id = R.string.hts_title), navigateUp, { viewModel.onEvent(DisconnectEvent) }) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state.htsManagerState) { @@ -46,3 +46,19 @@ fun HTSScreen() { } } } + +@Composable +private fun AppBar(state: HTSViewState, navigateUp: () -> Unit, viewModel: HTSViewModel) { + val toolbarName = (state.htsManagerState as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.hts_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} + diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXManager.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXManager.kt index 1e4eb51e..db10b09c 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXManager.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/data/PRXManager.kt @@ -68,7 +68,7 @@ internal class PRXManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 28c81e5a..b5230b9a 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 @@ -10,8 +10,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.prx.R +import no.nordicsemi.android.prx.data.PRXData import no.nordicsemi.android.prx.viewmodel.PRXViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -27,9 +29,7 @@ fun PRXScreen() { Column(horizontalAlignment = Alignment.CenterHorizontally) { val navigateUp = { viewModel.onEvent(NavigateUpEvent) } - LoggerIconAppBar(stringResource(id = R.string.prx_title), navigateUp, { viewModel.onEvent(DisconnectEvent) }) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state) { @@ -47,3 +47,18 @@ fun PRXScreen() { } } } + +@Composable +private fun AppBar(state: PRXViewState, navigateUp: () -> Unit, viewModel: PRXViewModel) { + val toolbarName = (state as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.prx_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} diff --git a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/data/RSCSManager.kt b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/data/RSCSManager.kt index 01e4918c..cc8ed938 100644 --- a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/data/RSCSManager.kt +++ b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/data/RSCSManager.kt @@ -56,7 +56,7 @@ internal class RSCSManager internal constructor( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) 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 add69d15..f3c04d11 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 @@ -9,8 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.rscs.R +import no.nordicsemi.android.rscs.data.RSCSData import no.nordicsemi.android.rscs.viewmodel.RSCSViewModel import no.nordicsemi.android.service.* +import no.nordicsemi.android.theme.view.BackIconAppBar import no.nordicsemi.android.theme.view.LoggerIconAppBar import no.nordicsemi.android.utils.exhaustive import no.nordicsemi.ui.scanner.ui.DeviceConnectingView @@ -26,9 +28,7 @@ fun RSCSScreen() { Column { val navigateUp = { viewModel.onEvent(NavigateUpEvent) } - LoggerIconAppBar(stringResource(id = R.string.rscs_title), navigateUp, { viewModel.onEvent(DisconnectEvent) }) { - viewModel.onEvent(OpenLoggerEvent) - } + AppBar(state, navigateUp, viewModel) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { when (state) { @@ -46,3 +46,18 @@ fun RSCSScreen() { } } } + +@Composable +private fun AppBar(state: RSCSViewState, navigateUp: () -> Unit, viewModel: RSCSViewModel) { + val toolbarName = (state as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.rscs_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { viewModel.onEvent(DisconnectEvent) }) { + viewModel.onEvent(OpenLoggerEvent) + } + } +} diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTManager.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTManager.kt index 299cbae4..c3ce714f 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTManager.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/data/UARTManager.kt @@ -69,7 +69,7 @@ internal class UARTManager( val dataHolder = ConnectionObserverAdapter() init { - setConnectionObserver(dataHolder) + connectionObserver = dataHolder data.onEach { dataHolder.setValue(it) diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTRepository.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTRepository.kt index e3cc5095..41d58f5b 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTRepository.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/repository/UARTRepository.kt @@ -32,8 +32,6 @@ class UARTRepository @Inject internal constructor( private val _data = MutableStateFlow>(IdleResult()) internal val data = _data.asStateFlow() - var device: DiscoveredBluetoothDevice? = null - val isRunning = data.map { it.isRunning() } val hasBeenDisconnected = data.map { it.hasBeenDisconnected() } @@ -44,7 +42,6 @@ class UARTRepository @Inject internal constructor( } fun start(device: DiscoveredBluetoothDevice, scope: CoroutineScope) { - this.device = device val createdLogger = toolboxLoggerFactory.create("UART", device.address()).also { logger = it } 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 8587e90c..d9079ea5 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 @@ -1,6 +1,5 @@ package no.nordicsemi.android.uart.view -import android.annotation.SuppressLint import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -34,44 +33,33 @@ fun UARTScreen() { AppBar(state = state, navigateUp = navigateUp) { viewModel.onEvent(it) } - Column(modifier = Modifier) { - when (state.uartManagerState) { - NoDeviceState -> NoDeviceView() - is WorkingState -> when (state.uartManagerState.result) { - is IdleResult, - is ConnectingResult -> Scroll { DeviceConnectingView { viewModel.onEvent(DisconnectEvent) } } - is DisconnectedResult -> Scroll { DeviceDisconnectedView(Reason.USER, navigateUp) } - is LinkLossResult -> Scroll { DeviceDisconnectedView(Reason.LINK_LOSS, navigateUp) } - is MissingServiceResult -> Scroll { DeviceDisconnectedView(Reason.MISSING_SERVICE, navigateUp) } - is UnknownErrorResult -> Scroll { DeviceDisconnectedView(Reason.UNKNOWN, navigateUp) } - is SuccessResult -> SuccessScreen(state.uartManagerState.result.data, state, viewModel) - } - }.exhaustive - } + when (state.uartManagerState) { + NoDeviceState -> NoDeviceView() + is WorkingState -> when (state.uartManagerState.result) { + is IdleResult, + is ConnectingResult -> Scroll { DeviceConnectingView { viewModel.onEvent(DisconnectEvent) } } + is DisconnectedResult -> Scroll { DeviceDisconnectedView(Reason.USER, navigateUp) } + is LinkLossResult -> Scroll { DeviceDisconnectedView(Reason.LINK_LOSS, navigateUp) } + is MissingServiceResult -> Scroll { DeviceDisconnectedView(Reason.MISSING_SERVICE, navigateUp) } + is UnknownErrorResult -> Scroll { DeviceDisconnectedView(Reason.UNKNOWN, navigateUp) } + is SuccessResult -> SuccessScreen(state.uartManagerState.result.data, state, viewModel) + } + }.exhaustive } } -@SuppressLint("MissingPermission") @Composable private fun AppBar(state: UARTViewState, navigateUp: () -> Unit, onEvent: (UARTViewEvent) -> Unit) { - Column(modifier = Modifier) { - when (state.uartManagerState) { - NoDeviceState -> BackIconAppBar(stringResource(id = R.string.uart_title), navigateUp) - is WorkingState -> when (state.uartManagerState.result) { - is IdleResult, - is DisconnectedResult, - is LinkLossResult, - is MissingServiceResult, - is UnknownErrorResult -> BackIconAppBar(stringResource(id = R.string.uart_title), navigateUp) - is ConnectingResult, - is SuccessResult -> { - val text = state.uartManagerState.device.nameOrAddress() - LoggerIconAppBar(text, navigateUp, { onEvent(DisconnectEvent) }) { - onEvent(OpenLogger) - } - } - } - }.exhaustive + val toolbarName = (state.uartManagerState as? WorkingState)?.let { + (it.result as? SuccessResult)?.deviceName() + } + + if (toolbarName == null) { + BackIconAppBar(stringResource(id = R.string.uart_title), navigateUp) + } else { + LoggerIconAppBar(toolbarName, navigateUp, { onEvent(DisconnectEvent) }) { + onEvent(OpenLogger) + } } } diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt index eebbcde5..a41e6821 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt @@ -1,11 +1,9 @@ package no.nordicsemi.android.uart.view -import android.bluetooth.BluetoothDevice import no.nordicsemi.android.service.BleManagerResult import no.nordicsemi.android.uart.data.UARTConfiguration import no.nordicsemi.android.uart.data.UARTData import no.nordicsemi.android.uart.data.UARTMacro -import no.nordicsemi.ui.scanner.DiscoveredBluetoothDevice internal data class UARTViewState( val editedPosition: Int? = null, @@ -29,7 +27,6 @@ internal data class UARTViewState( internal sealed class HTSManagerState internal data class WorkingState( - val device: DiscoveredBluetoothDevice, val result: BleManagerResult ) : HTSManagerState() diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt index af2c87de..690dd5a6 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt @@ -40,7 +40,7 @@ internal class UARTViewModel @Inject constructor( if (it is IdleResult) { return@onEach } - _state.value = _state.value.copy(uartManagerState = WorkingState(repository.device!!, it)) + _state.value = _state.value.copy(uartManagerState = WorkingState(it)) }.launchIn(viewModelScope) dataSource.getConfigurations().onEach {