From 49c2fb34948de0b0d31b254606221fa0d147f3ed Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Tue, 27 Sep 2022 23:04:43 +0200 Subject: [PATCH] Android Auto location fixes --- .../java/net/vonforst/evmap/auto/MapScreen.kt | 31 +++++++++++-------- .../vonforst/evmap/location/LocationEngine.kt | 4 ++- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt index 8f47fd4e..8806f19a 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt @@ -108,8 +108,6 @@ class MapScreen(ctx: CarContext, val session: EVMapSession) : } override fun onGetTemplate(): Template { - session.requestLocationUpdates() - session.mapScreen = this return PlaceListMapTemplate.Builder().apply { setTitle( @@ -123,17 +121,23 @@ class MapScreen(ctx: CarContext, val session: EVMapSession) : } ) ) - searchLocation?.let { - setAnchor(Place.Builder(CarLocation.create(it.latitude, it.longitude)).apply { - if (prefs.placeSearchResultAndroidAutoName != null) { - setMarker( - PlaceMarker.Builder() - .setColor(CarColor.PRIMARY) - .build() - ) - } - }.build()) - } ?: setLoading(true) + if (prefs.placeSearchResultAndroidAutoName != null) { + searchLocation?.let { + setAnchor(Place.Builder(CarLocation.create(it.latitude, it.longitude)).apply { + if (prefs.placeSearchResultAndroidAutoName != null) { + setMarker( + PlaceMarker.Builder() + .setColor(CarColor.PRIMARY) + .build() + ) + } + }.build()) + } ?: setLoading(true) + } else { + location?.let { + setAnchor(Place.Builder(CarLocation.create(it.latitude, it.longitude)).build()) + } ?: setLoading(true) + } chargers?.take(maxRows)?.let { chargerList -> val builder = ItemList.Builder() // only show the city if not all chargers are in the same city @@ -421,6 +425,7 @@ class MapScreen(ctx: CarContext, val session: EVMapSession) : override fun onStart(owner: LifecycleOwner) { setupListeners() + session.requestLocationUpdates() // Reloading chargers in onStart does not seem to count towards content limit. // So let's do this so the user gets fresh chargers when re-entering the app. diff --git a/app/src/main/java/net/vonforst/evmap/location/LocationEngine.kt b/app/src/main/java/net/vonforst/evmap/location/LocationEngine.kt index ef35b046..310ad12c 100644 --- a/app/src/main/java/net/vonforst/evmap/location/LocationEngine.kt +++ b/app/src/main/java/net/vonforst/evmap/location/LocationEngine.kt @@ -26,7 +26,9 @@ abstract class LocationEngine(protected val context: Context) { */ @RequiresPermission(anyOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION]) fun requestLocationUpdates(priority: Priority, intervalMs: Long, listener: LocationListener) { - requests.add(LocationRequest(priority, intervalMs, listener)) + if (!requests.any { it.listener == listener }) { + requests.add(LocationRequest(priority, intervalMs, listener)) + } enable() }