From 71ba29e9ba767905a72d119d0ffe1d2f3f492ff3 Mon Sep 17 00:00:00 2001 From: Ellen Poe Date: Sun, 7 Dec 2025 17:00:54 -0800 Subject: [PATCH] fix: recompose the progress view periodically --- .../ui/navigation/NavigationChrome.kt | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt index 27b2c8a..fa65527 100644 --- a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt +++ b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt @@ -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 @@ -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 @@ -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 @@ -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, ) } } @@ -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 + } +} -- GitLab