Fix bug where location provider fails on secondary users.
Bug: 12592045

Change-Id: I196b8621c7f61c3492ad29ae90b608304dc29d66
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index e54e5d0..11fc941 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -1847,10 +1847,10 @@
             return true;
         }
         if (mGeocodeProvider != null) {
-            if (doesPackageHaveUid(uid, mGeocodeProvider.getConnectedPackageName())) return true;
+            if (doesUidHavePackage(uid, mGeocodeProvider.getConnectedPackageName())) return true;
         }
         for (LocationProviderProxy proxy : mProxyProviders) {
-            if (doesPackageHaveUid(uid, proxy.getConnectedPackageName())) return true;
+            if (doesUidHavePackage(uid, proxy.getConnectedPackageName())) return true;
         }
         return false;
     }
@@ -1876,19 +1876,23 @@
                 "or UID of a currently bound location provider");
     }
 
-    private boolean doesPackageHaveUid(int uid, String packageName) {
+    /**
+     * Returns true if the given package belongs to the given uid.
+     */
+    private boolean doesUidHavePackage(int uid, String packageName) {
         if (packageName == null) {
             return false;
         }
-        try {
-            ApplicationInfo appInfo = mPackageManager.getApplicationInfo(packageName, 0);
-            if (appInfo.uid != uid) {
-                return false;
-            }
-        } catch (NameNotFoundException e) {
+        String[] packageNames = mPackageManager.getPackagesForUid(uid);
+        if (packageNames == null) {
             return false;
         }
-        return true;
+        for (String name : packageNames) {
+            if (packageName.equals(name)) {
+                return true;
+            }
+        }
+        return false;
     }
 
     @Override