From 19a8d096ae4e76490be422c7033f69896199421c 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 --- .../java/android/bluetooth/BluetoothProfileConnector.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'framework/java/android/bluetooth/BluetoothProfileConnector.java') diff --git a/framework/java/android/bluetooth/BluetoothProfileConnector.java b/framework/java/android/bluetooth/BluetoothProfileConnector.java index b20ab75493..beff841f2f 100644 --- a/framework/java/android/bluetooth/BluetoothProfileConnector.java +++ b/framework/java/android/bluetooth/BluetoothProfileConnector.java @@ -21,6 +21,8 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.content.pm.PackageManager; +import android.os.Build; import android.os.IBinder; import android.os.RemoteException; import android.os.UserHandle; @@ -123,6 +125,16 @@ public abstract class BluetoothProfileConnector { mContext = context; mServiceListener = listener; IBluetoothManager mgr = BluetoothAdapter.getDefaultAdapter().getBluetoothManager(); + + // 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"); + } + if (mgr != null) { try { mgr.registerStateChangeCallback(mBluetoothStateChangeCallback); -- cgit v1.2.3