diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2015-06-19 15:36:44 -0700 |
---|---|---|
committer | Fyodor Kupolov <fkupolov@google.com> | 2015-07-06 18:46:46 -0700 |
commit | d2fc8cbd87c7a742223e8742a442a48690d426ce (patch) | |
tree | a98e95a31795b1ab03397272bcd17a2a14919a84 /src/com/android/bluetooth/Utils.java | |
parent | dbeb8d7c8e7f657f0a2a20cb77010a1134ab5747 (diff) | |
download | android_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.java | 24 |
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) { |