From 2af855260ce842e62ca0462823a7466d13c2eecd Mon Sep 17 00:00:00 2001
From: Guillaume Jacquart <guillaume.jacquart-ext@mousquetaires.com>
Date: Mon, 21 Nov 2022 23:10:30 +0100
Subject: 6055: handle missing location providers.

---
 .../domain/usecases/FakeLocationStateUseCase.kt    | 45 +++++++++++++---------
 1 file changed, 27 insertions(+), 18 deletions(-)

(limited to 'app/src/main/java/foundation')

diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt
index 2910f26..0ff2edb 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt
@@ -174,25 +174,34 @@ class FakeLocationStateUseCase(
     }
 
     private fun requestLocationUpdates() {
+        val networkProvider = LocationManager.NETWORK_PROVIDER
+            .takeIf { it in locationManager.allProviders }
+        val gpsProvider = LocationManager.GPS_PROVIDER
+            .takeIf { it in locationManager.allProviders }
+
         try {
-            locationManager.requestLocationUpdates(
-                LocationManager.NETWORK_PROVIDER,
-                1000L,
-                0f,
-                localListener
-            )
-            locationManager.requestLocationUpdates(
-                LocationManager.GPS_PROVIDER,
-                1000L,
-                0f,
-                localListener
-
-            )
-
-            locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
-                ?: locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)?.let {
-                    localListener.onLocationChanged(it)
-                }
+            networkProvider?.let {
+                locationManager.requestLocationUpdates(
+                    it,
+                    1000L,
+                    0f,
+                    localListener
+                )
+            }
+            gpsProvider?.let {
+                locationManager.requestLocationUpdates(
+                    it,
+                    1000L,
+                    0f,
+                    localListener
+                )
+            }
+
+            networkProvider?.let { locationManager.getLastKnownLocation(it) }
+                ?: gpsProvider?.let { locationManager.getLastKnownLocation(it) }
+                    ?.let {
+                        localListener.onLocationChanged(it)
+                    }
         } catch (se: SecurityException) {
             Log.e(TAG, "Missing permission", se)
         }
-- 
cgit v1.2.1