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

Commit 767dde89 authored by Chienyuan Huang's avatar Chienyuan Huang Committed by Gerrit Code Review
Browse files

Merge "Defined value for AD type filter"

parents 56ddf94a 8f416cdb
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;