Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71ba29e9 authored by Ellen Poe's avatar Ellen Poe
Browse files

fix: recompose the progress view periodically

parent 2720d95c
Loading
Loading
Loading
Loading
Loading
+44 −1
Original line number Original line Diff line number Diff line
@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.height
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
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.text.font.FontWeight
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
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.config.NavigationViewComponentBuilder
import com.stadiamaps.ferrostar.composeui.models.CameraControlState
import com.stadiamaps.ferrostar.composeui.models.CameraControlState
import com.stadiamaps.ferrostar.composeui.theme.DefaultInstructionRowTheme
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.InstructionsView
import com.stadiamaps.ferrostar.composeui.views.components.TripProgressView
import com.stadiamaps.ferrostar.composeui.views.components.TripProgressView
import com.stadiamaps.ferrostar.core.NavigationUiState
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.ExperimentalTime
import kotlin.time.Instant


object CardinalNavigationUITheme : NavigationUITheme {
object CardinalNavigationUITheme : NavigationUITheme {
    override val instructionRowTheme: InstructionRowTheme
    override val instructionRowTheme: InstructionRowTheme
@@ -89,12 +103,15 @@ fun CardinalProgressView(
    uiState: NavigationUiState,
    uiState: NavigationUiState,
    onTapExit: (() -> Unit)?
    onTapExit: (() -> Unit)?
) {
) {
    val viewModel: ProgressViewModel = hiltViewModel()
    val now by viewModel.now.collectAsState()
    uiState.progress?.let { progress ->
    uiState.progress?.let { progress ->
        TripProgressView(
        TripProgressView(
            modifier = modifier,
            modifier = modifier,
            theme = CardinalNavigationUITheme.tripProgressViewTheme,
            theme = CardinalNavigationUITheme.tripProgressViewTheme,
            progress = progress,
            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
    }
}