ExitNumber, Flow

This commit is contained in:
Dimitris
2026-04-05 09:22:06 +02:00
parent f4cac4361b
commit 5105d4eb9a
5 changed files with 46 additions and 5 deletions
+2 -2
View File
@@ -17,8 +17,8 @@ android {
applicationId = "com.kouros.navigation" applicationId = "com.kouros.navigation"
minSdk = 33 minSdk = 33
targetSdk = 36 targetSdk = 36
versionCode = 91 versionCode = 92
versionName = "0.2.3.91" versionName = "0.2.3.92"
base.archivesName = "navi-$versionName" base.archivesName = "navi-$versionName"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
@@ -3,6 +3,7 @@ package com.kouros.navigation.car
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.location.Location import android.location.Location
import android.location.LocationListener
import android.location.LocationManager import android.location.LocationManager
import androidx.car.app.CarContext import androidx.car.app.CarContext
import androidx.core.location.LocationListenerCompat import androidx.core.location.LocationListenerCompat
@@ -10,7 +11,9 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -59,6 +62,26 @@ class DeviceLocationManager(
} }
} }
/**
* Provides a flow of location updates from device GPS.
*
* deviceLocationManager.locationFlow().asLiveData().observe(this, ::updateLocation2)
*
* @return Flow emitting location updates
*/
@SuppressLint("MissingPermission")
fun locationFlow(): Flow<Location> = callbackFlow {
val listener = LocationListener { location ->
if (shouldUseDeviceLocation && isListening) {
trySend(location) // Emit the location update to the flow
}
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 5f, listener)
awaitClose {
locationManager.removeUpdates(listener) // Unregister listener on cancellation
}
}
/** /**
* Starts requesting location updates from device GPS. * Starts requesting location updates from device GPS.
* Provides initial location via callback and then starts continuous updates. * Provides initial location via callback and then starts continuous updates.
@@ -4,7 +4,6 @@ import android.os.CountDownTimer
import android.os.Handler import android.os.Handler
import android.util.Log import android.util.Log
import androidx.car.app.CarContext import androidx.car.app.CarContext
import androidx.car.app.CarToast
import androidx.car.app.Screen import androidx.car.app.Screen
import androidx.car.app.model.Action import androidx.car.app.model.Action
import androidx.car.app.model.Action.FLAG_IS_PERSISTENT import androidx.car.app.model.Action.FLAG_IS_PERSISTENT
@@ -21,7 +20,6 @@ import androidx.car.app.navigation.model.Destination
import androidx.car.app.navigation.model.MapWithContentTemplate import androidx.car.app.navigation.model.MapWithContentTemplate
import androidx.car.app.navigation.model.MessageInfo import androidx.car.app.navigation.model.MessageInfo
import androidx.car.app.navigation.model.NavigationTemplate import androidx.car.app.navigation.model.NavigationTemplate
import androidx.car.app.navigation.model.PanModeListener
import androidx.car.app.navigation.model.RoutingInfo import androidx.car.app.navigation.model.RoutingInfo
import androidx.car.app.navigation.model.Step import androidx.car.app.navigation.model.Step
import androidx.car.app.navigation.model.TravelEstimate import androidx.car.app.navigation.model.TravelEstimate
@@ -100,6 +98,7 @@ open class NavigationScreen(
repository.tripSuggestionFlow.asLiveData().observe(this, Observer { repository.tripSuggestionFlow.asLiveData().observe(this, Observer {
navigationViewModel.recentPlaces.observe(this, observerRecentPlaces) navigationViewModel.recentPlaces.observe(this, observerRecentPlaces)
//navigationViewModel.recentPlacesFlow(carContext, surfaceRenderer.lastLocation ).asLiveData().observe(this, ::test)
tripSuggestion = it tripSuggestion = it
}) })
repository.alternativeRoutesFlow.asLiveData().observe(this, Observer { repository.alternativeRoutesFlow.asLiveData().observe(this, Observer {
@@ -221,6 +221,10 @@ private fun exitNumber(
) { ) {
0 0
} else { } else {
try {
instruction.exitNumber.toInt() instruction.exitNumber.toInt()
} catch (e: NumberFormatException) {
0
}
} }
} }
@@ -3,6 +3,8 @@ package com.kouros.navigation.model
//import com.kouros.navigation.data.Preferences.boxStore //import com.kouros.navigation.data.Preferences.boxStore
import android.content.Context import android.content.Context
import android.location.Location import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.compose.runtime.toMutableStateList import androidx.compose.runtime.toMutableStateList
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
@@ -22,6 +24,9 @@ import com.kouros.navigation.utils.Levenshtein
import com.kouros.navigation.utils.getSettingsRepository import com.kouros.navigation.utils.getSettingsRepository
import com.kouros.navigation.utils.location import com.kouros.navigation.utils.location
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@@ -102,6 +107,16 @@ class NavigationViewModel(private val repository: NavigationRepository) : ViewMo
} }
val gson: com.google.gson.Gson = GsonBuilder().create() val gson: com.google.gson.Gson = GsonBuilder().create()
/**
* Retrieves recent places from Preferences as a Flow.
*/
fun recentPlacesFlow(context: Context, location: Location,): Flow<Place> = callbackFlow {
for (place in recentPlaces.value!!) {
trySend(place)
}
awaitClose {
}
}
/** /**
* Loads all recent places from Preferences and calculates distances. * Loads all recent places from Preferences and calculates distances.