diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2015-07-21 18:41:45 -0700 |
---|---|---|
committer | Fyodor Kupolov <fkupolov@google.com> | 2015-07-21 18:41:45 -0700 |
commit | 586ba822a87a5cb0f58035ce0983825f5f23285d (patch) | |
tree | baab3c06eb559d1577f6c2aab836acc0ab8f715c /src/com/android | |
parent | 51b7ab3d2d9a166e1fac22ff442ad3221a838c91 (diff) | |
download | android_packages_apps_Bluetooth-586ba822a87a5cb0f58035ce0983825f5f23285d.tar.gz android_packages_apps_Bluetooth-586ba822a87a5cb0f58035ce0983825f5f23285d.tar.bz2 android_packages_apps_Bluetooth-586ba822a87a5cb0f58035ce0983825f5f23285d.zip |
Enforce location permission for apps targeting M
Enforce location permission for apps targeting M, for legacy apps, log an
error.
Bug: 21852542
Change-Id: Ic406df1727eb0939531a22b76c2df9b13f03ec81
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/bluetooth/Utils.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/com/android/bluetooth/Utils.java b/src/com/android/bluetooth/Utils.java index 4af2d44bd..68744384a 100644 --- a/src/com/android/bluetooth/Utils.java +++ b/src/com/android/bluetooth/Utils.java @@ -26,6 +26,7 @@ import android.content.ContextWrapper; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.Binder; +import android.os.Build; import android.os.ParcelUuid; import android.os.Process; import android.os.UserHandle; @@ -280,9 +281,27 @@ final public class Utils { return true; } - return context.checkCallingOrSelfPermission(android.Manifest.permission. + if (context.checkCallingOrSelfPermission(android.Manifest.permission. ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED - && isAppOppAllowed(appOps, AppOpsManager.OP_COARSE_LOCATION, callingPackage); + && isAppOppAllowed(appOps, AppOpsManager.OP_COARSE_LOCATION, callingPackage)) { + return true; + } + // Enforce location permission for apps targeting MNC and later versions + boolean enforceLocationPermission = true; + try { + enforceLocationPermission = context.getPackageManager().getApplicationInfo( + callingPackage, 0).targetSdkVersion >= Build.VERSION_CODES.MNC; + } catch (PackageManager.NameNotFoundException e) { + // In case of exception, enforce permission anyway + } + if (enforceLocationPermission) { + throw new SecurityException("Need ACCESS_COARSE_LOCATION or " + + "ACCESS_FINE_LOCATION permission to get scan results"); + } else { + Log.e(TAG, "Permission denial: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION " + + "permission to get scan results"); + } + return false; } private static boolean isAppOppAllowed(AppOpsManager appOps, int op, String callingPackage) { |