From d12b5688f06b0f3428730262cf208713442f6f5b Mon Sep 17 00:00:00 2001 From: Jakub Pawlowski Date: Mon, 20 Mar 2017 15:57:46 -0700 Subject: [PATCH] Add setScannable to AdvertisingSetParameters (1/2) There must be a proper way to specify if advertisment is scannable, when updating the parameters. Test: manual Bug: 30622771 Change-Id: Ie520609d3fff07ccc2960015c19311d773842852 --- api/current.txt | 2 ++ api/system-current.txt | 2 ++ api/test-current.txt | 2 ++ .../le/AdvertisingSetParameters.java | 26 +++++++++++++++++-- .../bluetooth/le/BluetoothLeAdvertiser.java | 1 + 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index 98f2cc83a7186..cdaf151e2df5a 100644 --- a/api/current.txt +++ b/api/current.txt @@ -7544,6 +7544,7 @@ package android.bluetooth.le { method public boolean isAnonymous(); method public boolean isConnectable(); method public boolean isLegacy(); + method public boolean isScannable(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int INTERVAL_HIGH = 160; // 0xa0 @@ -7571,6 +7572,7 @@ package android.bluetooth.le { method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int); method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean); method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int); + method public android.bluetooth.le.AdvertisingSetParameters.Builder setScannable(boolean); method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int); method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int); } diff --git a/api/system-current.txt b/api/system-current.txt index a79c399c3182c..bd9b7e8852fc2 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7848,6 +7848,7 @@ package android.bluetooth.le { method public boolean isAnonymous(); method public boolean isConnectable(); method public boolean isLegacy(); + method public boolean isScannable(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int INTERVAL_HIGH = 160; // 0xa0 @@ -7875,6 +7876,7 @@ package android.bluetooth.le { method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int); method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean); method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int); + method public android.bluetooth.le.AdvertisingSetParameters.Builder setScannable(boolean); method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int); method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int); } diff --git a/api/test-current.txt b/api/test-current.txt index 60201f8598337..0f0ee997b9f72 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -7553,6 +7553,7 @@ package android.bluetooth.le { method public boolean isAnonymous(); method public boolean isConnectable(); method public boolean isLegacy(); + method public boolean isScannable(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int INTERVAL_HIGH = 160; // 0xa0 @@ -7580,6 +7581,7 @@ package android.bluetooth.le { method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int); method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean); method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int); + method public android.bluetooth.le.AdvertisingSetParameters.Builder setScannable(boolean); method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int); method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int); } diff --git a/core/java/android/bluetooth/le/AdvertisingSetParameters.java b/core/java/android/bluetooth/le/AdvertisingSetParameters.java index 59fef8d1d1ea1..fe1f425c4fc1b 100644 --- a/core/java/android/bluetooth/le/AdvertisingSetParameters.java +++ b/core/java/android/bluetooth/le/AdvertisingSetParameters.java @@ -116,14 +116,16 @@ public final class AdvertisingSetParameters implements Parcelable { private final int primaryPhy; private final int secondaryPhy; private final boolean connectable; + private final boolean scannable; private final int interval; private final int txPowerLevel; - private AdvertisingSetParameters(boolean connectable, boolean isLegacy, + private AdvertisingSetParameters(boolean connectable, boolean scannable, boolean isLegacy, boolean isAnonymous, boolean includeTxPower, int primaryPhy, int secondaryPhy, int interval, int txPowerLevel) { this.connectable = connectable; + this.scannable = scannable; this.isLegacy = isLegacy; this.isAnonymous = isAnonymous; this.includeTxPower = includeTxPower; @@ -135,6 +137,7 @@ public final class AdvertisingSetParameters implements Parcelable { private AdvertisingSetParameters(Parcel in) { connectable = in.readInt() != 0 ? true : false; + scannable = in.readInt() != 0 ? true : false; isLegacy = in.readInt() != 0 ? true : false; isAnonymous = in.readInt() != 0 ? true : false; includeTxPower = in.readInt() != 0 ? true : false; @@ -149,6 +152,11 @@ public final class AdvertisingSetParameters implements Parcelable { */ public boolean isConnectable() { return connectable; } + /** + * Returns whether the advertisement will be scannable. + */ + public boolean isScannable() { return scannable; } + /** * Returns whether the legacy advertisement will be used. */ @@ -204,6 +212,7 @@ public final class AdvertisingSetParameters implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(connectable ? 1 : 0); + dest.writeInt(scannable ? 1 : 0); dest.writeInt(isLegacy ? 1 : 0); dest.writeInt(isAnonymous ? 1 : 0); dest.writeInt(includeTxPower ? 1 : 0); @@ -232,6 +241,7 @@ public final class AdvertisingSetParameters implements Parcelable { public static final class Builder { private boolean connectable = true; + private boolean scannable = true; private boolean isLegacy = false; private boolean isAnonymous = false; private boolean includeTxPower = false; @@ -253,6 +263,18 @@ public final class AdvertisingSetParameters implements Parcelable { return this; } + /** + * Set whether the advertisement type should be scannable + * Legacy advertisements can be both connectable and scannable. Other + * advertisements can be scannable only if not connectable. + * @param scannable Controls whether the advertisment type will be + * scannable (true) or non-scannable (false). + */ + public Builder setScannable(boolean scannable) { + this.scannable = scannable; + return this; + } + /** * When set to true, advertising set will advertise 4.x Spec compliant * advertisements. @@ -371,7 +393,7 @@ public final class AdvertisingSetParameters implements Parcelable { * Build the {@link AdvertisingSetParameters} object. */ public AdvertisingSetParameters build() { - return new AdvertisingSetParameters(connectable, isLegacy, isAnonymous, + return new AdvertisingSetParameters(connectable, scannable, isLegacy, isAnonymous, includeTxPower, primaryPhy, secondaryPhy, interval, txPowerLevel); } diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java index 0f35608f8522a..ae012d9391e3e 100644 --- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java +++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java @@ -130,6 +130,7 @@ public final class BluetoothLeAdvertiser { AdvertisingSetParameters.Builder parameters = new AdvertisingSetParameters.Builder(); parameters.setLegacyMode(true); parameters.setConnectable(isConnectable); + parameters.setScannable(true); // legacy advertisements we support are always scannable if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_LOW_POWER) { parameters.setInterval(1600); // 1s } else if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_BALANCED) {