Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt +44 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color Loading @@ -14,6 +16,9 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.stadiamaps.ferrostar.composeui.config.NavigationViewComponentBuilder import com.stadiamaps.ferrostar.composeui.models.CameraControlState import com.stadiamaps.ferrostar.composeui.theme.DefaultInstructionRowTheme Loading @@ -27,7 +32,16 @@ import com.stadiamaps.ferrostar.composeui.views.components.CurrentRoadNameView import com.stadiamaps.ferrostar.composeui.views.components.InstructionsView import com.stadiamaps.ferrostar.composeui.views.components.TripProgressView import com.stadiamaps.ferrostar.core.NavigationUiState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import javax.inject.Inject import javax.inject.Singleton import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds import kotlin.time.ExperimentalTime import kotlin.time.Instant object CardinalNavigationUITheme : NavigationUITheme { override val instructionRowTheme: InstructionRowTheme Loading Loading @@ -89,12 +103,15 @@ fun CardinalProgressView( uiState: NavigationUiState, onTapExit: (() -> Unit)? ) { val viewModel: ProgressViewModel = hiltViewModel() val now by viewModel.now.collectAsState() uiState.progress?.let { progress -> TripProgressView( modifier = modifier, theme = CardinalNavigationUITheme.tripProgressViewTheme, progress = progress, onTapExit = onTapExit onTapExit = onTapExit, fromDate = now, ) } } Loading Loading @@ -148,3 +165,29 @@ fun navigationViewComponentBuilder(): NavigationViewComponentBuilder { }, ) } @OptIn(ExperimentalTime::class) @HiltViewModel class ProgressViewModel @Inject constructor(): ViewModel() { val now = MutableStateFlow(Clock.System.now()) private var cleared = false init { viewModelScope.launch { while (!cleared) { now.value = Clock.System.now() delay(DELAY) } } } override fun onCleared() { cleared = true super.onCleared() } companion object { private val DELAY = 5.seconds } } Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt +44 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color Loading @@ -14,6 +16,9 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.stadiamaps.ferrostar.composeui.config.NavigationViewComponentBuilder import com.stadiamaps.ferrostar.composeui.models.CameraControlState import com.stadiamaps.ferrostar.composeui.theme.DefaultInstructionRowTheme Loading @@ -27,7 +32,16 @@ import com.stadiamaps.ferrostar.composeui.views.components.CurrentRoadNameView import com.stadiamaps.ferrostar.composeui.views.components.InstructionsView import com.stadiamaps.ferrostar.composeui.views.components.TripProgressView import com.stadiamaps.ferrostar.core.NavigationUiState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import javax.inject.Inject import javax.inject.Singleton import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds import kotlin.time.ExperimentalTime import kotlin.time.Instant object CardinalNavigationUITheme : NavigationUITheme { override val instructionRowTheme: InstructionRowTheme Loading Loading @@ -89,12 +103,15 @@ fun CardinalProgressView( uiState: NavigationUiState, onTapExit: (() -> Unit)? ) { val viewModel: ProgressViewModel = hiltViewModel() val now by viewModel.now.collectAsState() uiState.progress?.let { progress -> TripProgressView( modifier = modifier, theme = CardinalNavigationUITheme.tripProgressViewTheme, progress = progress, onTapExit = onTapExit onTapExit = onTapExit, fromDate = now, ) } } Loading Loading @@ -148,3 +165,29 @@ fun navigationViewComponentBuilder(): NavigationViewComponentBuilder { }, ) } @OptIn(ExperimentalTime::class) @HiltViewModel class ProgressViewModel @Inject constructor(): ViewModel() { val now = MutableStateFlow(Clock.System.now()) private var cleared = false init { viewModelScope.launch { while (!cleared) { now.value = Clock.System.now() delay(DELAY) } } } override fun onCleared() { cleared = true super.onCleared() } companion object { private val DELAY = 5.seconds } }