do not request location from unavailable providers

This commit prevents a system_server crash when applications attempt
to use the fused location provider on systems that do not have a
network location provider available.

Bug: 10845061
Change-Id: I85b33806e05566e8b68ee2ccc401b1c565fd7b9a
diff --git a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
index 4ba6c34..7cee066 100644
--- a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
+++ b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
@@ -131,14 +131,16 @@
     private void enableProvider(String name, long minTime) {
         ProviderStats stats = mStats.get(name);
 
-        if (!stats.requested) {
-            stats.requestTime = SystemClock.elapsedRealtime();
-            stats.requested = true;
-            stats.minTime = minTime;
-            mLocationManager.requestLocationUpdates(name, minTime, 0, this, mLooper);
-        } else if (stats.minTime != minTime) {
-            stats.minTime = minTime;
-            mLocationManager.requestLocationUpdates(name, minTime, 0, this, mLooper);
+        if (stats.available) {
+            if (!stats.requested) {
+                stats.requestTime = SystemClock.elapsedRealtime();
+                stats.requested = true;
+                stats.minTime = minTime;
+                mLocationManager.requestLocationUpdates(name, minTime, 0, this, mLooper);
+            } else if (stats.minTime != minTime) {
+                stats.minTime = minTime;
+                mLocationManager.requestLocationUpdates(name, minTime, 0, this, mLooper);
+            }
         }
     }
 
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 3e8770e..8f480dd 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -1473,7 +1473,7 @@
                 + " " + name + " " + request + " from " + packageName + "(" + uid + ")");
         LocationProviderInterface provider = mProvidersByName.get(name);
         if (provider == null) {
-            throw new IllegalArgumentException("provider doesn't exist: " + provider);
+            throw new IllegalArgumentException("provider doesn't exist: " + name);
         }
 
         UpdateRecord record = new UpdateRecord(name, request, receiver);