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

Commit 758856e9 authored by mitulsheth's avatar mitulsheth
Browse files

fix(message): This itinerary is too long

parent 6b327bb8
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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
@@ -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 {
@@ -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) {
@@ -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()
    }
+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
+19 −0
Original line number Diff line number Diff line
@@ -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
@@ -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,
+3 −0
Original line number Diff line number Diff line
@@ -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
@@ -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(
+1 −0
Original line number Diff line number Diff line
@@ -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