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

Commit f28ab362 authored by Md Shahriar Hossain Sajib's avatar Md Shahriar Hossain Sajib Committed by Gerrit Code Review
Browse files

Merge "le advertisement address type settings"

parents 649c2ea2 d5e7c4d0
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -2264,6 +2264,25 @@ package android.bluetooth {
package android.bluetooth.le {
  public final class AdvertiseSettings implements android.os.Parcelable {
    method public int getOwnAddressType();
  }
  public static final class AdvertiseSettings.Builder {
    method @NonNull public android.bluetooth.le.AdvertiseSettings.Builder setOwnAddressType(int);
  }
  public final class AdvertisingSetParameters implements android.os.Parcelable {
    method public int getOwnAddressType();
    field public static final int ADDRESS_TYPE_DEFAULT = -1; // 0xffffffff
    field public static final int ADDRESS_TYPE_PUBLIC = 0; // 0x0
    field public static final int ADDRESS_TYPE_RANDOM = 1; // 0x1
  }
  public static final class AdvertisingSetParameters.Builder {
    method @NonNull public android.bluetooth.le.AdvertisingSetParameters.Builder setOwnAddressType(int);
  }
  public final class BluetoothLeScanner {
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(android.os.WorkSource, android.bluetooth.le.ScanCallback);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.os.WorkSource, android.bluetooth.le.ScanCallback);
+45 −3
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package android.bluetooth.le;

import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.bluetooth.le.AdvertisingSetParameters.AddressTypeStatus;
import android.os.Parcel;
import android.os.Parcelable;

@@ -70,17 +73,21 @@ public final class AdvertiseSettings implements Parcelable {
     */
    private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000;


    private final int mAdvertiseMode;
    private final int mAdvertiseTxPowerLevel;
    private final int mAdvertiseTimeoutMillis;
    private final boolean mAdvertiseConnectable;
    private final int mOwnAddressType;

    private AdvertiseSettings(int advertiseMode, int advertiseTxPowerLevel,
            boolean advertiseConnectable, int advertiseTimeout) {
            boolean advertiseConnectable, int advertiseTimeout,
            @AddressTypeStatus int ownAddressType) {
        mAdvertiseMode = advertiseMode;
        mAdvertiseTxPowerLevel = advertiseTxPowerLevel;
        mAdvertiseConnectable = advertiseConnectable;
        mAdvertiseTimeoutMillis = advertiseTimeout;
        mOwnAddressType = ownAddressType;
    }

    private AdvertiseSettings(Parcel in) {
@@ -88,6 +95,7 @@ public final class AdvertiseSettings implements Parcelable {
        mAdvertiseTxPowerLevel = in.readInt();
        mAdvertiseConnectable = in.readInt() != 0;
        mAdvertiseTimeoutMillis = in.readInt();
        mOwnAddressType = in.readInt();
    }

    /**
@@ -118,12 +126,23 @@ public final class AdvertiseSettings implements Parcelable {
        return mAdvertiseTimeoutMillis;
    }

    /**
     * @return the own address type for advertising
     *
     * @hide
     */
    @SystemApi
    public @AddressTypeStatus int getOwnAddressType() {
        return mOwnAddressType;
    }

    @Override
    public String toString() {
        return "Settings [mAdvertiseMode=" + mAdvertiseMode
                + ", mAdvertiseTxPowerLevel=" + mAdvertiseTxPowerLevel
                + ", mAdvertiseConnectable=" + mAdvertiseConnectable
                + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis + "]";
                + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis
                + ", mOwnAddressType=" + mOwnAddressType + "]";
    }

    @Override
@@ -137,6 +156,7 @@ public final class AdvertiseSettings implements Parcelable {
        dest.writeInt(mAdvertiseTxPowerLevel);
        dest.writeInt(mAdvertiseConnectable ? 1 : 0);
        dest.writeInt(mAdvertiseTimeoutMillis);
        dest.writeInt(mOwnAddressType);
    }

    public static final @android.annotation.NonNull Parcelable.Creator<AdvertiseSettings> CREATOR =
@@ -160,6 +180,7 @@ public final class AdvertiseSettings implements Parcelable {
        private int mTxPowerLevel = ADVERTISE_TX_POWER_MEDIUM;
        private int mTimeoutMillis = 0;
        private boolean mConnectable = true;
        private int mOwnAddressType = AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT;

        /**
         * Set advertise mode to control the advertising power and latency.
@@ -225,11 +246,32 @@ public final class AdvertiseSettings implements Parcelable {
            return this;
        }

        /**
         * Set own address type for advertising to control public or privacy mode. If used to set
         * address type anything other than {@link AdvertisingSetParameters#ADDRESS_TYPE_DEFAULT},
         * then it will require BLUETOOTH_PRIVILEGED permission and will be checked at the
         * time of starting advertising.
         *
         * @throws IllegalArgumentException If the {@code ownAddressType} is invalid
         *
         * @hide
         */
        @SystemApi
        public @NonNull Builder setOwnAddressType(@AddressTypeStatus int ownAddressType) {
            if (ownAddressType < AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT
                    ||  ownAddressType > AdvertisingSetParameters.ADDRESS_TYPE_RANDOM) {
                throw new IllegalArgumentException("unknown address type " + ownAddressType);
            }
            mOwnAddressType = ownAddressType;
            return this;
        }

        /**
         * Build the {@link AdvertiseSettings} object.
         */
        public AdvertiseSettings build() {
            return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis);
            return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis,
                mOwnAddressType);
        }
    }
}
+79 −3
Original line number Diff line number Diff line
@@ -16,11 +16,17 @@

package android.bluetooth.le;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * The {@link AdvertisingSetParameters} provide a way to adjust advertising
 * preferences for each
@@ -97,6 +103,39 @@ public final class AdvertisingSetParameters implements Parcelable {
     */
    private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000;

    /** @hide */
    @IntDef(prefix = "ADDRESS_TYPE_", value = {
        ADDRESS_TYPE_DEFAULT,
        ADDRESS_TYPE_PUBLIC,
        ADDRESS_TYPE_RANDOM
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface AddressTypeStatus {}

    /**
     * Advertise own address type that corresponds privacy settings of the device.
     *
     * @hide
     */
    @SystemApi
    public static final int ADDRESS_TYPE_DEFAULT = -1;

    /**
     * Advertise own public address type.
     *
     * @hide
     */
    @SystemApi
    public static final int ADDRESS_TYPE_PUBLIC = 0;

    /**
     * Generate and adverise own resolvable private address.
     *
     * @hide
     */
    @SystemApi
    public static final int ADDRESS_TYPE_RANDOM = 1;

    private final boolean mIsLegacy;
    private final boolean mIsAnonymous;
    private final boolean mIncludeTxPower;
@@ -106,11 +145,12 @@ public final class AdvertisingSetParameters implements Parcelable {
    private final boolean mScannable;
    private final int mInterval;
    private final int mTxPowerLevel;
    private final int mOwnAddressType;

    private AdvertisingSetParameters(boolean connectable, boolean scannable, boolean isLegacy,
            boolean isAnonymous, boolean includeTxPower,
            int primaryPhy, int secondaryPhy,
            int interval, int txPowerLevel) {
            int interval, int txPowerLevel, @AddressTypeStatus int ownAddressType) {
        mConnectable = connectable;
        mScannable = scannable;
        mIsLegacy = isLegacy;
@@ -120,6 +160,7 @@ public final class AdvertisingSetParameters implements Parcelable {
        mSecondaryPhy = secondaryPhy;
        mInterval = interval;
        mTxPowerLevel = txPowerLevel;
        mOwnAddressType = ownAddressType;
    }

    private AdvertisingSetParameters(Parcel in) {
@@ -132,6 +173,7 @@ public final class AdvertisingSetParameters implements Parcelable {
        mSecondaryPhy = in.readInt();
        mInterval = in.readInt();
        mTxPowerLevel = in.readInt();
        mOwnAddressType = in.readInt();
    }

    /**
@@ -197,6 +239,16 @@ public final class AdvertisingSetParameters implements Parcelable {
        return mTxPowerLevel;
    }

    /**
     * @return the own address type for advertising
     *
     * @hide
     */
    @SystemApi
    public @AddressTypeStatus int getOwnAddressType() {
        return mOwnAddressType;
    }

    @Override
    public String toString() {
        return "AdvertisingSetParameters [connectable=" + mConnectable
@@ -206,7 +258,8 @@ public final class AdvertisingSetParameters implements Parcelable {
                + ", primaryPhy=" + mPrimaryPhy
                + ", secondaryPhy=" + mSecondaryPhy
                + ", interval=" + mInterval
                + ", txPowerLevel=" + mTxPowerLevel + "]";
                + ", txPowerLevel=" + mTxPowerLevel
                + ", ownAddressType=" + mOwnAddressType + "]";
    }

    @Override
@@ -225,6 +278,7 @@ public final class AdvertisingSetParameters implements Parcelable {
        dest.writeInt(mSecondaryPhy);
        dest.writeInt(mInterval);
        dest.writeInt(mTxPowerLevel);
        dest.writeInt(mOwnAddressType);
    }

    public static final @android.annotation.NonNull Parcelable.Creator<AdvertisingSetParameters> CREATOR =
@@ -253,6 +307,7 @@ public final class AdvertisingSetParameters implements Parcelable {
        private int mSecondaryPhy = BluetoothDevice.PHY_LE_1M;
        private int mInterval = INTERVAL_LOW;
        private int mTxPowerLevel = TX_POWER_MEDIUM;
        private int mOwnAddressType = ADDRESS_TYPE_DEFAULT;

        /**
         * Set whether the advertisement type should be connectable or
@@ -398,6 +453,26 @@ public final class AdvertisingSetParameters implements Parcelable {
            return this;
        }

        /**
         * Set own address type for advertising to control public or privacy mode. If used to set
         * address type anything other than {@link AdvertisingSetParameters#ADDRESS_TYPE_DEFAULT},
         * then it will require BLUETOOTH_PRIVILEGED permission and will be checked at the
         * time of starting advertising.
         *
         * @throws IllegalArgumentException If the {@code ownAddressType} is invalid
         *
         * @hide
         */
        @SystemApi
        public @NonNull Builder setOwnAddressType(@AddressTypeStatus int ownAddressType) {
            if (ownAddressType < AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT
                    ||  ownAddressType > AdvertisingSetParameters.ADDRESS_TYPE_RANDOM) {
                throw new IllegalArgumentException("unknown address type " + ownAddressType);
            }
            mOwnAddressType = ownAddressType;
            return this;
        }

        /**
         * Build the {@link AdvertisingSetParameters} object.
         *
@@ -431,7 +506,8 @@ public final class AdvertisingSetParameters implements Parcelable {
            }

            return new AdvertisingSetParameters(mConnectable, mScannable, mIsLegacy, mIsAnonymous,
                    mIncludeTxPower, mPrimaryPhy, mSecondaryPhy, mInterval, mTxPowerLevel);
                    mIncludeTxPower, mPrimaryPhy, mSecondaryPhy, mInterval, mTxPowerLevel,
                    mOwnAddressType);
        }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ public final class BluetoothLeAdvertiser {
            parameters.setLegacyMode(true);
            parameters.setConnectable(isConnectable);
            parameters.setScannable(true); // legacy advertisements we support are always scannable
            parameters.setOwnAddressType(settings.getOwnAddressType());
            if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_LOW_POWER) {
                parameters.setInterval(1600); // 1s
            } else if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_BALANCED) {