diff options
author | Victoria Lease <violets@google.com> | 2013-01-08 09:39:50 -0800 |
---|---|---|
committer | Victoria Lease <violets@google.com> | 2013-01-22 09:39:47 -0800 |
commit | 54ca7aef2e12b240caa6fb1a1e65abd234bea337 (patch) | |
tree | 162f4680a75081bbfe363a6c48a3d97367d4bd43 /services/java/com/android/server/LocationManagerService.java | |
parent | f25febf01453733e8bdd1ac241ecd9d3bcbef475 (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.java | 22 |
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); } } } |