diff options
Diffstat (limited to 'services/java/com/android/server/LocationManagerService.java')
| -rw-r--r-- | services/java/com/android/server/LocationManagerService.java | 69 |
1 files changed, 20 insertions, 49 deletions
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index eb833eb..37dee19 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -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); } } |
