Unhide AdvertiseSettings

Bug: 242015785
Test: ./gradlew updateApi
Relnote: Add AdvertiseSettings into bluetooth-core
Change-Id: I8045c8fe1986f4b1885acc6fc035d4c833705199
diff --git a/bluetooth/bluetooth-core/api/current.txt b/bluetooth/bluetooth-core/api/current.txt
index 21a003a92..7161d63 100644
--- a/bluetooth/bluetooth-core/api/current.txt
+++ b/bluetooth/bluetooth-core/api/current.txt
@@ -1,6 +1,29 @@
 // Signature format: 4.0
 package androidx.bluetooth.core {
 
+  public final class AdvertiseSettings {
+    ctor public AdvertiseSettings(optional int advertiseMode, optional int advertiseTxPowerLevel, optional boolean advertiseConnectable, optional int advertiseTimeoutMillis);
+    method public boolean getAdvertiseConnectable();
+    method public int getAdvertiseMode();
+    method public int getAdvertiseTimeoutMillis();
+    method public int getAdvertiseTxPowerLevel();
+    property public final boolean advertiseConnectable;
+    property public final int advertiseMode;
+    property public final int advertiseTimeoutMillis;
+    property public final int advertiseTxPowerLevel;
+    field public static final int ADVERTISE_MODE_BALANCED = 1; // 0x1
+    field public static final int ADVERTISE_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int ADVERTISE_MODE_LOW_POWER = 0; // 0x0
+    field public static final int ADVERTISE_TX_POWER_HIGH = 3; // 0x3
+    field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1
+    field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2
+    field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0
+    field public static final androidx.bluetooth.core.AdvertiseSettings.Companion Companion;
+  }
+
+  public static final class AdvertiseSettings.Companion {
+  }
+
   public final class ScanFilter {
     ctor public ScanFilter(optional String? deviceName, optional String? deviceAddress, optional android.os.ParcelUuid? serviceUuid, optional android.os.ParcelUuid? serviceUuidMask, optional android.os.ParcelUuid? serviceDataUuid, optional byte[]? serviceData, optional byte[]? serviceDataMask, optional int manufacturerId, optional byte[]? manufacturerData, optional byte[]? manufacturerDataMask, optional android.os.ParcelUuid? serviceSolicitationUuid, optional android.os.ParcelUuid? serviceSolicitationUuidMask, optional byte[]? advertisingData, optional byte[]? advertisingDataMask, optional int advertisingDataType);
     method public byte[]? getAdvertisingData();
diff --git a/bluetooth/bluetooth-core/api/public_plus_experimental_current.txt b/bluetooth/bluetooth-core/api/public_plus_experimental_current.txt
index 21a003a92..7161d63 100644
--- a/bluetooth/bluetooth-core/api/public_plus_experimental_current.txt
+++ b/bluetooth/bluetooth-core/api/public_plus_experimental_current.txt
@@ -1,6 +1,29 @@
 // Signature format: 4.0
 package androidx.bluetooth.core {
 
+  public final class AdvertiseSettings {
+    ctor public AdvertiseSettings(optional int advertiseMode, optional int advertiseTxPowerLevel, optional boolean advertiseConnectable, optional int advertiseTimeoutMillis);
+    method public boolean getAdvertiseConnectable();
+    method public int getAdvertiseMode();
+    method public int getAdvertiseTimeoutMillis();
+    method public int getAdvertiseTxPowerLevel();
+    property public final boolean advertiseConnectable;
+    property public final int advertiseMode;
+    property public final int advertiseTimeoutMillis;
+    property public final int advertiseTxPowerLevel;
+    field public static final int ADVERTISE_MODE_BALANCED = 1; // 0x1
+    field public static final int ADVERTISE_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int ADVERTISE_MODE_LOW_POWER = 0; // 0x0
+    field public static final int ADVERTISE_TX_POWER_HIGH = 3; // 0x3
+    field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1
+    field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2
+    field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0
+    field public static final androidx.bluetooth.core.AdvertiseSettings.Companion Companion;
+  }
+
+  public static final class AdvertiseSettings.Companion {
+  }
+
   public final class ScanFilter {
     ctor public ScanFilter(optional String? deviceName, optional String? deviceAddress, optional android.os.ParcelUuid? serviceUuid, optional android.os.ParcelUuid? serviceUuidMask, optional android.os.ParcelUuid? serviceDataUuid, optional byte[]? serviceData, optional byte[]? serviceDataMask, optional int manufacturerId, optional byte[]? manufacturerData, optional byte[]? manufacturerDataMask, optional android.os.ParcelUuid? serviceSolicitationUuid, optional android.os.ParcelUuid? serviceSolicitationUuidMask, optional byte[]? advertisingData, optional byte[]? advertisingDataMask, optional int advertisingDataType);
     method public byte[]? getAdvertisingData();
diff --git a/bluetooth/bluetooth-core/api/restricted_current.txt b/bluetooth/bluetooth-core/api/restricted_current.txt
index a525712..f650587 100644
--- a/bluetooth/bluetooth-core/api/restricted_current.txt
+++ b/bluetooth/bluetooth-core/api/restricted_current.txt
@@ -1,6 +1,31 @@
 // Signature format: 4.0
 package androidx.bluetooth.core {
 
+  public final class AdvertiseSettings implements androidx.bluetooth.core.Bundleable {
+    ctor public AdvertiseSettings(optional int advertiseMode, optional int advertiseTxPowerLevel, optional boolean advertiseConnectable, optional int advertiseTimeoutMillis);
+    method public boolean getAdvertiseConnectable();
+    method public int getAdvertiseMode();
+    method public int getAdvertiseTimeoutMillis();
+    method public int getAdvertiseTxPowerLevel();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.Bundle toBundle();
+    property public final boolean advertiseConnectable;
+    property public final int advertiseMode;
+    property public final int advertiseTimeoutMillis;
+    property public final int advertiseTxPowerLevel;
+    field public static final int ADVERTISE_MODE_BALANCED = 1; // 0x1
+    field public static final int ADVERTISE_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int ADVERTISE_MODE_LOW_POWER = 0; // 0x0
+    field public static final int ADVERTISE_TX_POWER_HIGH = 3; // 0x3
+    field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1
+    field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2
+    field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final androidx.bluetooth.core.Bundleable.Creator<androidx.bluetooth.core.AdvertiseSettings> CREATOR;
+    field public static final androidx.bluetooth.core.AdvertiseSettings.Companion Companion;
+  }
+
+  public static final class AdvertiseSettings.Companion {
+  }
+
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Bundleable {
     method public android.os.Bundle toBundle();
   }
diff --git a/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/AdvertiseSettings.kt b/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/AdvertiseSettings.kt
index 3c80d86..b2e1eb4 100644
--- a/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/AdvertiseSettings.kt
+++ b/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/AdvertiseSettings.kt
@@ -18,18 +18,24 @@
 
 import android.bluetooth.le.AdvertiseSettings as FwkAdvertiseSettings
 import android.os.Bundle
+import androidx.annotation.RestrictTo
 
 /**
  * The {@link AdvertiseSettings} provide a way to adjust advertising preferences for each
- * Bluetooth LE advertisement instance.
- * @hide
+ * Bluetooth LE advertisement instance. Use the constructor to create an instance of this class.
  */
+@SuppressWarnings("HiddenSuperclass") // Bundleable
 class AdvertiseSettings internal constructor(internal val fwkInstance: FwkAdvertiseSettings) :
     Bundleable {
 
     companion object {
         internal const val FIELD_FWK_ADVERTISE_SETTINGS = 0
 
+        /**
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+        @JvmField
         val CREATOR: Bundleable.Creator<AdvertiseSettings> =
             object : Bundleable.Creator<AdvertiseSettings> {
                 override fun fromBundle(bundle: Bundle): AdvertiseSettings {
@@ -50,25 +56,16 @@
         }
 
         internal fun buildFwkAdvertiseSettings(
-            advertiseMode: Int? = null,
-            advertiseTxPowerLevel: Int? = null,
-            advertiseConnectable: Boolean = true,
-            advertiseTimeoutMillis: Int? = null,
+            advertiseMode: Int,
+            advertiseTxPowerLevel: Int,
+            advertiseConnectable: Boolean,
+            advertiseTimeoutMillis: Int,
         ): FwkAdvertiseSettings {
             val builder = FwkAdvertiseSettings.Builder()
                 .setConnectable(advertiseConnectable)
-
-            if (advertiseMode != null) {
-                builder.setAdvertiseMode(advertiseMode)
-            }
-
-            if (advertiseTxPowerLevel != null) {
-                builder.setTxPowerLevel(advertiseTxPowerLevel)
-            }
-
-            if (advertiseTimeoutMillis != null) {
-                builder.setTimeout(advertiseTimeoutMillis)
-            }
+                .setAdvertiseMode(advertiseMode)
+                .setTxPowerLevel(advertiseTxPowerLevel)
+                .setTimeout(advertiseTimeoutMillis)
 
             return builder.build()
         }
@@ -112,11 +109,6 @@
          * advertising packet.
          */
         const val ADVERTISE_TX_POWER_HIGH = FwkAdvertiseSettings.ADVERTISE_TX_POWER_HIGH
-
-        /**
-         * The maximum limited advertisement duration as specified by the Bluetooth SIG
-         */
-        const val LIMITED_ADVERTISING_MAX_MILLIS = 180_000
     }
 
     val advertiseMode: Int
@@ -133,10 +125,10 @@
         get() = fwkInstance.timeout
 
     constructor(
-        advertiseMode: Int? = null,
-        advertiseTxPowerLevel: Int? = null,
+        advertiseMode: Int = ADVERTISE_MODE_LOW_POWER,
+        advertiseTxPowerLevel: Int = ADVERTISE_TX_POWER_MEDIUM,
         advertiseConnectable: Boolean = true,
-        advertiseTimeoutMillis: Int? = null
+        advertiseTimeoutMillis: Int = 0
     ) : this(buildFwkAdvertiseSettings(
         advertiseMode,
         advertiseTxPowerLevel,
@@ -144,6 +136,10 @@
         advertiseTimeoutMillis
     ))
 
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     override fun toBundle(): Bundle {
         val bundle = Bundle()
         bundle.putParcelable(keyForField(FIELD_FWK_ADVERTISE_SETTINGS), fwkInstance)