Merge "Long-tail of AttributionSource plumbing." into sc-dev
This commit is contained in:
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user