summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothHeadset.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2021-04-28 09:25:36 -0600
committerJeff Sharkey <jsharkey@android.com>2021-04-28 09:25:38 -0600
commit19a8d096ae4e76490be422c7033f69896199421c (patch)
tree5f9b984a0a18e726fdbe8eb2274d743002a8b29e /framework/java/android/bluetooth/BluetoothHeadset.java
parent5c56750179b48e15ac25ea1595a8480d3ac71851 (diff)
Preserve legacy permission check behavior.
As part of the new "Nearby devices" permission work, the registerStateChangeCallback() API has been relaxed to no longer require permissions. However, we've discovered that some apps were depending on that SecurityException being thrown, so this change restores throwing behavior for those legacy apps. Bug: 186176507 Test: atest BluetoothInstrumentationTests Change-Id: Ife536dee246b300ffb3dd78aef0b059a230f3835
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothHeadset.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothHeadset.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/framework/java/android/bluetooth/BluetoothHeadset.java b/framework/java/android/bluetooth/BluetoothHeadset.java
index 9dc2d8e953..3bf517c046 100644
--- a/framework/java/android/bluetooth/BluetoothHeadset.java
+++ b/framework/java/android/bluetooth/BluetoothHeadset.java
@@ -31,6 +31,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.AttributionSource;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
@@ -365,6 +366,15 @@ public final class BluetoothHeadset implements BluetoothProfile {
mAdapter = adapter;
mAttributionSource = adapter.getAttributionSource();
+ // Preserve legacy compatibility where apps were depending on
+ // registerStateChangeCallback() performing a permissions check which
+ // has been relaxed in modern platform versions
+ if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.R
+ && context.checkSelfPermission(android.Manifest.permission.BLUETOOTH)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Need BLUETOOTH permission");
+ }
+
IBluetoothManager mgr = mAdapter.getBluetoothManager();
if (mgr != null) {
try {