From a8c251f6f5a951c571b07d674bcedff4dee20a25 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sat, 29 Jan 2022 08:51:30 +0100 Subject: [PATCH] Avoid taking into account any provider location if we have gps location. --- .../app/features/location/LocationTracker.kt | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt b/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt index d1f06c9d51..bf59a08119 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt @@ -56,13 +56,19 @@ class LocationTracker @Inject constructor( locationManager.allProviders .takeIf { it.isNotEmpty() } + // Take GPS first + ?.sortedByDescending { if (it == LocationManager.GPS_PROVIDER) 1 else 0 } ?.forEach { provider -> Timber.d("## LocationTracker. track location using $provider") // Send last known location without waiting location updates locationManager.getLastKnownLocation(provider)?.let { lastKnownLocation -> - Timber.d("## LocationTracker. lastKnownLocation") - callback?.onLocationUpdate(lastKnownLocation.toLocationData()) + if (BuildConfig.LOW_PRIVACY_LOG_ENABLE) { + Timber.d("## LocationTracker. lastKnownLocation: $lastKnownLocation") + } else { + Timber.d("## LocationTracker. lastKnownLocation") + } + onLocationChanged(lastKnownLocation) } locationManager.requestLocationUpdates( @@ -91,10 +97,21 @@ class LocationTracker @Inject constructor( } else { Timber.d("## LocationTracker. onLocationChanged") } - if (location.provider != LocationManager.GPS_PROVIDER && hasGpsProviderLocation) { - // Ignore this update - Timber.d("## LocationTracker. ignoring location from ${location.provider}, we have gps location") - return + notifyLocation(location) + } + + private fun notifyLocation(location: Location) { + when (location.provider) { + LocationManager.GPS_PROVIDER -> { + hasGpsProviderLocation = true + } + else -> { + if (hasGpsProviderLocation) { + // Ignore this update + Timber.d("## LocationTracker. ignoring location from ${location.provider}, we have gps location") + return + } + } } callback?.onLocationUpdate(location.toLocationData()) }