@@ -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