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

@@ -2,11 +2,6 @@ package no.nordicsemi.android.gls.view
import no.nordicsemi.android.gls.data.GLSData
internal data class GLSState(
val viewState: GLSViewState,
val isActive: Boolean = true
)
internal sealed class GLSViewState
internal object LoadingState : GLSViewState()

View File

@@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView
import no.nordicsemi.android.utils.exhaustive
@Composable
fun GLSScreen(finishAction: () -> Unit) {
fun GLSScreen() {
val viewModel: GLSViewModel = hiltViewModel()
val state = viewModel.state.collectAsState().value
Log.d("AAATESTAAA", "$viewModel") //TODO fix screen rotation
LaunchedEffect(state.isActive) {
if (state.isActive) {
viewModel.connectDevice()
} else {
finishAction()
}
LaunchedEffect(Unit) {
viewModel.connectDevice()
}
GLSView(state.viewState) {
GLSView(state) {
viewModel.onEvent(it)
}
}

View File

@@ -6,13 +6,15 @@ 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.gls.data.GLSRepository
import no.nordicsemi.android.gls.data.WorkingMode
import no.nordicsemi.android.gls.repository.GLSManager
import no.nordicsemi.android.gls.view.DisplayDataState
import no.nordicsemi.android.gls.view.GLSState
import no.nordicsemi.android.gls.view.LoadingState
import no.nordicsemi.android.navigation.NavigationManager
import no.nordicsemi.android.service.BleManagerStatus
import no.nordicsemi.android.service.ConnectionObserverAdapter
import no.nordicsemi.android.service.SelectedBluetoothDeviceHolder
@@ -23,16 +25,17 @@ import javax.inject.Inject
internal class GLSViewModel @Inject constructor(
private val glsManager: GLSManager,
private val deviceHolder: SelectedBluetoothDeviceHolder,
private val repository: GLSRepository
private val repository: GLSRepository,
private val navigationManager: NavigationManager
) : ViewModel() {
val state = repository.data.combine(repository.status) { data, status ->
when (status) {
BleManagerStatus.CONNECTING -> GLSState(LoadingState)
BleManagerStatus.OK -> GLSState(DisplayDataState(data))
BleManagerStatus.DISCONNECTED -> GLSState(DisplayDataState(data), false)
BleManagerStatus.CONNECTING -> LoadingState
BleManagerStatus.OK,
BleManagerStatus.DISCONNECTED -> DisplayDataState(data)
}
}.stateIn(viewModelScope, SharingStarted.Lazily, GLSState(LoadingState))
}.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState)
init {
glsManager.setConnectionObserver(object : ConnectionObserverAdapter() {
@@ -51,6 +54,12 @@ internal class GLSViewModel @Inject constructor(
repository.setNewStatus(BleManagerStatus.DISCONNECTED)
}
})
repository.status.onEach {
if (it == BleManagerStatus.DISCONNECTED) {
navigationManager.navigateUp()
}
}.launchIn(viewModelScope)
}
fun onEvent(event: GLSScreenViewEvent) {