OSDN Git Service

Revert "make FLP play nicely with multiuser"
authorVictoria Lease <violets@google.com>
Mon, 29 Oct 2012 15:25:39 +0000 (08:25 -0700)
committerVictoria Lease <violets@google.com>
Mon, 29 Oct 2012 15:26:54 +0000 (08:26 -0700)
This reverts commit e5601ce9bfa4effbddb84186f0fe1bfe4ad50301

Change-Id: Icd12f2d2c18f2eeeb2c367a885fb6d170ce426ae

services/java/com/android/server/LocationManagerService.java

index eb833eb..37dee19 100644 (file)
@@ -405,9 +405,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
             mLastLocation.clear();
             for (LocationProviderInterface p : mProviders) {
                 updateProviderListenersLocked(p.getName(), false, mCurrentUserId);
-                if (!LocationManager.FUSED_PROVIDER.equals(p.getName())) {
-                    p.switchUser(userId);
-                }
+                p.switchUser(userId);
             }
             mCurrentUserId = userId;
             updateProvidersLocked();
@@ -666,27 +664,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
         mProvidersByName.remove(provider.getName());
     }
 
-    /**
-     * Returns true if the specified UID is SYSTEM_UID or matches the current user.
-     *
-     * @param uid the uid
-     * @return true if uid is SYSTEM_UID or matches the current user
-     */
-    private boolean isCurrentUserOrSystemLocked(int uid) {
-        return uid == Process.SYSTEM_UID || UserHandle.getUserId(uid) == mCurrentUserId;
-    }
-
-    /**
-     * Returns the first UID in the current user's range.
-     *
-     * @return the first UID in the current user's range
-     */
-    private int getCurrentUidBaseLocked() {
-        return UserHandle.getUid(mCurrentUserId, 0);
-    }
 
