summaryrefslogtreecommitdiffstats
path: root/src/com/android/bluetooth
diff options
context:
space:
mode:
authorFyodor Kupolov <fkupolov@google.com>2015-07-21 18:41:45 -0700
committerFyodor Kupolov <fkupolov@google.com>2015-07-21 18:41:45 -0700
commit586ba822a87a5cb0f58035ce0983825f5f23285d (patch)
treebaab3c06eb559d1577f6c2aab836acc0ab8f715c /src/com/android/bluetooth
parent51b7ab3d2d9a166e1fac22ff442ad3221a838c91 (diff)
downloadandroid_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/bluetooth')
-rw-r--r--src/com/android/bluetooth/Utils.java23
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) {