summaryrefslogtreecommitdiff
path: root/framework/java
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-03-04 17:16:28 -0800
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2025-03-04 17:16:28 -0800
commitb1513c7f2d3dd781a97d4cc6aaf4d68b2e5c2215 (patch)
treeba79a79369000b773e123065023815488178b93c /framework/java
parent73d351bd7666a0bf3513fb2343e571a40f5c4feb (diff)
parent959a6f087d9e5b3a143edd2d5f4a7b6c93791faf (diff)
Merge "Optimize and clean up BluetoothLeAdvertiser" into main
Diffstat (limited to 'framework/java')
-rw-r--r--framework/java/android/bluetooth/le/BluetoothLeAdvertiser.java135
1 files changed, 46 insertions, 89 deletions
diff --git a/framework/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/framework/java/android/bluetooth/le/BluetoothLeAdvertiser.java
index f4fee92e69..87c9e35aed 100644
--- a/framework/java/android/bluetooth/le/BluetoothLeAdvertiser.java
+++ b/framework/java/android/bluetooth/le/BluetoothLeAdvertiser.java
@@ -44,6 +44,7 @@ import android.util.Log;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -66,10 +67,6 @@ public final class BluetoothLeAdvertiser {
private static final int FLAGS_FIELD_BYTES = 3;
private static final int MANUFACTURER_SPECIFIC_DATA_LENGTH = 2;
- private final BluetoothAdapter mBluetoothAdapter;
- private final AttributionSource mAttributionSource;
-
- private final Handler mHandler;
private final Map<AdvertiseCallback, AdvertisingSetCallback> mLegacyAdvertisers =
new HashMap<>();
private final Map<AdvertisingSetCallback, IAdvertisingSetCallback> mCallbackWrappers =
@@ -77,6 +74,10 @@ public final class BluetoothLeAdvertiser {
private final Map<Integer, AdvertisingSet> mAdvertisingSets =
Collections.synchronizedMap(new HashMap<>());
+ private final BluetoothAdapter mBluetoothAdapter;
+ private final AttributionSource mAttributionSource;
+ private final Handler mHandler;
+
/**
* Use BluetoothAdapter.getLeAdvertiser() instead.
*
@@ -611,7 +612,6 @@ public final class BluetoothLeAdvertiser {
}
IBluetoothAdvertise advertise = mBluetoothAdapter.getBluetoothAdvertise();
-
if (advertise == null) {
Log.e(TAG, "Bluetooth Advertise is null");
postStartSetFailure(
@@ -696,71 +696,17 @@ public final class BluetoothLeAdvertiser {
if (data == null) return 0;
// Flags field is omitted if the advertising is not connectable.
int size = (isFlagsIncluded) ? FLAGS_FIELD_BYTES : 0;
- if (data.getServiceUuids() != null) {
- int num16BitUuids = 0;
- int num32BitUuids = 0;
- int num128BitUuids = 0;
- for (ParcelUuid uuid : data.getServiceUuids()) {
- if (BluetoothUuid.is16BitUuid(uuid)) {
- ++num16BitUuids;
- } else if (BluetoothUuid.is32BitUuid(uuid)) {
- ++num32BitUuids;
- } else {
- ++num128BitUuids;
- }
- }
- // 16 bit service uuids are grouped into one field when doing advertising.
- if (num16BitUuids != 0) {
- size += OVERHEAD_BYTES_PER_FIELD + num16BitUuids * BluetoothUuid.UUID_BYTES_16_BIT;
- }
- // 32 bit service uuids are grouped into one field when doing advertising.
- if (num32BitUuids != 0) {
- size += OVERHEAD_BYTES_PER_FIELD + num32BitUuids * BluetoothUuid.UUID_BYTES_32_BIT;
- }
- // 128 bit service uuids are grouped into one field when doing advertising.
- if (num128BitUuids != 0) {
- size +=
- OVERHEAD_BYTES_PER_FIELD
- + num128BitUuids * BluetoothUuid.UUID_BYTES_128_BIT;
- }
- }
- if (data.getServiceSolicitationUuids() != null) {
- int num16BitUuids = 0;
- int num32BitUuids = 0;
- int num128BitUuids = 0;
- for (ParcelUuid uuid : data.getServiceSolicitationUuids()) {
- if (BluetoothUuid.is16BitUuid(uuid)) {
- ++num16BitUuids;
- } else if (BluetoothUuid.is32BitUuid(uuid)) {
- ++num32BitUuids;
- } else {
- ++num128BitUuids;
- }
- }
- // 16 bit service uuids are grouped into one field when doing advertising.
- if (num16BitUuids != 0) {
- size += OVERHEAD_BYTES_PER_FIELD + num16BitUuids * BluetoothUuid.UUID_BYTES_16_BIT;
- }
- // 32 bit service uuids are grouped into one field when doing advertising.
- if (num32BitUuids != 0) {
- size += OVERHEAD_BYTES_PER_FIELD + num32BitUuids * BluetoothUuid.UUID_BYTES_32_BIT;
- }
- // 128 bit service uuids are grouped into one field when doing advertising.
- if (num128BitUuids != 0) {
- size +=
- OVERHEAD_BYTES_PER_FIELD
- + num128BitUuids * BluetoothUuid.UUID_BYTES_128_BIT;
- }
- }
+ size += calculateUuidsSize(data.getServiceUuids());
+ size += calculateUuidsSize(data.getServiceSolicitationUuids());
+
for (TransportDiscoveryData transportDiscoveryData : data.getTransportDiscoveryData()) {
size += OVERHEAD_BYTES_PER_FIELD + transportDiscoveryData.totalBytes();
}
- for (ParcelUuid uuid : data.getServiceData().keySet()) {
- int uuidLen = BluetoothUuid.uuidToBytes(uuid).length;
- size +=
- OVERHEAD_BYTES_PER_FIELD
- + uuidLen
- + byteLength(data.getServiceData().get(uuid));
+ for (Map.Entry<ParcelUuid, byte[]> entry : data.getServiceData().entrySet()) {
+ final ParcelUuid uuid = entry.getKey();
+ final byte[] serviceData = entry.getValue();
+ final int uuidLen = BluetoothUuid.uuidToBytes(uuid).length;
+ size += OVERHEAD_BYTES_PER_FIELD + uuidLen + byteLength(serviceData);
}
for (int i = 0; i < data.getManufacturerSpecificData().size(); ++i) {
size +=
@@ -780,6 +726,36 @@ public final class BluetoothLeAdvertiser {
return size;
}
+ private static int calculateUuidsSize(List<ParcelUuid> uuids) {
+ if (uuids == null) return 0;
+ int num16BitUuids = 0;
+ int num32BitUuids = 0;
+ int num128BitUuids = 0;
+ for (ParcelUuid uuid : uuids) {
+ if (BluetoothUuid.is16BitUuid(uuid)) {
+ ++num16BitUuids;
+ } else if (BluetoothUuid.is32BitUuid(uuid)) {
+ ++num32BitUuids;
+ } else {
+ ++num128BitUuids;
+ }
+ }
+ int size = 0;
+ // 16 bit service uuids are grouped into one field when doing advertising.
+ if (num16BitUuids != 0) {
+ size += OVERHEAD_BYTES_PER_FIELD + num16BitUuids * BluetoothUuid.UUID_BYTES_16_BIT;
+ }
+ // 32 bit service uuids are grouped into one field when doing advertising.
+ if (num32BitUuids != 0) {
+ size += OVERHEAD_BYTES_PER_FIELD + num32BitUuids * BluetoothUuid.UUID_BYTES_32_BIT;
+ }
+ // 128 bit service uuids are grouped into one field when doing advertising.
+ if (num128BitUuids != 0) {
+ size += OVERHEAD_BYTES_PER_FIELD + num128BitUuids * BluetoothUuid.UUID_BYTES_128_BIT;
+ }
+ return size;
+ }
+
private static int byteLength(byte[] array) {
return array == null ? 0 : array.length;
}
@@ -898,36 +874,17 @@ public final class BluetoothLeAdvertiser {
@SuppressLint("AndroidFrameworkBluetoothPermission")
private static void postStartSetFailure(
Handler handler, final AdvertisingSetCallback callback, final int error) {
- handler.post(
- new Runnable() {
- @Override
- public void run() {
- callback.onAdvertisingSetStarted(null, 0, error);
- }
- });
+ handler.post(() -> callback.onAdvertisingSetStarted(null, 0, error));
}
@SuppressLint("AndroidFrameworkBluetoothPermission")
private void postStartFailure(final AdvertiseCallback callback, final int error) {
- mHandler.post(
- new Runnable() {
- @Override
- public void run() {
- callback.onStartFailure(error);
- }
- });
+ mHandler.post(() -> callback.onStartFailure(error));
}
@SuppressLint("AndroidFrameworkBluetoothPermission")
private void postStartSuccess(
final AdvertiseCallback callback, final AdvertiseSettings settings) {
- mHandler.post(
- new Runnable() {
-
- @Override
- public void run() {
- callback.onStartSuccess(settings);
- }
- });
+ mHandler.post(() -> callback.onStartSuccess(settings));
}
}