Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b7a0d00 authored by Nick Pelly's avatar Nick Pelly
Browse files

Fix addGeofence() and addProximityAlert().

Need to clear the callers identity before calling into geofence manager
because it in turn calls fused location API's.

Change-Id: I7993b0b8b2a947ff93c37a7c9d29ca0e7c95f9a8
parent 4035f5a7
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -968,7 +968,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs
        final int uid = Binder.getCallingUid();
        Receiver recevier = checkListenerOrIntent(listener, intent, pid, uid, packageName);

        // so wakelock calls will succeed (not totally sure this is still needed)
        // providers may use public location API's, need to clear identity
        long identity = Binder.clearCallingIdentity();
        try {
            synchronized (mLock) {
@@ -1018,7 +1018,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs
        final int uid = Binder.getCallingUid();
        Receiver receiver = checkListenerOrIntent(listener, intent, pid, uid, packageName);

        // so wakelock calls will succeed (not totally sure this is still needed)
        // providers may use public location API's, need to clear identity
        long identity = Binder.clearCallingIdentity();
        try {
            synchronized (mLock) {
@@ -1107,7 +1107,14 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs

        if (D) Log.d(TAG, "requestGeofence: " + request + " " + geofence + " " + intent);

        mGeofenceManager.addFence(request, geofence, intent, Binder.getCallingUid(), packageName);
        // geo-fence manager uses the public location API, need to clear identity
        int uid = Binder.getCallingUid();
        long identity = Binder.clearCallingIdentity();
        try {
            mGeofenceManager.addFence(request, geofence, intent, uid, packageName);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    @Override
@@ -1118,7 +1125,13 @@ public class LocationManagerService extends ILocationManager.Stub implements Obs

        if (D) Log.d(TAG, "removeGeofence: " + geofence + " " + intent);

        // geo-fence manager uses the public location API, need to clear identity
        long identity = Binder.clearCallingIdentity();
        try {
            mGeofenceManager.removeFence(geofence, intent);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }