Handle other providers in isAllowedProviderSafe()

Add a case for isAllowedProviderSafe() to handle providers that are not
GPS/Passive/Network/Fused. For example, this is useful for mock
providers.

Bug: 7047435
Change-Id: If4799aa90a5338889c47582d45cbfc25772c9c53
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 2197e31..184c8d2 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -639,7 +639,27 @@
                     == PackageManager.PERMISSION_GRANTED) ||
                     (mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION)
                     == PackageManager.PERMISSION_GRANTED);
+        } else {
+            // mock providers
+            LocationProviderInterface lp = mMockProviders.get(provider);
+            if (lp != null) {
+                ProviderProperties properties = lp.getProperties();
+                if (properties != null) {
+                    if (properties.mRequiresSatellite) {
+                        // provider requiring satellites require FINE permission
+                        return mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION)
+                                == PackageManager.PERMISSION_GRANTED;
+                    } else if (properties.mRequiresNetwork || properties.mRequiresCell) {
+                        // provider requiring network and or cell require COARSE or FINE
+                        return (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION)
+                                == PackageManager.PERMISSION_GRANTED) ||
+                                (mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION)
+                                 == PackageManager.PERMISSION_GRANTED);
+                    }
+                }
+            }
         }
+
         return false;
     }