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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user