summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@google.com> 2021-04-24 22:43:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-24 22:43:56 +0000
commit63721f8c7bfc98347ab1dcf15e360481a8e93eba (patch)
tree26dc761b90a13f7344a82e853216ed72377e6818
parent33946ea33f5cde7aa0fbb5012e761e3ed6190805 (diff)
parentdd5a4f39c89584941cf5c5579926f25eae6a098d (diff)
Merge "Long-tail of AttributionSource plumbing." into sc-dev
-rw-r--r--core/api/system-current.txt26
-rw-r--r--core/java/android/bluetooth/BluetoothA2dp.java59
-rwxr-xr-xcore/java/android/bluetooth/BluetoothA2dpSink.java43
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java29
-rw-r--r--core/java/android/bluetooth/BluetoothAvrcpController.java13
-rw-r--r--core/java/android/bluetooth/BluetoothDevice.java4
-rw-r--r--core/java/android/bluetooth/BluetoothHeadset.java62
-rw-r--r--core/java/android/bluetooth/BluetoothHeadsetClient.java55
-rw-r--r--core/java/android/bluetooth/BluetoothHearingAid.java51
-rw-r--r--core/java/android/bluetooth/BluetoothHidDevice.java25
-rw-r--r--core/java/android/bluetooth/BluetoothHidHost.java68
-rw-r--r--core/java/android/bluetooth/BluetoothLeAudio.java21
-rw-r--r--core/java/android/bluetooth/BluetoothMap.java19
-rw-r--r--core/java/android/bluetooth/BluetoothMapClient.java32
-rw-r--r--core/java/android/bluetooth/BluetoothPan.java27
-rw-r--r--core/java/android/bluetooth/BluetoothPbap.java17
-rw-r--r--core/java/android/bluetooth/BluetoothPbapClient.java51
-rw-r--r--core/java/android/bluetooth/BluetoothSap.java19
-rw-r--r--services/core/java/com/android/server/BluetoothManagerService.java83
19 files changed, 430 insertions, 274 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 5539301649d5..e74efd1d1482 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -1900,10 +1900,10 @@ package android.apphibernation {
package android.bluetooth {
public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
- method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public android.bluetooth.BufferConstraints getBufferConstraints();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getDynamicBufferSupport();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setBufferLengthMillis(int, int);
+ method @Nullable @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public android.bluetooth.BufferConstraints getBufferConstraints();
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getDynamicBufferSupport();
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setBufferLengthMillis(int, int);
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field public static final int DYNAMIC_BUFFER_SUPPORT_A2DP_OFFLOAD = 1; // 0x1
field public static final int DYNAMIC_BUFFER_SUPPORT_A2DP_SOFTWARE_ENCODING = 2; // 0x2
@@ -1918,8 +1918,8 @@ package android.bluetooth {
public final class BluetoothA2dpSink implements android.bluetooth.BluetoothProfile {
method public void finalize();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean isAudioPlaying(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean isAudioPlaying(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
}
@@ -2007,13 +2007,13 @@ package android.bluetooth {
public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean connect(android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnect(android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
}
public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public long getHiSyncId(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public long getHiSyncId(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
}
@@ -2023,9 +2023,9 @@ package android.bluetooth {
public final class BluetoothHidHost implements android.bluetooth.BluetoothProfile {
method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED";
}
@@ -2044,7 +2044,7 @@ package android.bluetooth {
public final class BluetoothPan implements android.bluetooth.BluetoothProfile {
method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isTetheringOn();
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.TETHER_PRIVILEGED}) public void setBluetoothTethering(boolean);
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
@@ -2062,7 +2062,7 @@ package android.bluetooth {
}
public class BluetoothPbap implements android.bluetooth.BluetoothProfile {
- method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
}
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index aa0bc3e1e358..1fb7638a6f05 100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
@@ -473,7 +473,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()
&& ((device == null) || isValidDevice(device))) {
- return service.setActiveDevice(device);
+ return service.setActiveDevice(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -500,7 +500,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- return service.getActiveDevice();
+ return service.getActiveDevice(mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return null;
@@ -560,7 +560,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
&& connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
return false;
}
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -590,7 +590,8 @@ public final class BluetoothA2dp implements BluetoothProfile {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return BluetoothAdapter.connectionPolicyToPriority(service.getPriority(device));
+ return BluetoothAdapter.connectionPolicyToPriority(
+ service.getPriority(device, mAttributionSource));
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return BluetoothProfile.PRIORITY_OFF;
@@ -612,14 +613,18 @@ public final class BluetoothA2dp implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -664,7 +669,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- service.setAvrcpAbsoluteVolume(volume);
+ service.setAvrcpAbsoluteVolume(volume, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
} catch (RemoteException e) {
@@ -685,7 +690,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return service.isA2dpPlaying(device);
+ return service.isA2dpPlaying(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -737,7 +742,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- return service.getCodecStatus(device);
+ return service.getCodecStatus(device, mAttributionSource);
}
if (service == null) {
Log.w(TAG, "Proxy not attached to service");
@@ -772,7 +777,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- service.setCodecConfigPreference(device, codecConfig);
+ service.setCodecConfigPreference(device, codecConfig, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return;
@@ -829,9 +834,9 @@ public final class BluetoothA2dp implements BluetoothProfile {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
if (enable) {
- service.enableOptionalCodecs(device);
+ service.enableOptionalCodecs(device, mAttributionSource);
} else {
- service.disableOptionalCodecs(device);
+ service.disableOptionalCodecs(device, mAttributionSource);
}
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
@@ -860,7 +865,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
- return service.supportsOptionalCodecs(device);
+ return service.supportsOptionalCodecs(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return OPTIONAL_CODECS_SUPPORT_UNKNOWN;
@@ -888,7 +893,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
- return service.getOptionalCodecsEnabled(device);
+ return service.getOptionalCodecsEnabled(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return OPTIONAL_CODECS_PREF_UNKNOWN;
@@ -924,7 +929,7 @@ public final class BluetoothA2dp implements BluetoothProfile {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()
&& isValidDevice(device)) {
- service.setOptionalCodecsEnabled(device, value);
+ service.setOptionalCodecsEnabled(device, value, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return;
@@ -946,13 +951,17 @@ public final class BluetoothA2dp implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @Type int getDynamicBufferSupport() {
if (VDBG) log("getDynamicBufferSupport()");
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- return service.getDynamicBufferSupport();
+ return service.getDynamicBufferSupport(mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return DYNAMIC_BUFFER_SUPPORT_NONE;
@@ -973,13 +982,17 @@ public final class BluetoothA2dp implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @Nullable BufferConstraints getBufferConstraints() {
if (VDBG) log("getBufferConstraints()");
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- return service.getBufferConstraints();
+ return service.getBufferConstraints(mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return null;
@@ -999,14 +1012,18 @@ public final class BluetoothA2dp implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean setBufferLengthMillis(@BluetoothCodecConfig.SourceCodecType int codec,
int value) {
if (VDBG) log("setBufferLengthMillis(" + codec + ", " + value + ")");
try {
final IBluetoothA2dp service = getService();
if (service != null && isEnabled()) {
- return service.setBufferLengthMillis(codec, value);
+ return service.setBufferLengthMillis(codec, value, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
diff --git a/core/java/android/bluetooth/BluetoothA2dpSink.java b/core/java/android/bluetooth/BluetoothA2dpSink.java
index 0158e3c0d9ef..c0a2aa3db421 100755
--- a/core/java/android/bluetooth/BluetoothA2dpSink.java
+++ b/core/java/android/bluetooth/BluetoothA2dpSink.java
@@ -132,13 +132,17 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
* @return false on immediate error, true otherwise
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean connect(BluetoothDevice device) {
if (DBG) log("connect(" + device + ")");
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -179,7 +183,7 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -203,7 +207,7 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -227,7 +231,8 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -250,7 +255,7 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -279,7 +284,7 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getAudioConfig(device);
+ return service.getAudioConfig(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return null;
@@ -338,7 +343,7 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -358,7 +363,11 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -376,13 +385,17 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -401,12 +414,16 @@ public final class BluetoothA2dpSink implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean isAudioPlaying(@NonNull BluetoothDevice device) {
final IBluetoothA2dpSink service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.isA2dpPlaying(device);
+ return service.isA2dpPlaying(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 18e6356d825f..8afc557ef85e 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -981,7 +981,7 @@ public final class BluetoothAdapter {
}
String packageName = ActivityThread.currentPackageName();
try {
- return mManagerService.disableBle(packageName, mToken);
+ return mManagerService.disableBle(mAttributionSource, mToken);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1028,7 +1028,7 @@ public final class BluetoothAdapter {
}
String packageName = ActivityThread.currentPackageName();
try {
- return mManagerService.enableBle(packageName, mToken);
+ return mManagerService.enableBle(mAttributionSource, mToken);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1193,7 +1193,7 @@ public final class BluetoothAdapter {
return true;
}
try {
- return mManagerService.enable(ActivityThread.currentPackageName());
+ return mManagerService.enable(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1226,7 +1226,7 @@ public final class BluetoothAdapter {
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
public boolean disable() {
try {
- return mManagerService.disable(ActivityThread.currentPackageName(), true);
+ return mManagerService.disable(mAttributionSource, true);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1246,7 +1246,7 @@ public final class BluetoothAdapter {
public boolean disable(boolean persist) {
try {
- return mManagerService.disable(ActivityThread.currentPackageName(), persist);
+ return mManagerService.disable(mAttributionSource, persist);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1267,7 +1267,7 @@ public final class BluetoothAdapter {
})
public String getAddress() {
try {
- return mManagerService.getAddress();
+ return mManagerService.getAddress(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1285,7 +1285,7 @@ public final class BluetoothAdapter {
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
public String getName() {
try {
- return mManagerService.getName();
+ return mManagerService.getName(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1297,7 +1297,7 @@ public final class BluetoothAdapter {
@RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)
public int getNameLengthForAdvertise() {
try {
- return mService.getNameLengthForAdvertise();
+ return mService.getNameLengthForAdvertise(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
@@ -1316,7 +1316,8 @@ public final class BluetoothAdapter {
try {
mServiceLock.readLock().lock();
if (mService != null && mService.factoryReset()
- && mManagerService != null && mManagerService.onFactoryReset()) {
+ && mManagerService != null
+ && mManagerService.onFactoryReset(mAttributionSource)) {
return true;
}
Log.e(TAG, "factoryReset(): Setting persist.bluetooth.factoryreset to retry later");
@@ -1910,7 +1911,7 @@ public final class BluetoothAdapter {
mServiceLock.readLock().lock();
if (mService != null) {
if (DBG) Log.d(TAG, "removeActiveDevice, profiles: " + profiles);
- return mService.removeActiveDevice(profiles);
+ return mService.removeActiveDevice(profiles, mAttributionSource);
}
} catch (RemoteException e) {
Log.e(TAG, "", e);
@@ -1962,7 +1963,7 @@ public final class BluetoothAdapter {
if (DBG) {
Log.d(TAG, "setActiveDevice, device: " + device + ", profiles: " + profiles);
}
- return mService.setActiveDevice(device, profiles);
+ return mService.setActiveDevice(device, profiles, mAttributionSource);
}
} catch (RemoteException e) {
Log.e(TAG, "", e);
@@ -1995,7 +1996,7 @@ public final class BluetoothAdapter {
try {
mServiceLock.readLock().lock();
if (mService != null) {
- return mService.connectAllEnabledProfiles(device);
+ return mService.connectAllEnabledProfiles(device, mAttributionSource);
}
} catch (RemoteException e) {
Log.e(TAG, "", e);
@@ -2027,7 +2028,7 @@ public final class BluetoothAdapter {
try {
mServiceLock.readLock().lock();
if (mService != null) {
- return mService.disconnectAllEnabledProfiles(device);
+ return mService.disconnectAllEnabledProfiles(device, mAttributionSource);
}
} catch (RemoteException e) {
Log.e(TAG, "", e);
@@ -3219,7 +3220,7 @@ public final class BluetoothAdapter {
return true;
}
try {
- return mManagerService.enableNoAutoConnect(ActivityThread.currentPackageName());
+ return mManagerService.enableNoAutoConnect(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
diff --git a/core/java/android/bluetooth/BluetoothAvrcpController.java b/core/java/android/bluetooth/BluetoothAvrcpController.java
index be3d5ee9ef1d..0b43e71aba2a 100644
--- a/core/java/android/bluetooth/BluetoothAvrcpController.java
+++ b/core/java/android/bluetooth/BluetoothAvrcpController.java
@@ -136,7 +136,7 @@ public final class BluetoothAvrcpController implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -159,7 +159,8 @@ public final class BluetoothAvrcpController implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -181,7 +182,7 @@ public final class BluetoothAvrcpController implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -205,7 +206,7 @@ public final class BluetoothAvrcpController implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- settings = service.getPlayerSettings(device);
+ settings = service.getPlayerSettings(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Error talking to BT service in getMetadata() " + e);
return null;
@@ -226,7 +227,7 @@ public final class BluetoothAvrcpController implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- return service.setPlayerApplicationSetting(plAppSetting);
+ return service.setPlayerApplicationSetting(plAppSetting, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Error talking to BT service in setPlayerApplicationSetting() " + e);
return false;
@@ -249,7 +250,7 @@ public final class BluetoothAvrcpController implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- service.sendGroupNavigationCmd(device, keyCode, keyState);
+ service.sendGroupNavigationCmd(device, keyCode, keyState, mAttributionSource);
return;
} catch (RemoteException e) {
Log.e(TAG, "Error talking to BT service in sendGroupNavigationCmd()", e);
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index c700a10f3a03..98823b096a55 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -1376,9 +1376,7 @@ public final class BluetoothDevice implements Parcelable {
return false;
}
try {
- return service.setRemoteAlias(this, alias,
- mAttributionSource.getPackageName(),
- mAttributionSource);
+ return service.setRemoteAlias(this, alias, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 92f3f5427b0f..9dc2d8e9539e 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -545,7 +545,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -608,7 +609,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
}
try {
return service.setPriority(
- device, BluetoothAdapter.priorityToConnectionPolicy(priority));
+ device, BluetoothAdapter.priorityToConnectionPolicy(priority),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -647,7 +649,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -677,7 +679,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return BluetoothAdapter.connectionPolicyToPriority(service.getPriority(device));
+ return BluetoothAdapter.connectionPolicyToPriority(
+ service.getPriority(device, mAttributionSource));
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.PRIORITY_OFF;
@@ -699,13 +702,17 @@ public final class BluetoothHeadset implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -729,7 +736,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.isNoiseReductionSupported(device);
+ return service.isNoiseReductionSupported(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -752,7 +759,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.isVoiceRecognitionSupported(device);
+ return service.isVoiceRecognitionSupported(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -791,7 +798,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.startVoiceRecognition(device);
+ return service.startVoiceRecognition(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -820,7 +827,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.stopVoiceRecognition(device);
+ return service.stopVoiceRecognition(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -843,7 +850,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.isAudioConnected(device);
+ return service.isAudioConnected(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -877,7 +884,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && !isDisabled()) {
try {
- return service.getAudioState(device);
+ return service.getAudioState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -905,7 +912,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- service.setAudioRouteAllowed(allowed);
+ service.setAudioRouteAllowed(allowed, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -928,7 +935,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.getAudioRouteAllowed();
+ return service.getAudioRouteAllowed(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -953,7 +960,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- service.setForceScoAudio(forced);
+ service.setForceScoAudio(forced, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -978,7 +985,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.isAudioOn();
+ return service.isAudioOn(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1013,7 +1020,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.connectAudio();
+ return service.connectAudio(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1042,7 +1049,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.disconnectAudio();
+ return service.disconnectAudio(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1086,7 +1093,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.startScoUsingVirtualVoiceCall();
+ return service.startScoUsingVirtualVoiceCall(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1121,7 +1128,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.stopScoUsingVirtualVoiceCall();
+ return service.stopScoUsingVirtualVoiceCall(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1151,7 +1158,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- service.phoneStateChanged(numActive, numHeld, callState, number, type, name);
+ service.phoneStateChanged(numActive, numHeld, callState, number, type, name,
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1176,7 +1184,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- service.clccResponse(index, direction, status, mode, mpty, number, type);
+ service.clccResponse(index, direction, status, mode, mpty, number, type,
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1216,7 +1225,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.sendVendorSpecificResultCode(device, command, arg);
+ return service.sendVendorSpecificResultCode(device, command, arg,
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1260,7 +1270,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled() && (device == null || isValidDevice(device))) {
try {
- return service.setActiveDevice(device);
+ return service.setActiveDevice(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1290,7 +1300,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.getActiveDevice();
+ return service.getActiveDevice(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1318,7 +1328,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
final IBluetoothHeadset service = mService;
if (service != null && isEnabled()) {
try {
- return service.isInbandRingingEnabled();
+ return service.isInbandRingingEnabled(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
diff --git a/core/java/android/bluetooth/BluetoothHeadsetClient.java b/core/java/android/bluetooth/BluetoothHeadsetClient.java
index de0043f2bf78..0059cdb9fbb7 100644
--- a/core/java/android/bluetooth/BluetoothHeadsetClient.java
+++ b/core/java/android/bluetooth/BluetoothHeadsetClient.java
@@ -483,7 +483,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -511,7 +511,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -536,7 +536,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -563,7 +563,8 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -588,7 +589,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -641,7 +642,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -689,7 +690,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -718,7 +719,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.startVoiceRecognition(device);
+ return service.startVoiceRecognition(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -745,7 +746,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.sendVendorAtCommand(device, vendorId, atCommand);
+ return service.sendVendorAtCommand(device, vendorId, atCommand, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -773,7 +774,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.stopVoiceRecognition(device);
+ return service.stopVoiceRecognition(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -796,7 +797,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getCurrentCalls(device);
+ return service.getCurrentCalls(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -819,7 +820,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getCurrentAgEvents(device);
+ return service.getCurrentAgEvents(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -846,7 +847,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.acceptCall(device, flag);
+ return service.acceptCall(device, flag, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -870,7 +871,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.holdCall(device);
+ return service.holdCall(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -899,7 +900,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.rejectCall(device);
+ return service.rejectCall(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -932,7 +933,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.terminateCall(device, call);
+ return service.terminateCall(device, call, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -963,7 +964,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.enterPrivateMode(device, index);
+ return service.enterPrivateMode(device, index, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -993,7 +994,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.explicitCallTransfer(device);
+ return service.explicitCallTransfer(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1019,7 +1020,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.dial(device, number);
+ return service.dial(device, number, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1046,7 +1047,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.sendDTMF(device, code);
+ return service.sendDTMF(device, code, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1075,7 +1076,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getLastVoiceTagNumber(device);
+ return service.getLastVoiceTagNumber(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -1098,7 +1099,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- return service.getAudioState(device);
+ return service.getAudioState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1124,7 +1125,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- service.setAudioRouteAllowed(device, allowed);
+ service.setAudioRouteAllowed(device, allowed, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1149,7 +1150,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- return service.getAudioRouteAllowed(device);
+ return service.getAudioRouteAllowed(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1176,7 +1177,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- return service.connectAudio(device);
+ return service.connectAudio(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1203,7 +1204,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- return service.disconnectAudio(device);
+ return service.disconnectAudio(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1227,7 +1228,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
getService();
if (service != null && isEnabled()) {
try {
- return service.getCurrentAgFeatures(device);
+ return service.getCurrentAgFeatures(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
diff --git a/core/java/android/bluetooth/BluetoothHearingAid.java b/core/java/android/bluetooth/BluetoothHearingAid.java
index 491937d0472c..3ff2ebd86b6e 100644
--- a/core/java/android/bluetooth/BluetoothHearingAid.java
+++ b/core/java/android/bluetooth/BluetoothHearingAid.java
@@ -185,7 +185,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
final IBluetoothHearingAid service = getService();
try {
if (service != null && isEnabled() && isValidDevice(device)) {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -217,13 +217,17 @@ public final class BluetoothHearingAid implements BluetoothProfile {
* @return false on immediate error, true otherwise
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean disconnect(BluetoothDevice device) {
if (DBG) log("disconnect(" + device + ")");
final IBluetoothHearingAid service = getService();
try {
if (service != null && isEnabled() && isValidDevice(device)) {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -245,7 +249,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()) {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<BluetoothDevice>();
@@ -268,7 +272,8 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()) {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<BluetoothDevice>();
@@ -291,7 +296,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return BluetoothProfile.STATE_DISCONNECTED;
@@ -330,7 +335,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()
&& ((device == null) || isValidDevice(device))) {
- service.setActiveDevice(device);
+ service.setActiveDevice(device, mAttributionSource);
return true;
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
@@ -358,7 +363,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
final IBluetoothHearingAid service = getService();
try {
if (service != null && isEnabled()) {
- return service.getActiveDevices();
+ return service.getActiveDevices(mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<>();
@@ -419,7 +424,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
&& connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
return false;
}
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -439,7 +444,11 @@ public final class BluetoothHearingAid implements BluetoothProfile {
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -457,7 +466,11 @@ public final class BluetoothHearingAid implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
verifyDeviceNotNull(device, "getConnectionPolicy");
@@ -465,7 +478,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -517,7 +530,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
if (!isEnabled()) return;
- service.setVolume(volume);
+ service.setVolume(volume, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
}
@@ -534,7 +547,11 @@ public final class BluetoothHearingAid implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public long getHiSyncId(@NonNull BluetoothDevice device) {
if (VDBG) {
log("getHiSyncId(" + device + ")");
@@ -549,7 +566,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
if (!isEnabled() || !isValidDevice(device)) return HI_SYNC_ID_INVALID;
- return service.getHiSyncId(device);
+ return service.getHiSyncId(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return HI_SYNC_ID_INVALID;
@@ -574,7 +591,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return service.getDeviceSide(device);
+ return service.getDeviceSide(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return SIDE_LEFT;
@@ -602,7 +619,7 @@ public final class BluetoothHearingAid implements BluetoothProfile {
try {
if (service != null && isEnabled()
&& isValidDevice(device)) {
- return service.getDeviceMode(device);
+ return service.getDeviceMode(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return MODE_MONAURAL;
diff --git a/core/java/android/bluetooth/BluetoothHidDevice.java b/core/java/android/bluetooth/BluetoothHidDevice.java
index 6abaa22ceac1..11e5711eff1a 100644
--- a/core/java/android/bluetooth/BluetoothHidDevice.java
+++ b/core/java/android/bluetooth/BluetoothHidDevice.java
@@ -450,7 +450,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
if (service != null) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -470,7 +470,8 @@ public final class BluetoothHidDevice implements BluetoothProfile {
if (service != null) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -489,7 +490,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -549,7 +550,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
if (service != null) {
try {
CallbackWrapper cbw = new CallbackWrapper(executor, callback);
- result = service.registerApp(sdp, inQos, outQos, cbw);
+ result = service.registerApp(sdp, inQos, outQos, cbw, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -578,7 +579,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- result = service.unregisterApp();
+ result = service.unregisterApp(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -605,7 +606,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- result = service.sendReport(device, id, data);
+ result = service.sendReport(device, id, data, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -633,7 +634,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- result = service.replyReport(device, type, id, data);
+ result = service.replyReport(device, type, id, data, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -659,7 +660,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- result = service.reportError(device, error);
+ result = service.reportError(device, error, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -683,7 +684,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
if (service != null) {
try {
- return service.getUserAppName();
+ return service.getUserAppName(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -710,7 +711,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- result = service.connect(device);
+ result = service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -736,7 +737,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
final IBluetoothHidDevice service = getService();
if (service != null) {
try {
- result = service.disconnect(device);
+ result = service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -781,7 +782,7 @@ public final class BluetoothHidDevice implements BluetoothProfile {
&& connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
return false;
}
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
diff --git a/core/java/android/bluetooth/BluetoothHidHost.java b/core/java/android/bluetooth/BluetoothHidHost.java
index c655422dbb1c..0abe18c4d220 100644
--- a/core/java/android/bluetooth/BluetoothHidHost.java
+++ b/core/java/android/bluetooth/BluetoothHidHost.java
@@ -284,13 +284,17 @@ public final class BluetoothHidHost implements BluetoothProfile {
* @return false on immediate error, true otherwise
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean connect(BluetoothDevice device) {
if (DBG) log("connect(" + device + ")");
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -322,13 +326,17 @@ public final class BluetoothHidHost implements BluetoothProfile {
* @return false on immediate error, true otherwise
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean disconnect(BluetoothDevice device) {
if (DBG) log("disconnect(" + device + ")");
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -353,7 +361,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -377,7 +385,8 @@ public final class BluetoothHidHost implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -404,7 +413,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -425,7 +434,11 @@ public final class BluetoothHidHost implements BluetoothProfile {
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -444,7 +457,11 @@ public final class BluetoothHidHost implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) log("setConnectionPolicy(" + device + ", " + connectionPolicy + ")");
@@ -458,7 +475,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -478,7 +495,11 @@ public final class BluetoothHidHost implements BluetoothProfile {
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -496,7 +517,11 @@ public final class BluetoothHidHost implements BluetoothProfile {
* @hide
*/
@SystemApi
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) log("getConnectionPolicy(" + device + ")");
if (device == null) {
@@ -505,7 +530,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -538,7 +563,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.virtualUnplug(device);
+ return service.virtualUnplug(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -565,7 +590,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getProtocolMode(device);
+ return service.getProtocolMode(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -590,7 +615,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.setProtocolMode(device, protocolMode);
+ return service.setProtocolMode(device, protocolMode, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -622,7 +647,8 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getReport(device, reportType, reportId, bufferSize);
+ return service.getReport(device, reportType, reportId, bufferSize,
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -649,7 +675,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.setReport(device, reportType, report);
+ return service.setReport(device, reportType, report, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -675,7 +701,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.sendData(device, report);
+ return service.sendData(device, report, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -700,7 +726,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getIdleTime(device);
+ return service.getIdleTime(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -726,7 +752,7 @@ public final class BluetoothHidHost implements BluetoothProfile {
final IBluetoothHidHost service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.setIdleTime(device, idleTime);
+ return service.setIdleTime(device, idleTime, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
diff --git a/core/java/android/bluetooth/BluetoothLeAudio.java b/core/java/android/bluetooth/BluetoothLeAudio.java
index a8ca9a8adab7..51bfd048fdc4 100644
--- a/core/java/android/bluetooth/BluetoothLeAudio.java
+++ b/core/java/android/bluetooth/BluetoothLeAudio.java
@@ -166,7 +166,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
try {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled() && isValidDevice(device)) {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -206,7 +206,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
try {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled() && isValidDevice(device)) {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -228,7 +228,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()) {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<BluetoothDevice>();
@@ -251,7 +251,8 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()) {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<BluetoothDevice>();
@@ -274,7 +275,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()
&& isValidDevice(device)) {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return BluetoothProfile.STATE_DISCONNECTED;
@@ -312,7 +313,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()
&& ((device == null) || isValidDevice(device))) {
- service.setActiveDevice(device);
+ service.setActiveDevice(device, mAttributionSource);
return true;
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
@@ -338,7 +339,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
try {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()) {
- return service.getActiveDevices();
+ return service.getActiveDevices(mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<>();
@@ -363,7 +364,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
try {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()) {
- return service.getGroupId(device);
+ return service.getGroupId(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return GROUP_ID_INVALID;
@@ -401,7 +402,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
&& connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
return false;
}
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -430,7 +431,7 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
final IBluetoothLeAudio service = getService();
if (service != null && mAdapter.isEnabled()
&& isValidDevice(device)) {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
diff --git a/core/java/android/bluetooth/BluetoothMap.java b/core/java/android/bluetooth/BluetoothMap.java
index 68bb60a85429..88505b51f831 100644
--- a/core/java/android/bluetooth/BluetoothMap.java
+++ b/core/java/android/bluetooth/BluetoothMap.java
@@ -144,7 +144,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
final IBluetoothMap service = getService();
if (service != null) {
try {
- return service.getState();
+ return service.getState(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -170,7 +170,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
final IBluetoothMap service = getService();
if (service != null) {
try {
- return service.getClient();
+ return service.getClient(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -195,7 +195,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
final IBluetoothMap service = getService();
if (service != null) {
try {
- return service.isConnected(device);
+ return service.isConnected(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -234,7 +234,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
final IBluetoothMap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -286,7 +286,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -311,7 +311,8 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -335,7 +336,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
final IBluetoothMap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -394,7 +395,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -446,7 +447,7 @@ public final class BluetoothMap implements BluetoothProfile, AutoCloseable {
final IBluetoothMap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
diff --git a/core/java/android/bluetooth/BluetoothMapClient.java b/core/java/android/bluetooth/BluetoothMapClient.java
index 823967de6d98..14804dbefeb6 100644
--- a/core/java/android/bluetooth/BluetoothMapClient.java
+++ b/core/java/android/bluetooth/BluetoothMapClient.java
@@ -21,9 +21,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
-import android.annotation.SuppressLint;
-import android.annotation.SystemApi;
import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemApi;
import android.app.PendingIntent;
import android.bluetooth.annotations.RequiresBluetoothConnectPermission;
import android.compat.annotation.UnsupportedAppUsage;
@@ -224,7 +223,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null) {
try {
- return service.isConnected(device);
+ return service.isConnected(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -251,7 +250,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null) {
try {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -280,7 +279,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -304,7 +303,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<>();
@@ -329,7 +328,8 @@ public final class BluetoothMapClient implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<>();
@@ -353,7 +353,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -411,7 +411,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -462,7 +462,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
@@ -499,7 +499,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
if (service != null && isEnabled() && isValidDevice(device)) {
try {
return service.sendMessage(device, contacts.toArray(new Uri[contacts.size()]),
- message, sentIntent, deliveredIntent);
+ message, sentIntent, deliveredIntent, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -533,7 +533,8 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.sendMessage(device, contacts, message, sentIntent, deliveredIntent);
+ return service.sendMessage(device, contacts, message, sentIntent, deliveredIntent,
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -559,7 +560,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getUnreadMessages(device);
+ return service.getUnreadMessages(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -582,7 +583,8 @@ public final class BluetoothMapClient implements BluetoothProfile {
final IBluetoothMapClient service = getService();
try {
return (service != null && isEnabled() && isValidDevice(device))
- && ((service.getSupportedFeatures(device) & UPLOADING_FEATURE_BITMASK) > 0);
+ && ((service.getSupportedFeatures(device, mAttributionSource)
+ & UPLOADING_FEATURE_BITMASK) > 0);
} catch (RemoteException e) {
Log.e(TAG, e.getMessage());
}
@@ -616,7 +618,7 @@ public final class BluetoothMapClient implements BluetoothProfile {
if (service != null && isEnabled() && isValidDevice(device) && handle != null &&
(status == READ || status == UNREAD || status == UNDELETED || status == DELETED)) {
try {
- return service.setMessageStatus(device, handle, status);
+ return service.setMessageStatus(device, handle, status, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
diff --git a/core/java/android/bluetooth/BluetoothPan.java b/core/java/android/bluetooth/BluetoothPan.java
index c38653860139..90c94de2f4ec 100644
--- a/core/java/android/bluetooth/BluetoothPan.java
+++ b/core/java/android/bluetooth/BluetoothPan.java
@@ -22,10 +22,10 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
-import android.bluetooth.annotations.RequiresBluetoothConnectPermission;
-import android.bluetooth.annotations.RequiresLegacyBluetoothPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
+import android.bluetooth.annotations.RequiresBluetoothConnectPermission;
+import android.bluetooth.annotations.RequiresLegacyBluetoothPermission;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.AttributionSource;
import android.content.Context;
@@ -254,7 +254,7 @@ public final class BluetoothPan implements BluetoothProfile {
final IBluetoothPan service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -294,7 +294,7 @@ public final class BluetoothPan implements BluetoothProfile {
final IBluetoothPan service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return false;
@@ -333,7 +333,7 @@ public final class BluetoothPan implements BluetoothProfile {
&& connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
return false;
}
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -360,7 +360,7 @@ public final class BluetoothPan implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -387,7 +387,8 @@ public final class BluetoothPan implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -403,13 +404,17 @@ public final class BluetoothPan implements BluetoothProfile {
*/
@SystemApi
@Override
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public int getConnectionState(@NonNull BluetoothDevice device) {
if (VDBG) log("getState(" + device + ")");
final IBluetoothPan service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -438,7 +443,7 @@ public final class BluetoothPan implements BluetoothProfile {
final IBluetoothPan service = getService();
if (service != null && isEnabled()) {
try {
- service.setBluetoothTethering(value, pkgName, mContext.getAttributionTag());
+ service.setBluetoothTethering(value, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
}
@@ -459,7 +464,7 @@ public final class BluetoothPan implements BluetoothProfile {
final IBluetoothPan service = getService();
if (service != null && isEnabled()) {
try {
- return service.isTetheringOn();
+ return service.isTetheringOn(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
}
diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java
index 1a179c722e10..2600029362a3 100644
--- a/core/java/android/bluetooth/BluetoothPbap.java
+++ b/core/java/android/bluetooth/BluetoothPbap.java
@@ -233,7 +233,7 @@ public class BluetoothPbap implements BluetoothProfile {
}
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -247,13 +247,17 @@ public class BluetoothPbap implements BluetoothProfile {
*/
@SystemApi
@Override
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @BtProfileState int getConnectionState(@NonNull BluetoothDevice device) {
log("getConnectionState: device=" + device);
try {
final IBluetoothPbap service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
}
if (service == null) {
Log.w(TAG, "Proxy not attached to service");
@@ -282,7 +286,8 @@ public class BluetoothPbap implements BluetoothProfile {
}
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -322,7 +327,7 @@ public class BluetoothPbap implements BluetoothProfile {
&& connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
return false;
}
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return false;
@@ -350,7 +355,7 @@ public class BluetoothPbap implements BluetoothProfile {
return false;
}
try {
- service.disconnect(device);
+ service.disconnect(device, mAttributionSource);
return true;
} catch (RemoteException e) {
Log.e(TAG, e.toString());
diff --git a/core/java/android/bluetooth/BluetoothPbapClient.java b/core/java/android/bluetooth/BluetoothPbapClient.java
index d9c69f0fcce8..3ebd8fe19205 100644
--- a/core/java/android/bluetooth/BluetoothPbapClient.java
+++ b/core/java/android/bluetooth/BluetoothPbapClient.java
@@ -114,7 +114,11 @@ public final class BluetoothPbapClient implements BluetoothProfile {
*
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean connect(BluetoothDevice device) {
if (DBG) {
log("connect(" + device + ") for PBAP Client.");
@@ -122,7 +126,7 @@ public final class BluetoothPbapClient implements BluetoothProfile {
final IBluetoothPbapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.connect(device);
+ return service.connect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -142,7 +146,11 @@ public final class BluetoothPbapClient implements BluetoothProfile {
*
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean disconnect(BluetoothDevice device) {
if (DBG) {
log("disconnect(" + device + ")" + new Exception());
@@ -150,7 +158,7 @@ public final class BluetoothPbapClient implements BluetoothProfile {
final IBluetoothPbapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- service.disconnect(device);
+ service.disconnect(device, mAttributionSource);
return true;
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
@@ -180,7 +188,7 @@ public final class BluetoothPbapClient implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -208,7 +216,8 @@ public final class BluetoothPbapClient implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -235,7 +244,7 @@ public final class BluetoothPbapClient implements BluetoothProfile {
final IBluetoothPbapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -270,7 +279,11 @@ public final class BluetoothPbapClient implements BluetoothProfile {
* @return true if priority is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean setPriority(BluetoothDevice device, int priority) {
if (DBG) log("setPriority(" + device + ", " + priority + ")");
return setConnectionPolicy(device, BluetoothAdapter.priorityToConnectionPolicy(priority));
@@ -288,7 +301,11 @@ public final class BluetoothPbapClient implements BluetoothProfile {
* @return true if connectionPolicy is set, false on error
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public boolean setConnectionPolicy(@NonNull BluetoothDevice device,
@ConnectionPolicy int connectionPolicy) {
if (DBG) {
@@ -301,7 +318,7 @@ public final class BluetoothPbapClient implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -323,7 +340,11 @@ public final class BluetoothPbapClient implements BluetoothProfile {
* @return priority of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public int getPriority(BluetoothDevice device) {
if (VDBG) log("getPriority(" + device + ")");
return BluetoothAdapter.connectionPolicyToPriority(getConnectionPolicy(device));
@@ -340,7 +361,11 @@ public final class BluetoothPbapClient implements BluetoothProfile {
* @return connection policy of the device
* @hide
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
+ @RequiresBluetoothConnectPermission
+ @RequiresPermission(allOf = {
+ android.Manifest.permission.BLUETOOTH_CONNECT,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ })
public @ConnectionPolicy int getConnectionPolicy(@NonNull BluetoothDevice device) {
if (VDBG) {
log("getConnectionPolicy(" + device + ")");
@@ -348,7 +373,7 @@ public final class BluetoothPbapClient implements BluetoothProfile {
final IBluetoothPbapClient service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
diff --git a/core/java/android/bluetooth/BluetoothSap.java b/core/java/android/bluetooth/BluetoothSap.java
index 832538e8b8d6..0631abdadac9 100644
--- a/core/java/android/bluetooth/BluetoothSap.java
+++ b/core/java/android/bluetooth/BluetoothSap.java
@@ -157,7 +157,7 @@ public final class BluetoothSap implements BluetoothProfile {
final IBluetoothSap service = getService();
if (service != null) {
try {
- return service.getState();
+ return service.getState(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -182,7 +182,7 @@ public final class BluetoothSap implements BluetoothProfile {
final IBluetoothSap service = getService();
if (service != null) {
try {
- return service.getClient();
+ return service.getClient(mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -207,7 +207,7 @@ public final class BluetoothSap implements BluetoothProfile {
final IBluetoothSap service = getService();
if (service != null) {
try {
- return service.isConnected(device);
+ return service.isConnected(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -245,7 +245,7 @@ public final class BluetoothSap implements BluetoothProfile {
final IBluetoothSap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.disconnect(device);
+ return service.disconnect(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -269,7 +269,7 @@ public final class BluetoothSap implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getConnectedDevices(), mAttributionSource);
+ service.getConnectedDevices(mAttributionSource), mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -293,7 +293,8 @@ public final class BluetoothSap implements BluetoothProfile {
if (service != null && isEnabled()) {
try {
return BluetoothDevice.setAttributionSource(
- service.getDevicesMatchingConnectionStates(states), mAttributionSource);
+ service.getDevicesMatchingConnectionStates(states, mAttributionSource),
+ mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
@@ -316,7 +317,7 @@ public final class BluetoothSap implements BluetoothProfile {
final IBluetoothSap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionState(device);
+ return service.getConnectionState(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.STATE_DISCONNECTED;
@@ -374,7 +375,7 @@ public final class BluetoothSap implements BluetoothProfile {
return false;
}
try {
- return service.setConnectionPolicy(device, connectionPolicy);
+ return service.setConnectionPolicy(device, connectionPolicy, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return false;
@@ -425,7 +426,7 @@ public final class BluetoothSap implements BluetoothProfile {
final IBluetoothSap service = getService();
if (service != null && isEnabled() && isValidDevice(device)) {
try {
- return service.getConnectionPolicy(device);
+ return service.getConnectionPolicy(device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
return BluetoothProfile.CONNECTION_POLICY_FORBIDDEN;
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index e47d732769a5..c5246c7073ee 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -18,6 +18,7 @@ package com.android.server;
import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.content.PermissionChecker.PERMISSION_HARD_DENIED;
+import static android.content.PermissionChecker.PID_UNKNOWN;
import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.PowerExemptionManager.TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED;
@@ -45,6 +46,7 @@ import android.bluetooth.IBluetoothManagerCallback;
import android.bluetooth.IBluetoothProfileServiceConnection;
import android.bluetooth.IBluetoothStateChangeCallback;
import android.content.ActivityNotFoundException;
+import android.content.AttributionSource;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -306,13 +308,13 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
DELAY_BEFORE_RESTART_DUE_TO_INIT_FLAGS_CHANGED_MS);
}
- public boolean onFactoryReset() {
+ public boolean onFactoryReset(AttributionSource attributionSource) {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PRIVILEGED,
"Need BLUETOOTH_PRIVILEGED permission");
final long token = Binder.clearCallingIdentity();
try {
- return onFactoryResetInternal();
+ return onFactoryResetInternal(attributionSource);
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -322,7 +324,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
android.Manifest.permission.BLUETOOTH_CONNECT,
android.Manifest.permission.BLUETOOTH_PRIVILEGED,
})
- private boolean onFactoryResetInternal() {
+ private boolean onFactoryResetInternal(AttributionSource attributionSource) {
// Wait for stable state if bluetooth is temporary state.
int state = getState();
if (state == BluetoothAdapter.STATE_BLE_TURNING_ON
@@ -351,7 +353,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
addActiveLog(
BluetoothProtoEnums.ENABLE_DISABLE_REASON_FACTORY_RESET,
mContext.getPackageName(), false);
- mBluetooth.disable(mContext.getAttributionSource());
+ mBluetooth.disable(attributionSource);
return true;
}
} catch (RemoteException e) {
@@ -947,7 +949,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
- private boolean checkBluetoothPermissions(String packageName, boolean requireForeground) {
+ private boolean checkBluetoothPermissions(AttributionSource attributionSource, String message,
+ boolean requireForeground) {
if (isBluetoothDisallowed()) {
if (DBG) {
Slog.d(TAG, "checkBluetoothPermissions: bluetooth disallowed");
@@ -958,22 +961,24 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
final int callingUid = Binder.getCallingUid();
final boolean isCallerSystem = UserHandle.getAppId(callingUid) == Process.SYSTEM_UID;
if (!isCallerSystem) {
- checkPackage(callingUid, packageName);
+ checkPackage(callingUid, attributionSource.getPackageName());
if (requireForeground && !checkIfCallerIsForegroundUser()) {
Slog.w(TAG, "Not allowed for non-active and non system user");
return false;
}
- if (!checkConnectPermissionForPreflight(mContext)) {
+ if (!checkConnectPermissionForDataDelivery(mContext, attributionSource, message)) {
return false;
}
}
return true;
}
- public boolean enableBle(String packageName, IBinder token) throws RemoteException {
- if (!checkBluetoothPermissions(packageName, false)) {
+ public boolean enableBle(AttributionSource attributionSource, IBinder token)
+ throws RemoteException {
+ final String packageName = attributionSource.getPackageName();
+ if (!checkBluetoothPermissions(attributionSource, "enableBle", false)) {
if (DBG) {
Slog.d(TAG, "enableBle(): bluetooth disallowed");
}
@@ -1003,8 +1008,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
@RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED)
- public boolean disableBle(String packageName, IBinder token) throws RemoteException {
- if (!checkBluetoothPermissions(packageName, false)) {
+ public boolean disableBle(AttributionSource attributionSource, IBinder token)
+ throws RemoteException {
+ final String packageName = attributionSource.getPackageName();
+ if (!checkBluetoothPermissions(attributionSource, "disableBle", false)) {
if (DBG) {
Slog.d(TAG, "disableBLE(): bluetooth disallowed");
}
@@ -1122,8 +1129,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
- public boolean enableNoAutoConnect(String packageName) {
- if (!checkBluetoothPermissions(packageName, false)) {
+ public boolean enableNoAutoConnect(AttributionSource attributionSource) {
+ final String packageName = attributionSource.getPackageName();
+ if (!checkBluetoothPermissions(attributionSource, "enableNoAutoConnect", false)) {
if (DBG) {
Slog.d(TAG, "enableNoAutoConnect(): not enabling - bluetooth disallowed");
}
@@ -1149,8 +1157,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
return true;
}
- public boolean enable(String packageName) throws RemoteException {
- if (!checkBluetoothPermissions(packageName, true)) {
+ public boolean enable(AttributionSource attributionSource) throws RemoteException {
+ final String packageName = attributionSource.getPackageName();
+ if (!checkBluetoothPermissions(attributionSource, "enable", true)) {
if (DBG) {
Slog.d(TAG, "enable(): not enabling - bluetooth disallowed");
}
@@ -1183,8 +1192,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
return true;
}
- public boolean disable(String packageName, boolean persist) throws RemoteException {
- if (!checkBluetoothPermissions(packageName, true)) {
+ public boolean disable(AttributionSource attributionSource, boolean persist)
+ throws RemoteException {
+ final String packageName = attributionSource.getPackageName();
+ if (!checkBluetoothPermissions(attributionSource, "disable", true)) {
if (DBG) {
Slog.d(TAG, "disable(): not disabling - bluetooth disallowed");
}
@@ -1700,8 +1711,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
}
- public String getAddress() {
- if (!checkConnectPermissionForPreflight(mContext)) {
+ public String getAddress(AttributionSource attributionSource) {
+ if (!checkConnectPermissionForDataDelivery(mContext, attributionSource, "getAddress")) {
return null;
}
@@ -1734,8 +1745,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
return mAddress;
}
- public String getName() {
- if (!checkConnectPermissionForPreflight(mContext)) {
+ public String getName(AttributionSource attributionSource) {
+ if (!checkConnectPermissionForDataDelivery(mContext, attributionSource, "getName")) {
return null;
}
@@ -2879,6 +2890,25 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
}
+ private static boolean checkPermissionForDataDelivery(Context context, String permission,
+ AttributionSource attributionSource, String message) {
+ final int result = PermissionChecker.checkPermissionForDataDeliveryFromDataSource(
+ context, permission, PID_UNKNOWN,
+ new AttributionSource(context.getAttributionSource(), attributionSource), message);
+ if (result == PERMISSION_GRANTED) {
+ return true;
+ }
+
+ final String msg = "Need " + permission + " permission for " + attributionSource + ": "
+ + message;
+ if (result == PERMISSION_HARD_DENIED) {
+ throw new SecurityException(msg);
+ } else {
+ Log.w(TAG, msg);
+ return false;
+ }
+ }
+
/**
* Returns true if the BLUETOOTH_CONNECT permission is granted for the calling app. Returns
* false if the result is a soft denial. Throws SecurityException if the result is a hard
@@ -2887,13 +2917,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
* <p>Should be used in situations where the app op should not be noted.
*/
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
- private static boolean checkConnectPermissionForPreflight(Context context) {
- int permissionCheckResult = PermissionChecker.checkCallingOrSelfPermissionForPreflight(
- context, BLUETOOTH_CONNECT);
- if (permissionCheckResult == PERMISSION_HARD_DENIED) {
- throw new SecurityException("Need BLUETOOTH_CONNECT permission");
- }
- return permissionCheckResult == PERMISSION_GRANTED;
+ public static boolean checkConnectPermissionForDataDelivery(
+ Context context, AttributionSource attributionSource, String message) {
+ return checkPermissionForDataDelivery(context, BLUETOOTH_CONNECT,
+ attributionSource, message);
}
static @NonNull Bundle getTempAllowlistBroadcastOptions() {