Skip to content

Commit 941221c

Browse files
committed
Handle other providers in isAllowedProviderSafe()
Add a case for isAllowedProviderSafe() to handle providers that are not GPS/Passive/Network/Fused. For example, this is useful for mock providers. Bug: 7047435 Change-Id: If4799aa90a5338889c47582d45cbfc25772c9c53
1 parent 57e6203 commit 941221c

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,27 @@ private boolean isAllowedProviderSafe(String provider) {
639639
== PackageManager.PERMISSION_GRANTED) ||
640640
(mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION)
641641
== PackageManager.PERMISSION_GRANTED);
642+
} else {
643+
// mock providers
644+
LocationProviderInterface lp = mMockProviders.get(provider);
645+
if (lp != null) {
646+
ProviderProperties properties = lp.getProperties();
647+
if (properties != null) {
648+
if (properties.mRequiresSatellite) {
649+
// provider requiring satellites require FINE permission
650+
return mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION)
651+
== PackageManager.PERMISSION_GRANTED;
652+
} else if (properties.mRequiresNetwork || properties.mRequiresCell) {
653+
// provider requiring network and or cell require COARSE or FINE
654+
return (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION)
655+
== PackageManager.PERMISSION_GRANTED) ||
656+
(mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION)
657+
== PackageManager.PERMISSION_GRANTED);
658+
}
659+
}
660+
}
642661
}
662+
643663
return false;
644664
}
645665

0 commit comments

Comments
 (0)