aboutsummaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothAdapter.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@google.com>2021-06-04 10:56:44 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-06-04 10:56:44 +0000
commitb3d1205b0892edd4cf92fdb76214405a0858eadc (patch)
treebd35e6dc33c8caf0f830c48ee24c77ec012d0fa3 /framework/java/android/bluetooth/BluetoothAdapter.java
parente004142e01bd5d2caf4767daeeaa43b78a3a33a8 (diff)
parent53453dab47c8ba07bffc9a02b63abf5378865920 (diff)
Merge "More Binder call AttributionSource assignment." into sc-dev am: 53453dab47
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14825079 Change-Id: Ibd460a7ccf1fb27dedb341ecf435e70e2399c87c
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothAdapter.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothAdapter.java58
1 files changed, 33 insertions, 25 deletions
diff --git a/framework/java/android/bluetooth/BluetoothAdapter.java b/framework/java/android/bluetooth/BluetoothAdapter.java
index 54941724b2..054b63fbad 100644
--- a/framework/java/android/bluetooth/BluetoothAdapter.java
+++ b/framework/java/android/bluetooth/BluetoothAdapter.java
@@ -46,6 +46,7 @@ import android.bluetooth.le.ScanRecord;
import android.bluetooth.le.ScanResult;
import android.bluetooth.le.ScanSettings;
import android.compat.annotation.UnsupportedAppUsage;
+import android.content.Attributable;
import android.content.AttributionSource;
import android.content.Context;
import android.os.BatteryStats;
@@ -719,8 +720,8 @@ public final class BluetoothAdapter {
private final Object mLock = new Object();
private final Map<LeScanCallback, ScanCallback> mLeScanClients;
- private static final Map<BluetoothDevice, List<Pair<OnMetadataChangedListener, Executor>>>
- sMetadataListeners = new HashMap<>();
+ private final Map<BluetoothDevice, List<Pair<OnMetadataChangedListener, Executor>>>
+ mMetadataListeners = new HashMap<>();
private final Map<BluetoothConnectionCallback, Executor>
mBluetoothConnectionCallbackExecutorMap = new HashMap<>();
@@ -729,14 +730,15 @@ public final class BluetoothAdapter {
* implementation.
*/
@SuppressLint("AndroidFrameworkBluetoothPermission")
- private static final IBluetoothMetadataListener sBluetoothMetadataListener =
+ private final IBluetoothMetadataListener mBluetoothMetadataListener =
new IBluetoothMetadataListener.Stub() {
@Override
public void onMetadataChanged(BluetoothDevice device, int key, byte[] value) {
- synchronized (sMetadataListeners) {
- if (sMetadataListeners.containsKey(device)) {
+ Attributable.setAttributionSource(device, mAttributionSource);
+ synchronized (mMetadataListeners) {
+ if (mMetadataListeners.containsKey(device)) {
List<Pair<OnMetadataChangedListener, Executor>> list =
- sMetadataListeners.get(device);
+ mMetadataListeners.get(device);
for (Pair<OnMetadataChangedListener, Executor> pair : list) {
OnMetadataChangedListener listener = pair.first;
Executor executor = pair.second;
@@ -2445,7 +2447,9 @@ public final class BluetoothAdapter {
try {
mServiceLock.readLock().lock();
if (mService != null) {
- return mService.getMostRecentlyConnectedDevices(mAttributionSource);
+ return Attributable.setAttributionSource(
+ mService.getMostRecentlyConnectedDevices(mAttributionSource),
+ mAttributionSource);
}
} catch (RemoteException e) {
Log.e(TAG, "", e);
@@ -2470,14 +2474,16 @@ public final class BluetoothAdapter {
@RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
public Set<BluetoothDevice> getBondedDevices() {
if (getState() != STATE_ON) {
- return toDeviceSet(new BluetoothDevice[0]);
+ return toDeviceSet(Arrays.asList());
}
try {
mServiceLock.readLock().lock();
if (mService != null) {
- return toDeviceSet(mService.getBondedDevices(mAttributionSource));
+ return toDeviceSet(Attributable.setAttributionSource(
+ Arrays.asList(mService.getBondedDevices(mAttributionSource)),
+ mAttributionSource));
}
- return toDeviceSet(new BluetoothDevice[0]);
+ return toDeviceSet(Arrays.asList());
} catch (RemoteException e) {
Log.e(TAG, "", e);
} finally {
@@ -3165,10 +3171,10 @@ public final class BluetoothAdapter {
}
}
}
- synchronized (sMetadataListeners) {
- sMetadataListeners.forEach((device, pair) -> {
+ synchronized (mMetadataListeners) {
+ mMetadataListeners.forEach((device, pair) -> {
try {
- mService.registerMetadataListener(sBluetoothMetadataListener,
+ mService.registerMetadataListener(mBluetoothMetadataListener,
device, mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "Failed to register metadata listener", e);
@@ -3455,8 +3461,8 @@ public final class BluetoothAdapter {
}
}
- private Set<BluetoothDevice> toDeviceSet(BluetoothDevice[] devices) {
- Set<BluetoothDevice> deviceSet = new HashSet<BluetoothDevice>(Arrays.asList(devices));
+ private Set<BluetoothDevice> toDeviceSet(List<BluetoothDevice> devices) {
+ Set<BluetoothDevice> deviceSet = new HashSet<BluetoothDevice>(devices);
return Collections.unmodifiableSet(deviceSet);
}
@@ -3926,13 +3932,13 @@ public final class BluetoothAdapter {
throw new NullPointerException("executor is null");
}
- synchronized (sMetadataListeners) {
+ synchronized (mMetadataListeners) {
List<Pair<OnMetadataChangedListener, Executor>> listenerList =
- sMetadataListeners.get(device);
+ mMetadataListeners.get(device);
if (listenerList == null) {
// Create new listener/executor list for registeration
listenerList = new ArrayList<>();
- sMetadataListeners.put(device, listenerList);
+ mMetadataListeners.put(device, listenerList);
} else {
// Check whether this device was already registed by the lisenter
if (listenerList.stream().anyMatch((pair) -> (pair.first.equals(listener)))) {
@@ -3946,7 +3952,7 @@ public final class BluetoothAdapter {
boolean ret = false;
try {
- ret = service.registerMetadataListener(sBluetoothMetadataListener, device,
+ ret = service.registerMetadataListener(mBluetoothMetadataListener, device,
mAttributionSource);
} catch (RemoteException e) {
Log.e(TAG, "registerMetadataListener fail", e);
@@ -3956,7 +3962,7 @@ public final class BluetoothAdapter {
listenerList.remove(listenerPair);
if (listenerList.isEmpty()) {
// Remove the device if its listener list is empty
- sMetadataListeners.remove(device);
+ mMetadataListeners.remove(device);
}
}
}
@@ -3995,17 +4001,17 @@ public final class BluetoothAdapter {
throw new NullPointerException("listener is null");
}
- synchronized (sMetadataListeners) {
- if (!sMetadataListeners.containsKey(device)) {
+ synchronized (mMetadataListeners) {
+ if (!mMetadataListeners.containsKey(device)) {
throw new IllegalArgumentException("device was not registered");
}
// Remove issued listener from the registered device
- sMetadataListeners.get(device).removeIf((pair) -> (pair.first.equals(listener)));
+ mMetadataListeners.get(device).removeIf((pair) -> (pair.first.equals(listener)));
- if (sMetadataListeners.get(device).isEmpty()) {
+ if (mMetadataListeners.get(device).isEmpty()) {
// Unregister to Bluetooth service if all listeners are removed from
// the registered device
- sMetadataListeners.remove(device);
+ mMetadataListeners.remove(device);
final IBluetooth service = mService;
if (service == null) {
// Bluetooth is OFF, do nothing to Bluetooth service.
@@ -4045,6 +4051,7 @@ public final class BluetoothAdapter {
new IBluetoothConnectionCallback.Stub() {
@Override
public void onDeviceConnected(BluetoothDevice device) {
+ Attributable.setAttributionSource(device, mAttributionSource);
for (Map.Entry<BluetoothConnectionCallback, Executor> callbackExecutorEntry:
mBluetoothConnectionCallbackExecutorMap.entrySet()) {
BluetoothConnectionCallback callback = callbackExecutorEntry.getKey();
@@ -4055,6 +4062,7 @@ public final class BluetoothAdapter {
@Override
public void onDeviceDisconnected(BluetoothDevice device, int hciReason) {
+ Attributable.setAttributionSource(device, mAttributionSource);
for (Map.Entry<BluetoothConnectionCallback, Executor> callbackExecutorEntry:
mBluetoothConnectionCallbackExecutorMap.entrySet()) {
BluetoothConnectionCallback callback = callbackExecutorEntry.getKey();