Loading cardinal-android/app/src/main/java/earth/maps/cardinal/data/RouteStateRepository.kt +7 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package earth.maps.cardinal.data import androidx.annotation.VisibleForTesting import earth.maps.cardinal.ui.directions.DirectionUiError import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow Loading @@ -29,6 +30,7 @@ data class RouteState( val isLoading: Boolean = false, val error: String? = null, val selectedRouteIndex: Int? = null, val directionError: DirectionUiError? = null, ) class RouteStateRepository { Loading @@ -40,7 +42,7 @@ class RouteStateRepository { } fun setRoutes(routes: List<Route>) { _routeState.value = _routeState.value.copy(routes = routes, isLoading = false, error = null) _routeState.value = _routeState.value.copy(routes = routes, isLoading = false, error = null, directionError = null) } fun selectRoute(index: Int) { Loading @@ -51,6 +53,10 @@ class RouteStateRepository { _routeState.value = _routeState.value.copy(isLoading = false, error = error) } fun setDirectionError(directionError: DirectionUiError?) { _routeState.value = _routeState.value.copy(isLoading = false, directionError = directionError) } fun clear() { _routeState.value = RouteState() } Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionUiError.kt 0 → 100644 +19 −0 Original line number Diff line number Diff line package earth.maps.cardinal.ui.directions import android.media.MediaParser import uniffi.ferrostar.ParsingException sealed class DirectionUiError { object DistanceExceeded : DirectionUiError() data class Unknown(val message: String?) : DirectionUiError() } object DirectionCodes { const val DISTANCE_EXCEEDED = "DistanceExceeded" } fun ParsingException.InvalidStatusCode.toRouteError(): DirectionUiError = when (this.code) { DirectionCodes.DISTANCE_EXCEEDED -> DirectionUiError.DistanceExceeded else -> DirectionUiError.Unknown(this.message) } No newline at end of file cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +19 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.error import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max Loading Loading @@ -499,6 +500,24 @@ private fun NonTransitRouteResults( ) } routeState.directionError != null -> { val message = when (routeState.directionError) { DirectionUiError.DistanceExceeded -> stringResource(string.long_itinerary_error_message) is DirectionUiError.Unknown -> routeState.directionError.message?.let { stringResource(string.directions_error, routeState.directionError.message) } } message?.let { Text( text = it, color = MaterialTheme.colorScheme.error, modifier = Modifier .fillMaxWidth() .padding(dimensionResource(dimen.padding)) ) } } routeState.routes.isNotEmpty() -> { FerrostarRouteResults( routeState = routeState, Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsViewModel.kt +3 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import uniffi.ferrostar.GeographicCoordinate import uniffi.ferrostar.ParsingException import uniffi.ferrostar.UserLocation import uniffi.ferrostar.Waypoint import uniffi.ferrostar.WaypointKind Loading Loading @@ -173,6 +174,8 @@ class DirectionsViewModel @Inject constructor( } routeStateRepository.setRoutes(routes) } catch (invalidStatusCode: ParsingException.InvalidStatusCode) { routeStateRepository.setDirectionError(invalidStatusCode.toRouteError()) } catch (e: Exception) { Log.e(TAG, "Error while fetching route", e) routeStateRepository.setError( Loading cardinal-android/app/src/main/res/values/strings.xml +1 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ <string name="routing_profile">Routing Profile</string> <string name="routing_mode">Routing Mode</string> <string name="directions">Directions</string> <string name="long_itinerary_error_message">This itinerary is too long</string> <string name="from">From</string> <string name="to">To</string> <string name="routing_profile_format">Profile: %1$s</string> Loading Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/data/RouteStateRepository.kt +7 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package earth.maps.cardinal.data import androidx.annotation.VisibleForTesting import earth.maps.cardinal.ui.directions.DirectionUiError import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow Loading @@ -29,6 +30,7 @@ data class RouteState( val isLoading: Boolean = false, val error: String? = null, val selectedRouteIndex: Int? = null, val directionError: DirectionUiError? = null, ) class RouteStateRepository { Loading @@ -40,7 +42,7 @@ class RouteStateRepository { } fun setRoutes(routes: List<Route>) { _routeState.value = _routeState.value.copy(routes = routes, isLoading = false, error = null) _routeState.value = _routeState.value.copy(routes = routes, isLoading = false, error = null, directionError = null) } fun selectRoute(index: Int) { Loading @@ -51,6 +53,10 @@ class RouteStateRepository { _routeState.value = _routeState.value.copy(isLoading = false, error = error) } fun setDirectionError(directionError: DirectionUiError?) { _routeState.value = _routeState.value.copy(isLoading = false, directionError = directionError) } fun clear() { _routeState.value = RouteState() } Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionUiError.kt 0 → 100644 +19 −0 Original line number Diff line number Diff line package earth.maps.cardinal.ui.directions import android.media.MediaParser import uniffi.ferrostar.ParsingException sealed class DirectionUiError { object DistanceExceeded : DirectionUiError() data class Unknown(val message: String?) : DirectionUiError() } object DirectionCodes { const val DISTANCE_EXCEEDED = "DistanceExceeded" } fun ParsingException.InvalidStatusCode.toRouteError(): DirectionUiError = when (this.code) { DirectionCodes.DISTANCE_EXCEEDED -> DirectionUiError.DistanceExceeded else -> DirectionUiError.Unknown(this.message) } No newline at end of file
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +19 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.error import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max Loading Loading @@ -499,6 +500,24 @@ private fun NonTransitRouteResults( ) } routeState.directionError != null -> { val message = when (routeState.directionError) { DirectionUiError.DistanceExceeded -> stringResource(string.long_itinerary_error_message) is DirectionUiError.Unknown -> routeState.directionError.message?.let { stringResource(string.directions_error, routeState.directionError.message) } } message?.let { Text( text = it, color = MaterialTheme.colorScheme.error, modifier = Modifier .fillMaxWidth() .padding(dimensionResource(dimen.padding)) ) } } routeState.routes.isNotEmpty() -> { FerrostarRouteResults( routeState = routeState, Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsViewModel.kt +3 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import uniffi.ferrostar.GeographicCoordinate import uniffi.ferrostar.ParsingException import uniffi.ferrostar.UserLocation import uniffi.ferrostar.Waypoint import uniffi.ferrostar.WaypointKind Loading Loading @@ -173,6 +174,8 @@ class DirectionsViewModel @Inject constructor( } routeStateRepository.setRoutes(routes) } catch (invalidStatusCode: ParsingException.InvalidStatusCode) { routeStateRepository.setDirectionError(invalidStatusCode.toRouteError()) } catch (e: Exception) { Log.e(TAG, "Error while fetching route", e) routeStateRepository.setError( Loading
cardinal-android/app/src/main/res/values/strings.xml +1 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ <string name="routing_profile">Routing Profile</string> <string name="routing_mode">Routing Mode</string> <string name="directions">Directions</string> <string name="long_itinerary_error_message">This itinerary is too long</string> <string name="from">From</string> <string name="to">To</string> <string name="routing_profile_format">Profile: %1$s</string> Loading