-    private boolean isAllowedBySettingsLocked(String provider, int uid) {
-        if (!isCurrentUserOrSystemLocked(uid)) {
+    private boolean isAllowedBySettingsLocked(String provider, int userId) {
+        if (userId != mCurrentUserId) {
             return false;
         }
         if (mEnabledProviders.contains(provider)) {
@@ -695,10 +675,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
         if (mDisabledProviders.contains(provider)) {
             return false;
         }
-        if (uid == Process.SYSTEM_UID) {
-            return true;
-        }
-
         // Use system settings
         ContentResolver resolver = mContext.getContentResolver();
 
@@ -852,8 +828,8 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
     public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
         int allowedResolutionLevel = getCallerAllowedResolutionLevel();
         ArrayList<String> out;
-        final int callingUid = Binder.getCallingUid();
-        final long identity = Binder.clearCallingIdentity();
+        int callingUserId = UserHandle.getCallingUserId();
+        long identity = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
                 out = new ArrayList<String>(mProviders.size());
@@ -863,7 +839,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                         continue;
                     }
                     if (allowedResolutionLevel >= getMinimumResolutionLevelForProviderUse(name)) {
-                        if (enabledOnly && !isAllowedBySettingsLocked(name, callingUid)) {
+                        if (enabledOnly && !isAllowedBySettingsLocked(name, callingUserId)) {
                             continue;
                         }
                         if (criteria != null && !LocationProvider.propertiesMeetCriteria(
@@ -939,7 +915,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
             LocationProviderInterface p = mProviders.get(i);
             boolean isEnabled = p.isEnabled();
             String name = p.getName();
-            boolean shouldBeEnabled = isAllowedBySettingsLocked(name, getCurrentUidBaseLocked());
+            boolean shouldBeEnabled = isAllowedBySettingsLocked(name, mCurrentUserId);
             if (isEnabled && !shouldBeEnabled) {
                 updateProviderListenersLocked(name, false, mCurrentUserId);
                 changesMade = true;
@@ -967,7 +943,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
             final int N = records.size();
             for (int i = 0; i < N; i++) {
                 UpdateRecord record = records.get(i);
-                if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
+                if (UserHandle.getUserId(record.mReceiver.mUid) == userId) {
                     // Sends a notification message to the receiver
                     if (!record.mReceiver.callProviderEnabledLocked(provider, enabled)) {
                         if (deadReceivers == null) {
@@ -1006,7 +982,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
 
         if (records != null) {
             for (UpdateRecord record : records) {
-                if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
+                if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
                     LocationRequest locationRequest = record.mRequest;
                     providerRequest.locationRequests.add(locationRequest);
                     if (locationRequest.getInterval() < providerRequest.interval) {
@@ -1024,7 +1000,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                 // under that threshold.
                 long thresholdInterval = (providerRequest.interval + 1000) * 3 / 2;
                 for (UpdateRecord record : records) {
-                    if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
+                    if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
                         LocationRequest locationRequest = record.mRequest;
                         if (locationRequest.getInterval() <= thresholdInterval) {
                             worksource.add(record.mReceiver.mUid);
@@ -1247,7 +1223,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
             oldRecord.disposeLocked(false);
         }
 
-        boolean isProviderEnabled = isAllowedBySettingsLocked(name, uid);
+        boolean isProviderEnabled = isAllowedBySettingsLocked(name, UserHandle.getUserId(uid));
         if (isProviderEnabled) {
             applyRequirementsLocked(name);
         } else {
@@ -1302,10 +1278,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
         }
 
         // update provider
-        int currentUidBase = getCurrentUidBaseLocked();
         for (String provider : providers) {
             // If provider is already disabled, don't need to do anything
-            if (!isAllowedBySettingsLocked(provider, currentUidBase)) {
+            if (!isAllowedBySettingsLocked(provider, mCurrentUserId)) {
                 continue;
             }
 
@@ -1323,8 +1298,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                 request.getProvider());
         // no need to sanitize this request, as only the provider name is used
 
-        final int callingUid = Binder.getCallingUid();
-        final long identity = Binder.clearCallingIdentity();
+        long identity = Binder.clearCallingIdentity();
         try {
             if (mBlacklist.isBlacklisted(packageName)) {
                 if (D) Log.d(TAG, "not returning last loc for blacklisted app: " +
@@ -1340,9 +1314,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                 LocationProviderInterface provider = mProvidersByName.get(name);
                 if (provider == null) return null;
 
-                if (!isAllowedBySettingsLocked(name, callingUid)) {
-                    return null;
-                }
+                if (!isAllowedBySettingsLocked(name, mCurrentUserId)) return null;
 
                 Location location = mLastLocation.get(name);
                 if (location == null) {
@@ -1499,14 +1471,13 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                 provider);
         if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;
 
-        final int callingUid = Binder.getCallingUid();
-        final long identity = Binder.clearCallingIdentity();
+        long identity = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
                 LocationProviderInterface p = mProvidersByName.get(provider);
                 if (p == null) return false;
 
-                return isAllowedBySettingsLocked(provider, callingUid);
+                return isAllowedBySettingsLocked(provider, mCurrentUserId);
             }
         } finally {
             Binder.restoreCallingIdentity(identity);
@@ -1645,10 +1616,10 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
             Receiver receiver = r.mReceiver;
             boolean receiverDead = false;
 
-            final int receiverUid = receiver.mUid;
-            if (!isCurrentUserOrSystemLocked(receiverUid)) {
+            int receiverUserId = UserHandle.getUserId(receiver.mUid);
+            if (receiverUserId != mCurrentUserId) {
                 if (D) {
-                    Log.d(TAG, "skipping loc update for background uid " + receiverUid +
+                    Log.d(TAG, "skipping loc update for background user " + receiverUserId +
                             " (current user: " + mCurrentUserId + ", app: " +
                             receiver.mPackageName + ")");
                 }
@@ -1745,7 +1716,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
         }
 
         synchronized (mLock) {
-            if (isAllowedBySettingsLocked(provider, getCurrentUidBaseLocked())) {
+            if (isAllowedBySettingsLocked(provider, mCurrentUserId)) {
                 handleLocationChangedLocked(location, passive);
             }
         }