From bf016bb7ea8faa68e0fddfec68c588903229c281 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Sun, 8 Mar 2020 20:08:23 -0700 Subject: Restore legacy SecurityException behavior For apps that do not target R+, throw SecurityExceptions within getProvider(). Bug: 150935354 Test: na Change-Id: I37e9fc1cbcc1cb6ed941c3905ff253d798fc0ac8 --- .../java/android/location/LocationManager.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'location') diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index e2309178b297..550e41f28f85 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -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) { -- cgit v1.2.3