Restore legacy SecurityException behavior

For apps that do not target R+, throw SecurityExceptions within
getProvider().

Bug: 150935354
Test: na
Change-Id: I37e9fc1cbcc1cb6ed941c3905ff253d798fc0ac8
This commit is contained in:
Soonil Nagarkar
2020-03-08 20:08:23 -07:00
parent 82f3ed2925
commit bf016bb7ea

View File

@@ -102,6 +102,16 @@ public class LocationManager {
private final Object mLock = new Object();
/**
* For apps targeting Android R and above, {@link #getProvider(String)} will no longer throw any
* security exceptions.
*
* @hide
*/
@ChangeId
@EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
private static final long GET_PROVIDER_SECURITY_EXCEPTIONS = 150935354L;
/**
* For apps targeting Android K and above, supplied {@link PendingIntent}s must be targeted to a
* specific package.
@@ -1401,6 +1411,22 @@ public class LocationManager {
*/
public @Nullable LocationProvider getProvider(@NonNull String provider) {
Preconditions.checkArgument(provider != null, "invalid null provider");
if (!Compatibility.isChangeEnabled(GET_PROVIDER_SECURITY_EXCEPTIONS)) {
if (NETWORK_PROVIDER.equals(provider) || FUSED_PROVIDER.equals(provider)) {
try {
mContext.enforcePermission(ACCESS_FINE_LOCATION, Process.myPid(),
Process.myUid(), null);
} catch (SecurityException e) {
mContext.enforcePermission(ACCESS_COARSE_LOCATION, Process.myPid(),
Process.myUid(), null);
}
} else {
mContext.enforcePermission(ACCESS_FINE_LOCATION, Process.myPid(), Process.myUid(),
null);
}
}
try {
ProviderProperties properties = mService.getProviderProperties(provider);
if (properties == null) {