mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2026-01-06 08:14:24 +01:00
Switch to new navigation.
This commit is contained in:
@@ -10,6 +10,7 @@ dependencies {
|
||||
|
||||
implementation libs.nordic.log
|
||||
implementation libs.nordic.theme
|
||||
implementation libs.nordic.navigation
|
||||
|
||||
implementation libs.bundles.compose
|
||||
implementation libs.androidx.core
|
||||
|
||||
@@ -35,7 +35,7 @@ import no.nordicsemi.android.service.BatteryManager
|
||||
import java.util.*
|
||||
|
||||
/** Cycling Speed and Cadence service UUID. */
|
||||
val CYCLING_SPEED_AND_CADENCE_SERVICE_UUID: UUID = UUID.fromString("00001816-0000-1000-8000-00805f9b34fb")
|
||||
val CSC_SERVICE_UUID: UUID = UUID.fromString("00001816-0000-1000-8000-00805f9b34fb")
|
||||
|
||||
/** Cycling Speed and Cadence Measurement characteristic UUID. */
|
||||
private val CSC_MEASUREMENT_CHARACTERISTIC_UUID = UUID.fromString("00002A5B-0000-1000-8000-00805f9b34fb")
|
||||
@@ -101,7 +101,7 @@ internal class CSCManager(context: Context, private val repository: CSCRepositor
|
||||
}
|
||||
|
||||
public override fun isRequiredServiceSupported(gatt: BluetoothGatt): Boolean {
|
||||
val service = gatt.getService(CYCLING_SPEED_AND_CADENCE_SERVICE_UUID)
|
||||
val service = gatt.getService(CSC_SERVICE_UUID)
|
||||
if (service != null) {
|
||||
cscMeasurementCharacteristic = service.getCharacteristic(
|
||||
CSC_MEASUREMENT_CHARACTERISTIC_UUID
|
||||
|
||||
@@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView
|
||||
import no.nordicsemi.android.utils.exhaustive
|
||||
|
||||
@Composable
|
||||
fun CSCScreen(finishAction: () -> Unit) {
|
||||
fun CSCScreen() {
|
||||
val viewModel: CSCViewModel = hiltViewModel()
|
||||
val state = viewModel.state.collectAsState().value
|
||||
|
||||
val context = LocalContext.current
|
||||
LaunchedEffect(state.isActive) {
|
||||
if (state.isActive) {
|
||||
val intent = Intent(context, CSCService::class.java)
|
||||
context.startService(intent)
|
||||
} else {
|
||||
finishAction()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
val intent = Intent(context, CSCService::class.java)
|
||||
context.startService(intent)
|
||||
}
|
||||
|
||||
CSCView(state.viewState) { viewModel.onEvent(it) }
|
||||
CSCView(state) { viewModel.onEvent(it) }
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -2,11 +2,6 @@ package no.nordicsemi.android.csc.view
|
||||
|
||||
import no.nordicsemi.android.csc.data.CSCData
|
||||
|
||||
internal data class CSCState(
|
||||
val viewState: CSCViewState,
|
||||
val isActive: Boolean = true
|
||||
)
|
||||
|
||||
internal sealed class CSCViewState
|
||||
|
||||
internal object LoadingState : CSCViewState()
|
||||
|
||||
@@ -5,33 +5,44 @@ import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import no.nordicsemi.android.csc.data.CSCRepository
|
||||
import no.nordicsemi.android.csc.data.DisconnectCommand
|
||||
import no.nordicsemi.android.csc.data.SetWheelSizeCommand
|
||||
import no.nordicsemi.android.csc.view.CSCState
|
||||
import no.nordicsemi.android.csc.view.CSCViewEvent
|
||||
import no.nordicsemi.android.csc.view.DisplayDataState
|
||||
import no.nordicsemi.android.csc.view.LoadingState
|
||||
import no.nordicsemi.android.csc.view.OnDisconnectButtonClick
|
||||
import no.nordicsemi.android.csc.view.OnSelectedSpeedUnitSelected
|
||||
import no.nordicsemi.android.csc.view.OnWheelSizeSelected
|
||||
import no.nordicsemi.android.navigation.NavigationManager
|
||||
import no.nordicsemi.android.service.BleManagerStatus
|
||||
import no.nordicsemi.android.utils.exhaustive
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
internal class CSCViewModel @Inject constructor(
|
||||
private val repository: CSCRepository
|
||||
private val repository: CSCRepository,
|
||||
private val navigationManager: NavigationManager
|
||||
) : ViewModel() {
|
||||
|
||||
val state = repository.data.combine(repository.status) { data, status ->
|
||||
when (status) {
|
||||
BleManagerStatus.CONNECTING -> CSCState(LoadingState)
|
||||
BleManagerStatus.OK -> CSCState(DisplayDataState(data))
|
||||
BleManagerStatus.DISCONNECTED -> CSCState(DisplayDataState(data), false)
|
||||
BleManagerStatus.CONNECTING -> LoadingState
|
||||
BleManagerStatus.OK,
|
||||
BleManagerStatus.DISCONNECTED -> DisplayDataState(data)
|
||||
}
|
||||
}.stateIn(viewModelScope, SharingStarted.Lazily, CSCState(LoadingState))
|
||||
}.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState)
|
||||
|
||||
init {
|
||||
repository.status.onEach {
|
||||
if (it == BleManagerStatus.DISCONNECTED) {
|
||||
navigationManager.navigateUp()
|
||||
}
|
||||
}.launchIn(viewModelScope)
|
||||
}
|
||||
|
||||
fun onEvent(event: CSCViewEvent) {
|
||||
when (event) {
|
||||
|
||||
Reference in New Issue
Block a user