Merge "Restore legacy SecurityException behavior" into rvc-dev am: 0ea91490c5 am: 9942a42bd6

Change-Id: I53be38e10387dcd3198ad20e3f2a94957463848a
This commit is contained in:
Automerger Merge Worker
2020-03-09 20:34:06 +00:00

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) {