diff options
Diffstat (limited to 'services/java/com/android/server/LocationManagerService.java')
-rw-r--r-- | services/java/com/android/server/LocationManagerService.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 62f996558bc1..78699fb10951 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -221,6 +221,16 @@ public class LocationManagerService extends ILocationManager.Stub { mBlacklist.init(); mGeofenceManager = new GeofenceManager(mContext, mBlacklist); + // Monitor for app ops mode changes. + AppOpsManager.Callback callback = new AppOpsManager.Callback() { + public void opChanged(int op, String packageName) { + synchronized (mLock) { + applyAllProviderRequirementsLocked(); + } + } + }; + mAppOps.startWatchingMode(AppOpsManager.OP_COARSE_LOCATION, null, callback); + // prepare providers loadProvidersLocked(); updateProvidersLocked(); @@ -1335,6 +1345,17 @@ public class LocationManagerService extends ILocationManager.Stub { } } + private void applyAllProviderRequirementsLocked() { + for (LocationProviderInterface p : mProviders) { + // If provider is already disabled, don't need to do anything + if (!isAllowedBySettingsLocked(p.getName(), UserHandle.getUid(mCurrentUserId, 0))) { + continue; + } + + applyRequirementsLocked(p.getName()); + } + } + @Override public Location getLastLocation(LocationRequest request, String packageName) { if (D) Log.d(TAG, "getLastLocation: " + request); |