Skip to content

Commit 269518e

Browse files
author
Victoria Lease
committed
Revert "make FLP play nicely with multiuser"
This reverts commit e5601ce Change-Id: Icd12f2d2c18f2eeeb2c367a885fb6d170ce426ae
1 parent dbcec90 commit 269518e

File tree

1 file changed

+20
-49
lines changed

1 file changed

+20
-49
lines changed

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

Lines changed: 20 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,7 @@ private void switchUser(int userId) {
405405
mLastLocation.clear();
406406
for (LocationProviderInterface p : mProviders) {
407407
updateProviderListenersLocked(p.getName(), false, mCurrentUserId);
408-
if (!LocationManager.FUSED_PROVIDER.equals(p.getName())) {
409-
p.switchUser(userId);
410-
}
408+
p.switchUser(userId);
411409
}
412410
mCurrentUserId = userId;
413411
updateProvidersLocked();
@@ -666,27 +664,9 @@ private void removeProviderLocked(LocationProviderInterface provider) {
666664
mProvidersByName.remove(provider.getName());
667665
}
668666

669-
/**
670-
* Returns true if the specified UID is SYSTEM_UID or matches the current user.
671-
*
672-
* @param uid the uid
673-
* @return true if uid is SYSTEM_UID or matches the current user
674-
*/
675-
private boolean isCurrentUserOrSystemLocked(int uid) {
676-
return uid == Process.SYSTEM_UID || UserHandle.getUserId(uid) == mCurrentUserId;
677-
}
678-
679-
/**
680-
* Returns the first UID in the current user's range.
681-
*
682-
* @return the first UID in the current user's range
683-
*/
684-
private int getCurrentUidBaseLocked() {
685-
return UserHandle.getUid(mCurrentUserId, 0);
686-
}
687667

688-
private boolean isAllowedBySettingsLocked(String provider, int uid) {
689-
if (!isCurrentUserOrSystemLocked(uid)) {
668+
private boolean isAllowedBySettingsLocked(String provider, int userId) {
669+
if (userId != mCurrentUserId) {
690670
return false;
691671
}
692672
if (mEnabledProviders.contains(provider)) {
@@ -695,10 +675,6 @@ private boolean isAllowedBySettingsLocked(String provider, int uid) {
695675
if (mDisabledProviders.contains(provider)) {
696676
return false;
697677
}
698-
if (uid == Process.SYSTEM_UID) {
699-
return true;
700-
}
701-
702678
// Use system settings
703679
ContentResolver resolver = mContext.getContentResolver();
704680

@@ -852,8 +828,8 @@ public List<String> getAllProviders() {
852828
public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
853829
int allowedResolutionLevel = getCallerAllowedResolutionLevel();
854830
ArrayList<String> out;
855-
final int callingUid = Binder.getCallingUid();
856-
final long identity = Binder.clearCallingIdentity();
831+
int callingUserId = UserHandle.getCallingUserId();
832+
long identity = Binder.clearCallingIdentity();
857833
try {
858834
synchronized (mLock) {
859835
out = new ArrayList<String>(mProviders.size());
@@ -863,7 +839,7 @@ public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
863839
continue;
864840
}
865841
if (allowedResolutionLevel >= getMinimumResolutionLevelForProviderUse(name)) {
866-
if (enabledOnly && !isAllowedBySettingsLocked(name, callingUid)) {
842+
if (enabledOnly && !isAllowedBySettingsLocked(name, callingUserId)) {
867843
continue;
868844
}
869845
if (criteria != null && !LocationProvider.propertiesMeetCriteria(
@@ -939,7 +915,7 @@ private void updateProvidersLocked() {
939915
LocationProviderInterface p = mProviders.get(i);
940916
boolean isEnabled = p.isEnabled();
941917
String name = p.getName();
942-
boolean shouldBeEnabled = isAllowedBySettingsLocked(name, getCurrentUidBaseLocked());
918+
boolean shouldBeEnabled = isAllowedBySettingsLocked(name, mCurrentUserId);
943919
if (isEnabled && !shouldBeEnabled) {
944920
updateProviderListenersLocked(name, false, mCurrentUserId);
945921
changesMade = true;
@@ -967,7 +943,7 @@ private void updateProviderListenersLocked(String provider, boolean enabled, int
967943
final int N = records.size();
968944
for (int i = 0; i < N; i++) {
969945
UpdateRecord record = records.get(i);
970-
if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
946+
if (UserHandle.getUserId(record.mReceiver.mUid) == userId) {
971947
// Sends a notification message to the receiver
972948
if (!record.mReceiver.callProviderEnabledLocked(provider, enabled)) {
973949
if (deadReceivers == null) {
@@ -1006,7 +982,7 @@ private void applyRequirementsLocked(String provider) {
1006982

1007983
if (records != null) {
1008984
for (UpdateRecord record : records) {
1009-
if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
985+
if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
1010986
LocationRequest locationRequest = record.mRequest;
1011987
providerRequest.locationRequests.add(locationRequest);
1012988
if (locationRequest.getInterval() < providerRequest.interval) {
@@ -1024,7 +1000,7 @@ private void applyRequirementsLocked(String provider) {
10241000
// under that threshold.
10251001
long thresholdInterval = (providerRequest.interval + 1000) * 3 / 2;
10261002
for (UpdateRecord record : records) {
1027-
if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
1003+
if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
10281004
LocationRequest locationRequest = record.mRequest;
10291005
if (locationRequest.getInterval() <= thresholdInterval) {
10301006
worksource.add(record.mReceiver.mUid);
@@ -1247,7 +1223,7 @@ private void requestLocationUpdatesLocked(LocationRequest request, Receiver rece
12471223
oldRecord.disposeLocked(false);
12481224
}
12491225

1250-
boolean isProviderEnabled = isAllowedBySettingsLocked(name, uid);
1226+
boolean isProviderEnabled = isAllowedBySettingsLocked(name, UserHandle.getUserId(uid));
12511227
if (isProviderEnabled) {
12521228
applyRequirementsLocked(name);
12531229
} else {
@@ -1302,10 +1278,9 @@ private void removeUpdatesLocked(Receiver receiver) {
13021278
}
13031279

13041280
// update provider
1305-
int currentUidBase = getCurrentUidBaseLocked();
13061281
for (String provider : providers) {
13071282
// If provider is already disabled, don't need to do anything
1308-
if (!isAllowedBySettingsLocked(provider, currentUidBase)) {
1283+
if (!isAllowedBySettingsLocked(provider, mCurrentUserId)) {
13091284
continue;
13101285
}
13111286

@@ -1323,8 +1298,7 @@ public Location getLastLocation(LocationRequest request, String packageName) {
13231298
request.getProvider());
13241299
// no need to sanitize this request, as only the provider name is used
13251300

1326-
final int callingUid = Binder.getCallingUid();
1327-
final long identity = Binder.clearCallingIdentity();
1301+
long identity = Binder.clearCallingIdentity();
13281302
try {
13291303
if (mBlacklist.isBlacklisted(packageName)) {
13301304
if (D) Log.d(TAG, "not returning last loc for blacklisted app: " +
@@ -1340,9 +1314,7 @@ public Location getLastLocation(LocationRequest request, String packageName) {
13401314
LocationProviderInterface provider = mProvidersByName.get(name);
13411315
if (provider == null) return null;
13421316

1343-
if (!isAllowedBySettingsLocked(name, callingUid)) {
1344-
return null;
1345-
}
1317+
if (!isAllowedBySettingsLocked(name, mCurrentUserId)) return null;
13461318

13471319
Location location = mLastLocation.get(name);
13481320
if (location == null) {
@@ -1499,14 +1471,13 @@ public boolean isProviderEnabled(String provider) {
14991471
provider);
15001472
if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;
15011473

1502-
final int callingUid = Binder.getCallingUid();
1503-
final long identity = Binder.clearCallingIdentity();
1474+
long identity = Binder.clearCallingIdentity();
15041475
try {
15051476
synchronized (mLock) {
15061477
LocationProviderInterface p = mProvidersByName.get(provider);
15071478
if (p == null) return false;
15081479

1509-
return isAllowedBySettingsLocked(provider, callingUid);
1480+
return isAllowedBySettingsLocked(provider, mCurrentUserId);
15101481
}
15111482
} finally {
15121483
Binder.restoreCallingIdentity(identity);
@@ -1645,10 +1616,10 @@ private void handleLocationChangedLocked(Location location, boolean passive) {
16451616
Receiver receiver = r.mReceiver;
16461617
boolean receiverDead = false;
16471618

1648-
final int receiverUid = receiver.mUid;
1649-
if (!isCurrentUserOrSystemLocked(receiverUid)) {
1619+
int receiverUserId = UserHandle.getUserId(receiver.mUid);
1620+
if (receiverUserId != mCurrentUserId) {
16501621
if (D) {
1651-
Log.d(TAG, "skipping loc update for background uid " + receiverUid +
1622+
Log.d(TAG, "skipping loc update for background user " + receiverUserId +
16521623
" (current user: " + mCurrentUserId + ", app: " +
16531624
receiver.mPackageName + ")");
16541625
}
@@ -1745,7 +1716,7 @@ private void handleLocationChanged(Location location, boolean passive) {
17451716
}
17461717

17471718
synchronized (mLock) {
1748-
if (isAllowedBySettingsLocked(provider, getCurrentUidBaseLocked())) {
1719+
if (isAllowedBySettingsLocked(provider, mCurrentUserId)) {
17491720
handleLocationChangedLocked(location, passive);
17501721
}
17511722
}

0 commit comments

Comments
 (0)