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
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 69ae833..8a564f7 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -968,7 +968,7 @@
         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 @@
         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 @@
 
         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 @@
 
         if (D) Log.d(TAG, "removeGeofence: " + geofence + " " + intent);
 
-        mGeofenceManager.removeFence(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);
+        }
     }