From 9e3191d16c025b44fb4a614b13e1c5b8488eb574 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Tue, 26 Oct 2010 10:01:55 -0400 Subject: Location Manager: Fix LocationManager.getBestProvider filtering. getBestProvider should only return location providers that the client has permission to use. BUG: 3124614 Change-Id: I065091d0445092563bc53fb4f7d93a1ab6bebb9a Signed-off-by: Mike Lockwood --- .../java/com/android/server/LocationManagerService.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'services/java') diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 8644ceb..10107c6 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -574,15 +574,16 @@ public class LocationManagerService extends ILocationManager.Stub implements Run || LocationManager.PASSIVE_PROVIDER.equals(provider)) && (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { - throw new SecurityException("Requires ACCESS_FINE_LOCATION permission"); + throw new SecurityException("Provider " + provider + + " requires ACCESS_FINE_LOCATION permission"); } if (LocationManager.NETWORK_PROVIDER.equals(provider) && (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) && (mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { - throw new SecurityException( - "Requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission"); + throw new SecurityException("Provider " + provider + + " requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission"); } } @@ -741,9 +742,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run private LocationProviderInterface best(List providerNames) { ArrayList providers; synchronized (mLock) { - providers = new ArrayList(mProviders.size()); - for (int i = mProviders.size() - 1; i >= 0; i--) { - providers.add(mProviders.get(i)); + providers = new ArrayList(providerNames.size()); + for (String name : providerNames) { + providers.add(mProvidersByName.get(name)); } } -- cgit v1.1