From 0cab9b7480bfa353e6ea54df5f2eb0d89eeec5e5 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 28 Apr 2021 09:25:36 -0600 Subject: 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 --- core/java/android/bluetooth/BluetoothHeadset.java | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'core/java/android/bluetooth/BluetoothHeadset.java') diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java index 9dc2d8e9539e..3bf517c046f3 100644 --- a/core/java/android/bluetooth/BluetoothHeadset.java +++ b/core/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 { -- cgit v1.2.3