summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/LocationManagerService.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/LocationManagerService.java')
-rw-r--r--services/java/com/android/server/LocationManagerService.java21
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);