summaryrefslogtreecommitdiffstats
path: root/src/com/android/bluetooth/Utils.java
diff options
context:
space:
mode:
authorFyodor Kupolov <fkupolov@google.com>2015-06-19 15:36:44 -0700
committerFyodor Kupolov <fkupolov@google.com>2015-07-06 18:46:46 -0700
commitd2fc8cbd87c7a742223e8742a442a48690d426ce (patch)
treea98e95a31795b1ab03397272bcd17a2a14919a84 /src/com/android/bluetooth/Utils.java
parentdbeb8d7c8e7f657f0a2a20cb77010a1134ab5747 (diff)
downloadandroid_packages_apps_Bluetooth-d2fc8cbd87c7a742223e8742a442a48690d426ce.tar.gz
android_packages_apps_Bluetooth-d2fc8cbd87c7a742223e8742a442a48690d426ce.tar.bz2
android_packages_apps_Bluetooth-d2fc8cbd87c7a742223e8742a442a48690d426ce.zip
Do not return devices when caller has no location permission
In onScanResult, skip a device if calling process has no location permission/appop Bug: 21852542 Change-Id: I4e3511b33d69d94c1df6e1bf2f9a351303a90685
Diffstat (limited to 'src/com/android/bluetooth/Utils.java')
-rw-r--r--src/com/android/bluetooth/Utils.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/com/android/bluetooth/Utils.java b/src/com/android/bluetooth/Utils.java
index 0b2f836d6..4af2d44bd 100644
--- a/src/com/android/bluetooth/Utils.java
+++ b/src/com/android/bluetooth/Utils.java
@@ -18,10 +18,12 @@ package com.android.bluetooth;
import android.app.ActivityManager;
import android.app.ActivityThread;
+import android.app.AppOpsManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.ContextWrapper;
+import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.Binder;
import android.os.ParcelUuid;
@@ -267,6 +269,28 @@ final public class Utils {
}
/**
+ * Checks that calling process has android.Manifest.permission.ACCESS_COARSE_LOCATION or
+ * android.Manifest.permission.ACCESS_FINE_LOCATION and a corresponding app op is allowed
+ */
+ public static boolean checkCallerHasLocationPermission(Context context, AppOpsManager appOps,
+ String callingPackage) {
+ if (context.checkCallingOrSelfPermission(android.Manifest.permission.
+ ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
+ && isAppOppAllowed(appOps, AppOpsManager.OP_FINE_LOCATION, callingPackage)) {
+ return true;
+ }
+
+ return context.checkCallingOrSelfPermission(android.Manifest.permission.
+ ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
+ && isAppOppAllowed(appOps, AppOpsManager.OP_COARSE_LOCATION, callingPackage);
+ }
+
+ private static boolean isAppOppAllowed(AppOpsManager appOps, int op, String callingPackage) {
+ return appOps.noteOp(op, Binder.getCallingUid(), callingPackage)
+ == AppOpsManager.MODE_ALLOWED;
+ }
+
+ /**
* Converts {@code millisecond} to unit. Each unit is 0.625 millisecond.
*/
public static int millsToUnit(int milliseconds) {