Switch to new navigation.

This commit is contained in:
Sylwester Zieliński
2022-01-19 14:28:42 +01:00
parent 2c304e80f6
commit 2dd3e4bec3
50 changed files with 295 additions and 424 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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) {