Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +1 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ import earth.maps.cardinal.routing.RouteRepository import earth.maps.cardinal.ui.directions.DirectionsScreen import earth.maps.cardinal.ui.directions.DirectionsViewModel import earth.maps.cardinal.ui.directions.RouteDisplayHandler import earth.maps.cardinal.ui.directions.TurnByTurnNavigationScreen import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationScreen import earth.maps.cardinal.ui.home.HomeScreen import earth.maps.cardinal.ui.home.HomeViewModel import earth.maps.cardinal.ui.home.NearbyScreenContent Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt 0 → 100644 +95 −0 Original line number Diff line number Diff line package earth.maps.cardinal.ui.navigation import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.stadiamaps.ferrostar.composeui.config.NavigationViewComponentBuilder import com.stadiamaps.ferrostar.composeui.models.CameraControlState import com.stadiamaps.ferrostar.composeui.theme.DefaultNavigationUITheme 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 kotlin.time.ExperimentalTime @Composable fun CardinalInstructionsView(modifier: Modifier, uiState: NavigationUiState) { uiState.visualInstruction?.let { instructions -> InstructionsView( modifier = modifier, instructions = instructions, theme = DefaultNavigationUITheme.instructionRowTheme, remainingSteps = uiState.remainingSteps, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) } } @OptIn(ExperimentalTime::class) @Composable fun CardinalProgressView( modifier: Modifier, uiState: NavigationUiState, onTapExit: (() -> Unit)? ) { uiState.progress?.let { progress -> TripProgressView( modifier = modifier, theme = DefaultNavigationUITheme.tripProgressViewTheme, progress = progress, onTapExit = onTapExit) } } @Composable fun CardinalRoadNameView( modifier: Modifier, roadName: String?, cameraControlState: CameraControlState ) { if (cameraControlState is CameraControlState.ShowRouteOverview) { roadName?.let { roadName -> Row( modifier.fillMaxWidth(), verticalAlignment = Alignment.Bottom, horizontalArrangement = Arrangement.Center) { CurrentRoadNameView( modifier = modifier, theme = DefaultNavigationUITheme.roadNameViewTheme, currentRoadName = roadName) Spacer(modifier = Modifier.height(8.dp)) } } } } fun navigationViewComponentBuilder(): NavigationViewComponentBuilder { return NavigationViewComponentBuilder( instructionsView = @Composable { modifier, navigationUiState -> CardinalInstructionsView( modifier, navigationUiState ) }, progressView = @Composable { modifier, navigationUiState, onTapExit -> CardinalProgressView( modifier, navigationUiState, onTapExit ) }, roadNameView = @Composable { modifier, roadName, cameraControlState -> CardinalRoadNameView( modifier, roadName, cameraControlState ) }, ) } cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/TurnByTurnNavigationScreen.kt→cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/TurnByTurnNavigationScreen.kt +5 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package earth.maps.cardinal.ui.directions package earth.maps.cardinal.ui.navigation import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box Loading Loading @@ -107,7 +107,10 @@ fun TurnByTurnNavigationScreen( // Only display the navigation view if we have a route if (route != null) { DynamicallyOrientingNavigationView( styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel, views = navigationViewComponentBuilder() ) } else { // Show a placeholder or loading state when no route is available Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/TurnByTurnNavigationViewModel.kt→cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/TurnByTurnNavigationViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package earth.maps.cardinal.ui.directions package earth.maps.cardinal.ui.navigation import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel Loading cardinal-android/app/src/test/java/earth/maps/cardinal/ui/directions/TurnByTurnNavigationViewModelTest.kt +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package earth.maps.cardinal.ui.directions import earth.maps.cardinal.routing.FerrostarWrapperRepository import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationViewModel import io.mockk.mockk import org.junit.Assert.assertEquals import org.junit.Before Loading Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +1 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ import earth.maps.cardinal.routing.RouteRepository import earth.maps.cardinal.ui.directions.DirectionsScreen import earth.maps.cardinal.ui.directions.DirectionsViewModel import earth.maps.cardinal.ui.directions.RouteDisplayHandler import earth.maps.cardinal.ui.directions.TurnByTurnNavigationScreen import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationScreen import earth.maps.cardinal.ui.home.HomeScreen import earth.maps.cardinal.ui.home.HomeViewModel import earth.maps.cardinal.ui.home.NearbyScreenContent Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/NavigationChrome.kt 0 → 100644 +95 −0 Original line number Diff line number Diff line package earth.maps.cardinal.ui.navigation import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.stadiamaps.ferrostar.composeui.config.NavigationViewComponentBuilder import com.stadiamaps.ferrostar.composeui.models.CameraControlState import com.stadiamaps.ferrostar.composeui.theme.DefaultNavigationUITheme 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 kotlin.time.ExperimentalTime @Composable fun CardinalInstructionsView(modifier: Modifier, uiState: NavigationUiState) { uiState.visualInstruction?.let { instructions -> InstructionsView( modifier = modifier, instructions = instructions, theme = DefaultNavigationUITheme.instructionRowTheme, remainingSteps = uiState.remainingSteps, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) } } @OptIn(ExperimentalTime::class) @Composable fun CardinalProgressView( modifier: Modifier, uiState: NavigationUiState, onTapExit: (() -> Unit)? ) { uiState.progress?.let { progress -> TripProgressView( modifier = modifier, theme = DefaultNavigationUITheme.tripProgressViewTheme, progress = progress, onTapExit = onTapExit) } } @Composable fun CardinalRoadNameView( modifier: Modifier, roadName: String?, cameraControlState: CameraControlState ) { if (cameraControlState is CameraControlState.ShowRouteOverview) { roadName?.let { roadName -> Row( modifier.fillMaxWidth(), verticalAlignment = Alignment.Bottom, horizontalArrangement = Arrangement.Center) { CurrentRoadNameView( modifier = modifier, theme = DefaultNavigationUITheme.roadNameViewTheme, currentRoadName = roadName) Spacer(modifier = Modifier.height(8.dp)) } } } } fun navigationViewComponentBuilder(): NavigationViewComponentBuilder { return NavigationViewComponentBuilder( instructionsView = @Composable { modifier, navigationUiState -> CardinalInstructionsView( modifier, navigationUiState ) }, progressView = @Composable { modifier, navigationUiState, onTapExit -> CardinalProgressView( modifier, navigationUiState, onTapExit ) }, roadNameView = @Composable { modifier, roadName, cameraControlState -> CardinalRoadNameView( modifier, roadName, cameraControlState ) }, ) }
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/TurnByTurnNavigationScreen.kt→cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/TurnByTurnNavigationScreen.kt +5 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package earth.maps.cardinal.ui.directions package earth.maps.cardinal.ui.navigation import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box Loading Loading @@ -107,7 +107,10 @@ fun TurnByTurnNavigationScreen( // Only display the navigation view if we have a route if (route != null) { DynamicallyOrientingNavigationView( styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel, views = navigationViewComponentBuilder() ) } else { // Show a placeholder or loading state when no route is available Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/TurnByTurnNavigationViewModel.kt→cardinal-android/app/src/main/java/earth/maps/cardinal/ui/navigation/TurnByTurnNavigationViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package earth.maps.cardinal.ui.directions package earth.maps.cardinal.ui.navigation import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel Loading
cardinal-android/app/src/test/java/earth/maps/cardinal/ui/directions/TurnByTurnNavigationViewModelTest.kt +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package earth.maps.cardinal.ui.directions import earth.maps.cardinal.routing.FerrostarWrapperRepository import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationViewModel import io.mockk.mockk import org.junit.Assert.assertEquals import org.junit.Before Loading