summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/LocationManagerService.java
diff options
context:
space:
mode:
authorVictoria Lease <violets@google.com>2013-01-08 09:39:50 -0800
committerVictoria Lease <violets@google.com>2013-01-22 09:39:47 -0800
commit54ca7aef2e12b240caa6fb1a1e65abd234bea337 (patch)
tree162f4680a75081bbfe363a6c48a3d97367d4bd43 /services/java/com/android/server/LocationManagerService.java
parentf25febf01453733e8bdd1ac241ecd9d3bcbef475 (diff)
Annotate Locations coming from mock providers
LocationManagerService now annotates incoming Location objects that have come from mock location providers. The new isFromMockProvider() method can be called on any Location to determine whether the provider that supplied the Location was a mock location provider. Bug: 6813235 Change-Id: Ib5140e93ea427f2e0b0036151047f87a02b4d23a
Diffstat (limited to 'services/java/com/android/server/LocationManagerService.java')
-rw-r--r--services/java/com/android/server/LocationManagerService.java22
1 files changed, 19 insertions, 3 deletions
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index b351fc296fbe..7218a280e2e8 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -1784,17 +1784,33 @@ public class LocationManagerService extends ILocationManager.Stub {
}
}
+ private boolean isMockProvider(String provider) {
+ synchronized (mLock) {
+ return mMockProviders.containsKey(provider);
+ }
+ }
+
private void handleLocationChanged(Location location, boolean passive) {
- String provider = location.getProvider();
+ // create a working copy of the incoming Location so that the service can modify it without
+ // disturbing the caller's copy
+ Location myLocation = new Location(location);
+ String provider = myLocation.getProvider();
+
+ // set "isFromMockProvider" bit if location came from a mock provider. we do not clear this
+ // bit if location did not come from a mock provider because passive/fused providers can
+ // forward locations from mock providers, and should not grant them legitimacy in doing so.
+ if (!myLocation.isFromMockProvider() && isMockProvider(provider)) {
+ myLocation.setIsFromMockProvider(true);
+ }
if (!passive) {
// notify passive provider of the new location
- mPassiveProvider.updateLocation(location);
+ mPassiveProvider.updateLocation(myLocation);
}
synchronized (mLock) {
if (isAllowedBySettingsLocked(provider, mCurrentUserId)) {
- handleLocationChangedLocked(location, passive);
+ handleLocationChangedLocked(myLocation, passive);
}
}
}