Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea52908c authored by Chienyuan Huang's avatar Chienyuan Huang Committed by Automerger Merge Worker
Browse files

Merge "Defined value for AD type filter" am: 767dde89 am: 5b35270b

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2020595

Change-Id: I0d659d88adb8d9f03e9a3ce73cceff0a374e8e63
parents 45840994 5b35270b
Loading
Loading
Loading
Loading
+49 −1
Original line number Diff line number Diff line
@@ -1274,7 +1274,8 @@ package android.bluetooth.le {
  public static final class ScanFilter.Builder {
    ctor public ScanFilter.Builder();
    method public android.bluetooth.le.ScanFilter build();
    method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataWithType(int, @Nullable byte[], @Nullable byte[]);
    method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataType(int);
    method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataTypeWithData(int, @NonNull byte[], @NonNull byte[]);
    method public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(String);
    method public android.bluetooth.le.ScanFilter.Builder setDeviceName(String);
    method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[]);
@@ -1299,6 +1300,53 @@ package android.bluetooth.le {
    method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids();
    method public java.util.List<android.os.ParcelUuid> getServiceUuids();
    method public int getTxPowerLevel();
    field public static final int DATA_TYPE_3D_INFORMATION_DATA = 61; // 0x3d
    field public static final int DATA_TYPE_ADVERTISING_INTERVAL = 26; // 0x1a
    field public static final int DATA_TYPE_ADVERTISING_INTERVAL_LONG = 47; // 0x2f
    field public static final int DATA_TYPE_APPEARANCE = 25; // 0x19
    field public static final int DATA_TYPE_BIG_INFO = 44; // 0x2c
    field public static final int DATA_TYPE_BROADCAST_CODE = 45; // 0x2d
    field public static final int DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION = 40; // 0x28
    field public static final int DATA_TYPE_CLASS_OF_DEVICE = 13; // 0xd
    field public static final int DATA_TYPE_DEVICE_ID = 16; // 0x10
    field public static final int DATA_TYPE_FLAGS = 1; // 0x1
    field public static final int DATA_TYPE_INDOOR_POSITIONING = 37; // 0x25
    field public static final int DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 27; // 0x1b
    field public static final int DATA_TYPE_LE_ROLE = 28; // 0x1c
    field public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 34; // 0x22
    field public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 35; // 0x23
    field public static final int DATA_TYPE_LE_SUPPORTED_FEATURES = 39; // 0x27
    field public static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 9; // 0x9
    field public static final int DATA_TYPE_LOCAL_NAME_SHORT = 8; // 0x8
    field public static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 255; // 0xff
    field public static final int DATA_TYPE_MESH_BEACON = 43; // 0x2b
    field public static final int DATA_TYPE_MESH_MESSAGE = 42; // 0x2a
    field public static final int DATA_TYPE_NONE = -1; // 0xffffffff
    field public static final int DATA_TYPE_PB_ADV = 41; // 0x29
    field public static final int DATA_TYPE_PUBLIC_TARGET_ADDRESS = 23; // 0x17
    field public static final int DATA_TYPE_RANDOM_TARGET_ADDRESS = 24; // 0x18
    field public static final int DATA_TYPE_RESOLVABLE_SET_IDENTIFIER = 46; // 0x2e
    field public static final int DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS = 17; // 0x11
    field public static final int DATA_TYPE_SERVICE_DATA_128_BIT = 33; // 0x21
    field public static final int DATA_TYPE_SERVICE_DATA_16_BIT = 22; // 0x16
    field public static final int DATA_TYPE_SERVICE_DATA_32_BIT = 32; // 0x20
    field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 21; // 0x15
    field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 20; // 0x14
    field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 31; // 0x1f
    field public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 7; // 0x7
    field public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 6; // 0x6
    field public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 3; // 0x3
    field public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 2; // 0x2
    field public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 5; // 0x5
    field public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 4; // 0x4
    field public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C = 14; // 0xe
    field public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 = 29; // 0x1d
    field public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R = 15; // 0xf
    field public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 = 30; // 0x1e
    field public static final int DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 18; // 0x12
    field public static final int DATA_TYPE_TRANSPORT_DISCOVERY_DATA = 38; // 0x26
    field public static final int DATA_TYPE_TX_POWER_LEVEL = 10; // 0xa
    field public static final int DATA_TYPE_URI = 36; // 0x24
  }

  public final class ScanResult implements android.os.Parcelable {
+44 −10
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.annotation.SystemApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothDevice.AddressType;
import android.bluetooth.le.ScanRecord.AdvertisingDataType;
import android.os.Parcel;
import android.os.ParcelUuid;
import android.os.Parcelable;
@@ -43,6 +44,7 @@ import java.util.UUID;
 * <li>Mac address of the remote device.
 * <li>Service data which is the data associated with a service.
 * <li>Manufacturer specific data which is the data associated with a particular manufacturer.
 * <li>Advertising data type and corresponding data.
 *
 * @see ScanResult
 * @see BluetoothLeScanner
@@ -83,7 +85,7 @@ public final class ScanFilter implements Parcelable {
    @Nullable
    private final byte[] mManufacturerDataMask;

    private int mAdvertisingDataType = -1;
    private int mAdvertisingDataType = ScanRecord.DATA_TYPE_NONE;
    @Nullable
    private final byte[] mAdvertisingData;
    @Nullable
@@ -303,7 +305,7 @@ public final class ScanFilter implements Parcelable {
                    advertisingDataMask = new byte[advertisingDataMaskLength];
                    in.readByteArray(advertisingDataMask);
                }
                builder.setAdvertisingDataWithType(advertisingDataType, advertisingData,
                builder.setAdvertisingDataTypeWithData(advertisingDataType, advertisingData,
                        advertisingDataMask);
            }

@@ -403,16 +405,26 @@ public final class ScanFilter implements Parcelable {
    }

    /**
     * Returns the advertising data type. -1 if the type is not set.
     * Returns the advertising data type of this filter.
     * Returns {@link ScanRecord#DATA_TYPE_NONE} if the type is not set.
     * The values of advertising data type are defined in the Bluetooth Generic Access Profile
     * (https://www.bluetooth.com/specifications/assigned-numbers/)
    */
    @AdvertisingDataType
    public int getAdvertisingDataType() {
        return mAdvertisingDataType;
    }

    /**
     * Returns the advertising data of this filter.
    */
    public @Nullable byte[] getAdvertisingData() {
        return mAdvertisingData;
    }

    /**
     * Returns the advertising data mask of this filter.
    */
    public @Nullable byte[] getAdvertisingDataMask() {
        return mAdvertisingDataMask;
    }
@@ -477,7 +489,7 @@ public final class ScanFilter implements Parcelable {
        }

        // Advertising data type match
        if (mAdvertisingDataType >= 0) {
        if (mAdvertisingDataType > 0) {
            byte[] advertisingData = scanRecord.getAdvertisingDataMap().get(mAdvertisingDataType);
            if (advertisingData == null || !matchesPartialData(mAdvertisingData,
                    mAdvertisingDataMask, advertisingData)) {
@@ -665,7 +677,7 @@ public final class ScanFilter implements Parcelable {
        private byte[] mManufacturerData;
        private byte[] mManufacturerDataMask;

        private int mAdvertisingDataType = -1;
        private int mAdvertisingDataType = ScanRecord.DATA_TYPE_NONE;
        private byte[] mAdvertisingData;
        private byte[] mAdvertisingDataMask;

@@ -978,15 +990,19 @@ public final class ScanFilter implements Parcelable {
         * For any bit in the mask, set it the 1 if it needs to match the one in
         * advertising data, otherwise set it to 0.
         * <p>
         * The values of {@code advertisingDataType} are assigned by Bluetooth SIG. For more
         * details refer to Bluetooth Generic Access Profile.
         * (https://www.bluetooth.com/specifications/assigned-numbers/)
         * The {@code advertisingDataMask} must have the same length of {@code advertisingData}.
         *
         * @throws IllegalArgumentException If the {@code advertisingDataType} is invalid, {@code
         * advertisingData} is null while {@code advertisingDataMask} is not, or {@code
         * advertisingData} or {@code advertisingDataMask} is null or {@code
         * advertisingData} and {@code advertisingDataMask} have different length.
         */
        public @NonNull Builder setAdvertisingDataWithType(int advertisingDataType,
                @Nullable byte[] advertisingData, @Nullable byte[] advertisingDataMask) {
            if (advertisingDataType < -1) {
        public @NonNull Builder setAdvertisingDataTypeWithData(
                @AdvertisingDataType int advertisingDataType, @NonNull byte[] advertisingData,
                @NonNull byte[] advertisingDataMask) {
            if (advertisingDataType < 0) {
                throw new IllegalArgumentException("invalid advertising data type");
            }
            if (mAdvertisingDataMask != null) {
@@ -1007,6 +1023,24 @@ public final class ScanFilter implements Parcelable {
            return this;
        }


        /**
         * Set filter on advertising data with specific advertising data type.
         * <p>
         * The values of {@code advertisingDataType} are assigned by Bluetooth SIG. For more
         * details refer to Bluetooth Generic Access Profile.
         * (https://www.bluetooth.com/specifications/assigned-numbers/)
         * @throws IllegalArgumentException If the {@code advertisingDataType} is invalid
         */
        public @NonNull Builder setAdvertisingDataType(
                @AdvertisingDataType int advertisingDataType) {
            if (advertisingDataType < 0) {
                throw new IllegalArgumentException("invalid advertising data type");
            }
            mAdvertisingDataType = advertisingDataType;
            return this;
        }

        /**
         * Build {@link ScanFilter}.
         *
+105 −18
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.bluetooth.le;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
@@ -26,6 +27,8 @@ import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseArray;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -41,25 +44,107 @@ public final class ScanRecord {

    private static final String TAG = "ScanRecord";

    /** @hide */
    @IntDef(prefix = "DATA_TYPE_", value = {
        DATA_TYPE_FLAGS,
        DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL,
        DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE,
        DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL,
        DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE,
        DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL,
        DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE,
        DATA_TYPE_LOCAL_NAME_SHORT,
        DATA_TYPE_LOCAL_NAME_COMPLETE,
        DATA_TYPE_TX_POWER_LEVEL,
        DATA_TYPE_CLASS_OF_DEVICE,
        DATA_TYPE_SIMPLE_PAIRING_HASH_C,
        DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R,
        DATA_TYPE_DEVICE_ID,
        DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS,
        DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE,
        DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT,
        DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT,
        DATA_TYPE_SERVICE_DATA_16_BIT,
        DATA_TYPE_PUBLIC_TARGET_ADDRESS,
        DATA_TYPE_RANDOM_TARGET_ADDRESS,
        DATA_TYPE_APPEARANCE,
        DATA_TYPE_ADVERTISING_INTERVAL,
        DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS,
        DATA_TYPE_LE_ROLE,
        DATA_TYPE_SIMPLE_PAIRING_HASH_C_256,
        DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256,
        DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT,
        DATA_TYPE_SERVICE_DATA_32_BIT,
        DATA_TYPE_SERVICE_DATA_128_BIT,
        DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE,
        DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE,
        DATA_TYPE_URI,
        DATA_TYPE_INDOOR_POSITIONING,
        DATA_TYPE_TRANSPORT_DISCOVERY_DATA,
        DATA_TYPE_LE_SUPPORTED_FEATURES,
        DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION,
        DATA_TYPE_PB_ADV,
        DATA_TYPE_MESH_MESSAGE,
        DATA_TYPE_MESH_BEACON,
        DATA_TYPE_BIG_INFO,
        DATA_TYPE_BROADCAST_CODE,
        DATA_TYPE_RESOLVABLE_SET_IDENTIFIER,
        DATA_TYPE_ADVERTISING_INTERVAL_LONG,
        DATA_TYPE_3D_INFORMATION_DATA,
        DATA_TYPE_MANUFACTURER_SPECIFIC_DATA,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface AdvertisingDataType {}

    // The following data type values are assigned by Bluetooth SIG.
    // For more details refer to Bluetooth 4.1 specification, Volume 3, Part C, Section 18.
    private static final int DATA_TYPE_FLAGS = 0x01;
    private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 0x02;
    private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03;
    private static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 0x04;
    private static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 0x05;
    private static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 0x06;
    private static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07;
    private static final int DATA_TYPE_LOCAL_NAME_SHORT = 0x08;
    private static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09;
    private static final int DATA_TYPE_TX_POWER_LEVEL = 0x0A;
    private static final int DATA_TYPE_SERVICE_DATA_16_BIT = 0x16;
    private static final int DATA_TYPE_SERVICE_DATA_32_BIT = 0x20;
    private static final int DATA_TYPE_SERVICE_DATA_128_BIT = 0x21;
    private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 0x14;
    private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 0x1F;
    private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 0x15;
    private static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF;
    // For more details refer to Bluetooth Generic Access Profile.
    public static final int DATA_TYPE_NONE = -1;
    public static final int DATA_TYPE_FLAGS = 0x01;
    public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 0x02;
    public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03;
    public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 0x04;
    public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 0x05;
    public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 0x06;
    public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07;
    public static final int DATA_TYPE_LOCAL_NAME_SHORT = 0x08;
    public static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09;
    public static final int DATA_TYPE_TX_POWER_LEVEL = 0x0A;
    public static final int DATA_TYPE_CLASS_OF_DEVICE = 0x0D;
    public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C = 0x0E;
    public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R = 0x0F;
    public static final int DATA_TYPE_DEVICE_ID = 0x10;
    public static final int DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS = 0x11;
    public static final int DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 0x12;
    public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 0x14;
    public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 0x15;
    public static final int DATA_TYPE_SERVICE_DATA_16_BIT = 0x16;
    public static final int DATA_TYPE_PUBLIC_TARGET_ADDRESS = 0x17;
    public static final int DATA_TYPE_RANDOM_TARGET_ADDRESS = 0x18;
    public static final int DATA_TYPE_APPEARANCE = 0x19;
    public static final int DATA_TYPE_ADVERTISING_INTERVAL = 0x1A;
    public static final int DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 0x1B;
    public static final int DATA_TYPE_LE_ROLE = 0x1C;
    public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 = 0x1D;
    public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 = 0x1E;
    public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 0x1F;
    public static final int DATA_TYPE_SERVICE_DATA_32_BIT = 0x20;
    public static final int DATA_TYPE_SERVICE_DATA_128_BIT = 0x21;
    public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 0x22;
    public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 0x23;
    public static final int DATA_TYPE_URI = 0x24;
    public static final int DATA_TYPE_INDOOR_POSITIONING = 0x25;
    public static final int DATA_TYPE_TRANSPORT_DISCOVERY_DATA = 0x26;
    public static final int DATA_TYPE_LE_SUPPORTED_FEATURES = 0x27;
    public static final int DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION = 0x28;
    public static final int DATA_TYPE_PB_ADV = 0x29;
    public static final int DATA_TYPE_MESH_MESSAGE = 0x2A;
    public static final int DATA_TYPE_MESH_BEACON = 0x2B;
    public static final int DATA_TYPE_BIG_INFO = 0x2C;
    public static final int DATA_TYPE_BROADCAST_CODE = 0x2D;
    public static final int DATA_TYPE_RESOLVABLE_SET_IDENTIFIER = 0x2E;
    public static final int DATA_TYPE_ADVERTISING_INTERVAL_LONG = 0x2F;
    public static final int DATA_TYPE_3D_INFORMATION_DATA = 0x3D;
    public static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF;

    // Flags of the advertising data.
    private final int mAdvertiseFlags;
@@ -170,6 +255,8 @@ public final class ScanRecord {

    /**
     * Returns a map of advertising data type and its corresponding advertising data.
     * The values of advertising data type are defined in the Bluetooth Generic Access Profile
     * (https://www.bluetooth.com/specifications/assigned-numbers/)
     */
    public @NonNull Map<Integer, byte[]> getAdvertisingDataMap() {
        return mAdvertisingDataMap;