Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +1 −1 Original line number Original line 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.DirectionsScreen import earth.maps.cardinal.ui.directions.DirectionsViewModel import earth.maps.cardinal.ui.directions.DirectionsViewModel import earth.maps.cardinal.ui.directions.RouteDisplayHandler 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.HomeScreen import earth.maps.cardinal.ui.home.HomeViewModel import earth.maps.cardinal.ui.home.HomeViewModel import earth.maps.cardinal.ui.home.NearbyScreenContent 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 Original line 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 Original line Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.isSystemInDarkTheme import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box Loading Loading @@ -107,7 +107,10 @@ fun TurnByTurnNavigationScreen( // Only display the navigation view if we have a route // Only display the navigation view if we have a route if (route != null) { if (route != null) { DynamicallyOrientingNavigationView( DynamicallyOrientingNavigationView( styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel, views = navigationViewComponentBuilder() ) ) } else { } else { // Show a placeholder or loading state when no route is available // 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 Original line Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * 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 androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel 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 Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package earth.maps.cardinal.ui.directions package earth.maps.cardinal.ui.directions import earth.maps.cardinal.routing.FerrostarWrapperRepository import earth.maps.cardinal.routing.FerrostarWrapperRepository import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationViewModel import io.mockk.mockk import io.mockk.mockk import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Before Loading Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +1 −1 Original line number Original line 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.DirectionsScreen import earth.maps.cardinal.ui.directions.DirectionsViewModel import earth.maps.cardinal.ui.directions.DirectionsViewModel import earth.maps.cardinal.ui.directions.RouteDisplayHandler 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.HomeScreen import earth.maps.cardinal.ui.home.HomeViewModel import earth.maps.cardinal.ui.home.HomeViewModel import earth.maps.cardinal.ui.home.NearbyScreenContent 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 Original line 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 Original line Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.isSystemInDarkTheme import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box Loading Loading @@ -107,7 +107,10 @@ fun TurnByTurnNavigationScreen( // Only display the navigation view if we have a route // Only display the navigation view if we have a route if (route != null) { if (route != null) { DynamicallyOrientingNavigationView( DynamicallyOrientingNavigationView( styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel styleUrl = styleUrl, modifier = Modifier, viewModel = viewModel, views = navigationViewComponentBuilder() ) ) } else { } else { // Show a placeholder or loading state when no route is available // 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 Original line Diff line number Diff line Loading @@ -16,7 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * 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 androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel 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 Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package earth.maps.cardinal.ui.directions package earth.maps.cardinal.ui.directions import earth.maps.cardinal.routing.FerrostarWrapperRepository import earth.maps.cardinal.routing.FerrostarWrapperRepository import earth.maps.cardinal.ui.navigation.TurnByTurnNavigationViewModel import io.mockk.mockk import io.mockk.mockk import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Before Loading