From 9f356bd728b7eaead70c26172ab84def948138ca Mon Sep 17 00:00:00 2001 From: Dimitris Date: Tue, 30 Dec 2025 16:11:30 +0100 Subject: [PATCH] Osrm --- app/src/main/AndroidManifest.xml | 1 + .../com/kouros/navigation/MainApplication.kt | 3 +- .../com/kouros/navigation/di/appModule.kt | 4 ++- common/car/src/main/AndroidManifest.xml | 3 +- .../navigation/car/NavigationSession.kt | 1 + .../kouros/navigation/car/SurfaceRenderer.kt | 2 +- .../com/kouros/navigation/car/map/MapView.kt | 16 +++++++++-- .../car/navigation/RouteCarModel.kt | 20 +++++++++++-- .../navigation/car/screen/NavigationScreen.kt | 11 +++---- .../com/kouros/navigation/car/UnitTest.kt | 5 ++-- .../java/com/kouros/navigation/data/Data.kt | 5 +++- .../navigation/data/osrm/Intersections.kt | 1 + .../navigation/data/osrm/OsrmRepository.kt | 4 ++- .../kouros/navigation/data/osrm/OsrmRoute.kt | 24 ++++++++++++++-- .../navigation/data/route/Intersection.kt | 8 ++++++ .../com/kouros/navigation/data/route/Lane.kt | 6 ++++ .../com/kouros/navigation/data/route/Step.kt | 3 +- .../kouros/navigation/model/BaseStyleModel.kt | 15 ++++++++++ .../com/kouros/navigation/model/RouteModel.kt | 27 +++++++++++++++--- .../com/kouros/navigation/model/ViewModel.kt | 12 ++++---- common/data/src/main/res/drawable/lanes.png | Bin 0 -> 1041 bytes .../data/styles => res/raw}/liberty.json | 0 .../styles => res/raw}/liberty_night.json | 0 gradle/libs.versions.toml | 2 +- 24 files changed, 139 insertions(+), 34 deletions(-) create mode 100644 common/data/src/main/java/com/kouros/navigation/data/route/Intersection.kt create mode 100644 common/data/src/main/java/com/kouros/navigation/data/route/Lane.kt create mode 100644 common/data/src/main/java/com/kouros/navigation/model/BaseStyleModel.kt create mode 100644 common/data/src/main/res/drawable/lanes.png rename common/data/src/main/{java/com/kouros/navigation/data/styles => res/raw}/liberty.json (100%) rename common/data/src/main/{java/com/kouros/navigation/data/styles => res/raw}/liberty_night.json (100%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 527c9da..96f95f2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,6 +20,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:enableOnBackInvokedCallback="true" + android:usesCleartextTraffic="true" android:theme="@style/Theme.Navigation"> - + diff --git a/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt b/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt index 67e3aeb..283bc2d 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt @@ -157,6 +157,7 @@ class NavigationSession : Session(), NavigationScreen.Listener { carContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager val location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) if (location != null) { + navigationViewModel.loadRecentPlace(location = location, carContext) updateLocation(location) locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, diff --git a/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt b/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt index 88fdc73..f9dd26b 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt @@ -192,7 +192,7 @@ class SurfaceRenderer( val cameraDuration = duration(viewStyle == ViewStyle.PREVIEW, position!!.bearing, lastBearing) val currentSpeed: Float? by speed.observeAsState() - if (viewStyle == ViewStyle.VIEW) { + if (viewStyle == ViewStyle.VIEW || viewStyle == ViewStyle.PAN_VIEW) { DrawNavigationImages( paddingValues, currentSpeed, diff --git a/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt b/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt index dda37e7..f0284fd 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt @@ -1,7 +1,8 @@ package com.kouros.navigation.car.map -import android.location.Location import android.content.Context +import android.content.res.AssetFileDescriptor +import android.location.Location import androidx.compose.foundation.Canvas import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box @@ -33,9 +34,9 @@ import com.kouros.navigation.data.Constants.SHOW_THREED_BUILDING import com.kouros.navigation.data.NavigationColor import com.kouros.navigation.data.RouteColor import com.kouros.navigation.data.SpeedColor +import com.kouros.navigation.model.BaseStyleModel import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue -import com.kouros.navigation.utils.location import org.maplibre.compose.camera.CameraPosition import org.maplibre.compose.camera.CameraState import org.maplibre.compose.camera.rememberCameraState @@ -92,6 +93,8 @@ fun MapLibre( viewStyle: ViewStyle, speedCameras: String? = "" ) { + + //val baseStyle = BaseStyleModel().readStyle(context) MaplibreMap( options = MapOptions( ornamentOptions = @@ -115,6 +118,7 @@ fun MapLibre( //Puck(cameraState, lastLocation) } } + @Composable fun RouteLayer(routeData: String?) { if (routeData != null && routeData.isNotEmpty()) { @@ -191,6 +195,7 @@ fun SpeedCameraLayer(speedCameras: String?) { ) } } + @Composable fun BuildingLayer(tiles: Source) { Anchor.Replace("building-3d") { @@ -369,6 +374,7 @@ private fun MaxSpeed( @Composable fun DarkMode(context: Context, baseStyle: MutableState) { val darkMode = getIntKeyValue(context, Constants.DARK_MODE_SETTINGS) + if (darkMode == 0) { baseStyle.value = BaseStyle.Uri(Constants.STYLE) } @@ -385,7 +391,11 @@ fun DarkMode(context: Context, baseStyle: MutableState) { fun getPaddingValues(height: Int, viewStyle: ViewStyle): PaddingValues { return when (viewStyle) { - ViewStyle.VIEW -> PaddingValues(start = 50.dp, top = distanceFromTop(height).dp) + ViewStyle.VIEW, ViewStyle.PAN_VIEW -> PaddingValues( + start = 50.dp, + top = distanceFromTop(height).dp + ) + ViewStyle.PREVIEW -> PaddingValues(start = 150.dp, bottom = 0.dp) else -> PaddingValues(start = 250.dp, bottom = 0.dp) } diff --git a/common/car/src/main/java/com/kouros/navigation/car/navigation/RouteCarModel.kt b/common/car/src/main/java/com/kouros/navigation/car/navigation/RouteCarModel.kt index 11eb571..ce72655 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/navigation/RouteCarModel.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/navigation/RouteCarModel.kt @@ -29,6 +29,8 @@ import androidx.car.app.model.CarIcon import androidx.car.app.model.CarText import androidx.car.app.model.DateTimeWithZone import androidx.car.app.model.Distance +import androidx.car.app.navigation.model.Lane +import androidx.car.app.navigation.model.LaneDirection import androidx.car.app.navigation.model.Maneuver import androidx.car.app.navigation.model.Step import androidx.car.app.navigation.model.TravelEstimate @@ -46,6 +48,13 @@ class RouteCarModel() : RouteModel() { val stepData = currentStep() val currentStepCueWithImage: SpannableString = createString(stepData.instruction) + + + val straightNormal = + Lane.Builder() + .addDirection(LaneDirection.create(LaneDirection.SHAPE_STRAIGHT, false)) + .build() + val step = Step.Builder(currentStepCueWithImage) .setManeuver( @@ -54,12 +63,17 @@ class RouteCarModel() : RouteModel() { .build() ) .setRoad(routeState.destination.street!!) - .build() - return step + stepData.lane.forEach { + if (it.indications.isNotEmpty() ) { + step.setLanesImage(createCarIcon(carContext, R.drawable.lanes)) + step.addLane(straightNormal) + } + } + return step.build() } /** Returns the next [Step] with information such as the cue text and images. */ - fun nextStep(carContext: CarContext): Step? { + fun nextStep(carContext: CarContext): Step { val stepData = nextStep() val currentStepCueWithImage: SpannableString = createString(stepData.instruction) diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt index 3602bf9..48a0c43 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt @@ -11,11 +11,12 @@ import androidx.car.app.model.Action.FLAG_DEFAULT import androidx.car.app.model.ActionStrip import androidx.car.app.model.CarColor import androidx.car.app.model.CarIcon -import androidx.car.app.model.CarText import androidx.car.app.model.Distance import androidx.car.app.model.Header import androidx.car.app.model.MessageTemplate import androidx.car.app.model.Template +import androidx.car.app.navigation.model.Lane +import androidx.car.app.navigation.model.LaneDirection import androidx.car.app.navigation.model.Maneuver import androidx.car.app.navigation.model.MapWithContentTemplate import androidx.car.app.navigation.model.MessageInfo @@ -29,13 +30,11 @@ import com.kouros.navigation.car.ViewStyle import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.data.Constants import com.kouros.navigation.data.Constants.DESTINATION_ARRIVAL_DISTANCE -import com.kouros.navigation.data.NavigationRepository import com.kouros.navigation.data.Place import com.kouros.navigation.data.nominatim.SearchResult import com.kouros.navigation.data.overpass.Elements import com.kouros.navigation.model.ViewModel import com.kouros.navigation.utils.GeoUtils -import com.kouros.navigation.utils.bearing import com.kouros.navigation.utils.location import kotlin.math.absoluteValue @@ -102,13 +101,12 @@ class NavigationScreen( coordinates.add(listOf(it.lon!!, it.lat!!)) } val speedData = GeoUtils.createPointCollection(coordinates, "radar") - surfaceRenderer.speedCamerasData.value =speedData + surfaceRenderer.speedCamerasData.value = speedData } init { viewModel.route.observe(this, observer) viewModel.recentPlace.observe(this, recentObserver) - viewModel.loadRecentPlace(location = surfaceRenderer.lastLocation) viewModel.placeLocation.observe(this, placeObserver) viewModel.speedCameras.observe(this, speedObserver) } @@ -369,6 +367,7 @@ class NavigationScreen( .build() ).setOnClickListener { surfaceRenderer.handleScale(1) + invalidate() } .build() } @@ -385,6 +384,7 @@ class NavigationScreen( .build() ).setOnClickListener { surfaceRenderer.handleScale(-1) + invalidate() } .build() } @@ -401,6 +401,7 @@ class NavigationScreen( .build() ).setOnClickListener { surfaceRenderer.viewStyle = ViewStyle.VIEW + invalidate() } .build() } diff --git a/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt b/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt index 6c05bdc..8290448 100644 --- a/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt +++ b/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt @@ -6,6 +6,7 @@ import com.kouros.navigation.data.Constants.home2Location import com.kouros.navigation.data.Constants.homeLocation import com.kouros.navigation.data.NavigationRepository import com.kouros.navigation.data.SearchFilter +import com.kouros.navigation.data.valhalla.ValhallaRepository import com.kouros.navigation.model.RouteModel import com.kouros.navigation.model.ViewModel import org.junit.Test @@ -16,7 +17,7 @@ import org.junit.Test */ class ViewModelTest { - val repo = NavigationRepository() + val repo = ValhallaRepository() val viewModel = ViewModel(repo) val model = RouteModel() @@ -33,6 +34,6 @@ class ViewModelTest { toLocation.longitude = home2Location.longitude val route = repo.getRoute(fromLocation, toLocation, SearchFilter()) - model.startNavigation(route) + //model.startNavigation(route) } } diff --git a/common/data/src/main/java/com/kouros/navigation/data/Data.kt b/common/data/src/main/java/com/kouros/navigation/data/Data.kt index b143562..8f7c368 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/Data.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/Data.kt @@ -19,6 +19,7 @@ package com.kouros.navigation.data import android.location.Location import android.location.LocationManager import android.net.Uri +import com.kouros.navigation.data.route.Lane import io.objectbox.annotation.Entity import io.objectbox.annotation.Id import kotlinx.serialization.Serializable @@ -63,7 +64,9 @@ data class StepData ( var arrivalTime : Long, - var leftDistance: Double + var leftDistance: Double, + + var lane: List = listOf(Lane(valid = false, indications = emptyList())), ) diff --git a/common/data/src/main/java/com/kouros/navigation/data/osrm/Intersections.kt b/common/data/src/main/java/com/kouros/navigation/data/osrm/Intersections.kt index 024ebe2..2ab2696 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/osrm/Intersections.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/osrm/Intersections.kt @@ -5,6 +5,7 @@ import com.google.gson.annotations.SerializedName data class Intersections( + @SerializedName("in") var inV: Int? = null, @SerializedName("out") var out: Int? = null, @SerializedName("entry") var entry: ArrayList = arrayListOf(), @SerializedName("bearings") var bearings: ArrayList = arrayListOf(), diff --git a/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt b/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt index 14c9e55..d769000 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt @@ -4,7 +4,9 @@ import android.location.Location import com.kouros.navigation.data.NavigationRepository import com.kouros.navigation.data.SearchFilter -private const val routeUrl = "https://kouros-online.de/osrm/route/v1/driving/" +//private const val routeUrl = "https://kouros-online.de/osrm/route/v1/driving/" + +private const val routeUrl = "http://192.168.1.37:5000/route/v1/driving/" class OsrmRepository : NavigationRepository() { override fun getRoute( diff --git a/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRoute.kt b/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRoute.kt index 169b1ac..0fe7f25 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRoute.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRoute.kt @@ -1,6 +1,8 @@ package com.kouros.navigation.data.osrm import com.kouros.navigation.data.Route +import com.kouros.navigation.data.route.Intersection +import com.kouros.navigation.data.route.Lane import com.kouros.navigation.data.route.Leg import com.kouros.navigation.data.route.Maneuver as RouteManeuver import com.kouros.navigation.data.route.Step @@ -13,11 +15,12 @@ class OsrmRoute { fun mapToOsrm(routeJson: OsrmResponse, builder: Route.Builder) { val waypoints = mutableListOf>() val summary = Summary() - summary.distance = routeJson.routes.first().distance!! - summary.duration = routeJson.routes.first().duration!! + summary.distance = routeJson.routes.first().distance!! / 1000 + summary.duration = routeJson.routes.first().duration!! / 1000 val steps = mutableListOf() var stepIndex = 0 routeJson.routes.first().legs.first().steps.forEach { + val intersections = mutableListOf() if (it.maneuver != null) { val points = decodePolyline(it.geometry!!, 5) waypoints.addAll(points) @@ -27,7 +30,17 @@ class OsrmRoute { type = convertType(it.maneuver!!), waypoints = points ) - val step = Step( index = stepIndex, name = it.name!!, distance = it.distance!!, duration = it.duration!!, maneuver = maneuver) + it.intersections.forEach { it2 -> + if (it2.location[0] != 0.0) { + val lanes = mutableListOf() + it2.lanes.forEach { it3 -> + val lane = Lane(it3.valid, it3.indications) + lanes.add(lane) + } + intersections.add(Intersection(it2.location, lanes)) + } + } + val step = Step( index = stepIndex, name = it.name!!, distance = it.distance!! / 1000, duration = it.duration!!, maneuver = maneuver, intersection = intersections) steps.add(step) stepIndex += 1 } @@ -58,6 +71,11 @@ class OsrmRoute { newType = androidx.car.app.navigation.model.Maneuver.TYPE_TURN_NORMAL_RIGHT } } + ManeuverType.turn.value -> { + if (maneuver.modifier == "left") { + newType = androidx.car.app.navigation.model.Maneuver.TYPE_TURN_NORMAL_LEFT + } + } } return newType } diff --git a/common/data/src/main/java/com/kouros/navigation/data/route/Intersection.kt b/common/data/src/main/java/com/kouros/navigation/data/route/Intersection.kt new file mode 100644 index 0000000..fd3ea2b --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/data/route/Intersection.kt @@ -0,0 +1,8 @@ +package com.kouros.navigation.data.route + +import java.util.Collections + +data class Intersection( + val location: ArrayList = arrayListOf(0.0, 0.0), + val lane : List = Collections.emptyList(), +) diff --git a/common/data/src/main/java/com/kouros/navigation/data/route/Lane.kt b/common/data/src/main/java/com/kouros/navigation/data/route/Lane.kt new file mode 100644 index 0000000..a8f0fb8 --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/data/route/Lane.kt @@ -0,0 +1,6 @@ +package com.kouros.navigation.data.route + +data class Lane ( + val valid: Boolean, + var indications: List, +) \ No newline at end of file diff --git a/common/data/src/main/java/com/kouros/navigation/data/route/Step.kt b/common/data/src/main/java/com/kouros/navigation/data/route/Step.kt index 75b491e..f54853d 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/route/Step.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/route/Step.kt @@ -1,10 +1,11 @@ package com.kouros.navigation.data.route -class Step( +data class Step( var index : Int = 0, var waypointIndex : Int = 0, val maneuver: Maneuver, val duration: Double = 0.0, val distance: Double = 0.0, val name : String = "", + val intersection: List = mutableListOf(), ) diff --git a/common/data/src/main/java/com/kouros/navigation/model/BaseStyleModel.kt b/common/data/src/main/java/com/kouros/navigation/model/BaseStyleModel.kt new file mode 100644 index 0000000..1c9fa68 --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/model/BaseStyleModel.kt @@ -0,0 +1,15 @@ +package com.kouros.navigation.model + +import android.content.Context +import com.kouros.data.R +import org.maplibre.compose.style.BaseStyle + +class BaseStyleModel { + fun readStyle(context: Context): BaseStyle.Json { + println("Read Style") + val liberty = context.resources.openRawResource(R.raw.liberty) + val libertyString = liberty.bufferedReader().use { it.readText() } + val baseStyle = BaseStyle.Json(libertyString) + return baseStyle + } +} \ No newline at end of file diff --git a/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt b/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt index 281eac0..4667167 100644 --- a/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt +++ b/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt @@ -12,6 +12,8 @@ import com.kouros.navigation.data.Place import com.kouros.navigation.data.Route import com.kouros.navigation.data.RouteEngine import com.kouros.navigation.data.StepData +import com.kouros.navigation.data.route.Intersection +import com.kouros.navigation.data.route.Lane import com.kouros.navigation.data.route.Leg import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue import com.kouros.navigation.utils.location @@ -37,6 +39,7 @@ open class RouteModel() { val lastSpeedLocation: Location = location(0.0, 0.0), val lastSpeedIndex: Int = 0, val maxSpeed: Int = 0, + val location: Location = location(0.0, 0.0), ) var routeState = RouteState() @@ -74,6 +77,7 @@ open class RouteModel() { @OptIn(DelicateCoroutinesApi::class) fun updateLocation(location: Location, viewModel: ViewModel) { + routeState = routeState.copy(location = location) findStep(location) updateSpeedLimit(location, viewModel) } @@ -103,6 +107,19 @@ open class RouteModel() { //println("Current Index ${route.currentStep} WayPoint: ${route.currentStep().waypointIndex}") } + private fun currentIntersection(location: Location): Intersection { + + var inter = Intersection() + var nearestDistance = 100000.0f + route.currentStep().intersection.forEach { + val distance = location.distanceTo(location(it.location[0], it.location[1])) + if (distance < nearestDistance) { + nearestDistance = distance + inter = it + } + } + return inter + } fun updateSpeedLimit(location: Location, viewModel: ViewModel) = runBlocking { CoroutineScope(Dispatchers.IO).launch { // speed limit @@ -136,26 +153,28 @@ open class RouteModel() { ManeuverType.None.value } // Get the single, correct maneuver for this state - val relevantManeuver = if (shouldAdvance) { + val relevantStep = if (shouldAdvance) { route.nextStep() // This advances the route's state } else { route.currentStep() } // Safely get the street name from the maneuver - val streetName = relevantManeuver.name + val streetName = relevantStep.name if (shouldAdvance) { - maneuverType = relevantManeuver.maneuver.type + maneuverType = relevantStep.maneuver.type } val maneuverIconPair = maneuverIcon(maneuverType) routeState = routeState.copy(maneuverType = maneuverIconPair.first) // Construct and return the final StepData object + val intersection = currentIntersection(routeState.location) return StepData( streetName, distanceToNextStep, maneuverIconPair.first, maneuverIconPair.second, arrivalTime(), - travelLeftDistance() + travelLeftDistance(), + intersection.lane ) } diff --git a/common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt b/common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt index b17b2df..86d0ac4 100644 --- a/common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt +++ b/common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt @@ -67,7 +67,7 @@ class ViewModel(private val repository: NavigationRepository) : ViewModel() { MutableLiveData() } - fun loadRecentPlace(location: Location) { + fun loadRecentPlace(location: Location, context: Context) { viewModelScope.launch(Dispatchers.IO) { try { val placeBox = boxStore.boxFor(Place::class) @@ -79,12 +79,12 @@ class ViewModel(private val repository: NavigationRepository) : ViewModel() { query.close() for (place in results) { val plLocation = location(place.longitude, place.latitude) - //val distance = repository.getRouteDistance(location, plLocation, SearchFilter()) - //place.distance = distance.toFloat() - //if (place.distance == 0F) { - recentPlace.postValue(place) + val distance = repository.getRouteDistance(location, plLocation, SearchFilter(), context) + place.distance = distance.toFloat() + if (place.distance > 1F) { + recentPlace.postValue(place) return@launch - //} + } } } catch (e: Exception) { e.printStackTrace() diff --git a/common/data/src/main/res/drawable/lanes.png b/common/data/src/main/res/drawable/lanes.png new file mode 100644 index 0000000000000000000000000000000000000000..4374cb2ff48c318b2d2a62adf6676367ebab2319 GIT binary patch literal 1041 zcmV+s1n&EZP)8adIKNTH*N$ML^ zGExmW4rWt{FMF=NgmqEIn7>tWlMI-H5ftSjx?3SP$$)mwK_|{3mbs3-guPL3)-lhu zm#`8V%m}khnYjt;<3>E3$sgR!mJ}r$re_c(oU>_{DC~3XFCeyN%cj@jb^zdW&SP$= zhZ3it6=pAqz&_Xh0%A!NWziUXWFR!V&0!6u$zUZ|G z@D!o1xs(N@5*A0R&Q(k=kr?ILUtR@HaJfg4Z)z>prjjSvl@9SSz-4HSIhmqFV3lis z0kL(EyJ1sn(aDEY_ATuq4u_z1W)q3PDA)e-S_BPdlsTJI3pzQPFRA7N@lAXp9ppI9 zM!h+aQyE23_K^roa_uj#elA4`=R7)M*Mb~}*Qf;CLtcE$z;et?UW8pyZ&nqd#9S;( zw?tr&Ykzs=Ii_OnzHw_oA9qsATl7n1mDUrJL9YGfwOQ5NmE+Zdg?Nivequq9R;`8o z<+T7~RdWZKAxK< z(}ve#Gu|ciA2+Z#IJc8awXnRrPC-$wBUemA?Gm@*ATVM{Brn|wlIGNC6Oe^E@BLLqrx75cf?CZ?}5}iSA3p@;5E#AWS z9PKg@9|Qlet|Tp2i!<LV{Z^T_sff1BJ@{)mRZmPwNI6NL_Jq{P3D7}(_X>O{;JviJN zbv<-3hH{x?V4Rz3@fZ%*MO+VE9E_qIEEO2$rdk-(;xrB)KPNGWqFm0@Qh{M^s)a!< z!a0$-q!P>AR11SzoWOqU$G+^yx-2N!+2^*v=SyPLVq+9#J@IfHiZV<18lQnlZV~}Y zp(wkEhl^3hCkMQO(a;4Rj!4^E#O>MWLD;3V+K)_MZ)!%<=RMS z=TtNtwiF51W0q?rp}<<4=RVnR9CM4~)?<}xE1}HHOiSK6*Ix2JN#Sq{0h3c{00000 LNkvXXu0mjfoFV2M literal 0 HcmV?d00001 diff --git a/common/data/src/main/java/com/kouros/navigation/data/styles/liberty.json b/common/data/src/main/res/raw/liberty.json similarity index 100% rename from common/data/src/main/java/com/kouros/navigation/data/styles/liberty.json rename to common/data/src/main/res/raw/liberty.json diff --git a/common/data/src/main/java/com/kouros/navigation/data/styles/liberty_night.json b/common/data/src/main/res/raw/liberty_night.json similarity index 100% rename from common/data/src/main/java/com/kouros/navigation/data/styles/liberty_night.json rename to common/data/src/main/res/raw/liberty_night.json diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8e780ee..a790027 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ junitVersion = "1.3.0" espressoCore = "3.7.0" kotlinxSerializationJson = "1.9.0" lifecycleRuntimeKtx = "2.10.0" -composeBom = "2025.12.00" +composeBom = "2025.12.01" appcompat = "1.7.1" material = "1.13.0" carApp = "1.7.0"