// Signature format: 4.0
package androidx.bluetooth {

  public final class AdvertiseParams {
    ctor public AdvertiseParams(optional boolean shouldIncludeDeviceAddress, optional boolean shouldIncludeDeviceName, optional boolean isConnectable, optional boolean isDiscoverable, optional @IntRange(from=0L, to=655350L) long durationMillis, optional java.util.Map<java.lang.Integer,byte[]> manufacturerData, optional java.util.Map<java.util.UUID,byte[]> serviceData, optional java.util.List<java.util.UUID> serviceUuids, optional java.util.List<java.util.UUID> serviceSolicitationUuids);
    method public long getDurationMillis();
    method public java.util.Map<java.lang.Integer,byte[]> getManufacturerData();
    method public java.util.Map<java.util.UUID,byte[]> getServiceData();
    method public java.util.List<java.util.UUID> getServiceSolicitationUuids();
    method public java.util.List<java.util.UUID> getServiceUuids();
    method public boolean getShouldIncludeDeviceAddress();
    method public boolean getShouldIncludeDeviceName();
    method public boolean isConnectable();
    method public boolean isDiscoverable();
    property public final long durationMillis;
    property public final boolean isConnectable;
    property public final boolean isDiscoverable;
    property public final java.util.Map<java.lang.Integer,byte[]> manufacturerData;
    property public final java.util.Map<java.util.UUID,byte[]> serviceData;
    property public final java.util.List<java.util.UUID> serviceSolicitationUuids;
    property public final java.util.List<java.util.UUID> serviceUuids;
    property public final boolean shouldIncludeDeviceAddress;
    property public final boolean shouldIncludeDeviceName;
  }

  public final class BluetoothAddress {
    ctor public BluetoothAddress(String address, int addressType);
    method public String getAddress();
    method public int getAddressType();
    property public final String address;
    property public final int addressType;
    field public static final int ADDRESS_TYPE_PUBLIC = 0; // 0x0
    field public static final int ADDRESS_TYPE_RANDOM_NON_RESOLVABLE = 3; // 0x3
    field public static final int ADDRESS_TYPE_RANDOM_RESOLVABLE = 2; // 0x2
    field public static final int ADDRESS_TYPE_RANDOM_STATIC = 1; // 0x1
    field public static final int ADDRESS_TYPE_UNKNOWN = 65535; // 0xffff
    field public static final androidx.bluetooth.BluetoothAddress.Companion Companion;
  }

  public static final class BluetoothAddress.Companion {
  }

  public final class BluetoothDevice {
    method @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public int getBondState();
    method public java.util.UUID getId();
    method @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public String? getName();
    property @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public final int bondState;
    property public final java.util.UUID id;
    property @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public final String? name;
  }

  public final class BluetoothLe {
    ctor public BluetoothLe(android.content.Context context);
    method @RequiresPermission("android.permission.BLUETOOTH_ADVERTISE") public suspend Object? advertise(androidx.bluetooth.AdvertiseParams advertiseParams, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?>? block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
    method @RequiresPermission("android.permission.BLUETOOTH_CONNECT") public suspend <R> Object? connectGatt(androidx.bluetooth.BluetoothDevice device, kotlin.jvm.functions.Function2<? super androidx.bluetooth.BluetoothLe.GattClientScope,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
    method public suspend <R> Object? openGattServer(java.util.List<androidx.bluetooth.GattService> services, kotlin.jvm.functions.Function2<? super androidx.bluetooth.BluetoothLe.GattServerConnectScope,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
    method @RequiresPermission("android.permission.BLUETOOTH_SCAN") public kotlinx.coroutines.flow.Flow<androidx.bluetooth.ScanResult> scan(optional java.util.List<androidx.bluetooth.ScanFilter> filters);
    field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 102; // 0x66
    field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 103; // 0x67
    field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 104; // 0x68
    field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 105; // 0x69
    field public static final int ADVERTISE_STARTED = 101; // 0x65
    field public static final androidx.bluetooth.BluetoothLe.Companion Companion;
  }

  public static final class BluetoothLe.Companion {
  }

  public static interface BluetoothLe.GattClientScope {
    method public androidx.bluetooth.GattService? getService(java.util.UUID uuid);
    method public default java.util.List<androidx.bluetooth.GattService> getServices();
    method public kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.bluetooth.GattService>> getServicesFlow();
    method public suspend Object? readCharacteristic(androidx.bluetooth.GattCharacteristic characteristic, kotlin.coroutines.Continuation<? super kotlin.Result<? extends byte[]>>);
    method public kotlinx.coroutines.flow.Flow<byte[]> subscribeToCharacteristic(androidx.bluetooth.GattCharacteristic characteristic);
    method public suspend Object? writeCharacteristic(androidx.bluetooth.GattCharacteristic characteristic, byte[] value, kotlin.coroutines.Continuation<? super kotlin.Result<? extends kotlin.Unit>>);
    property public default java.util.List<androidx.bluetooth.GattService> services;
    property public abstract kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.bluetooth.GattService>> servicesFlow;
  }

  public static final class BluetoothLe.GattServerConnectRequest {
    method public suspend Object? accept(kotlin.jvm.functions.Function2<? super androidx.bluetooth.BluetoothLe.GattServerSessionScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
    method public androidx.bluetooth.BluetoothDevice getDevice();
    method public void reject();
    property public final androidx.bluetooth.BluetoothDevice device;
  }

  public static interface BluetoothLe.GattServerConnectScope {
    method public kotlinx.coroutines.flow.Flow<androidx.bluetooth.BluetoothLe.GattServerConnectRequest> getConnectRequests();
    method public void updateServices(java.util.List<androidx.bluetooth.GattService> services);
    property public abstract kotlinx.coroutines.flow.Flow<androidx.bluetooth.BluetoothLe.GattServerConnectRequest> connectRequests;
  }

  public static interface BluetoothLe.GattServerSessionScope {
    method public androidx.bluetooth.BluetoothDevice getDevice();
    method public kotlinx.coroutines.flow.Flow<androidx.bluetooth.GattServerRequest> getRequests();
    method public kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.bluetooth.GattCharacteristic>> getSubscribedCharacteristics();
    method public suspend Object? notify(androidx.bluetooth.GattCharacteristic characteristic, byte[] value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
    property public abstract androidx.bluetooth.BluetoothDevice device;
    property public abstract kotlinx.coroutines.flow.Flow<androidx.bluetooth.GattServerRequest> requests;
    property public abstract kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.bluetooth.GattCharacteristic>> subscribedCharacteristics;
  }

  public final class GattCharacteristic {
    ctor public GattCharacteristic(java.util.UUID uuid, int properties);
    method public int getProperties();
    method public java.util.UUID getUuid();
    property public final int properties;
    property public final java.util.UUID uuid;
    field public static final androidx.bluetooth.GattCharacteristic.Companion Companion;
    field public static final int PROPERTY_BROADCAST = 1; // 0x1
    field public static final int PROPERTY_EXTENDED_PROPS = 128; // 0x80
    field public static final int PROPERTY_INDICATE = 32; // 0x20
    field public static final int PROPERTY_NOTIFY = 16; // 0x10
    field public static final int PROPERTY_READ = 2; // 0x2
    field public static final int PROPERTY_SIGNED_WRITE = 64; // 0x40
    field public static final int PROPERTY_WRITE = 8; // 0x8
    field public static final int PROPERTY_WRITE_NO_RESPONSE = 4; // 0x4
  }

  public static final class GattCharacteristic.Companion {
  }

  public class GattServerRequest {
  }

  public static final class GattServerRequest.ReadCharacteristic extends androidx.bluetooth.GattServerRequest {
    method public androidx.bluetooth.GattCharacteristic getCharacteristic();
    method public void sendFailure();
    method public void sendResponse(byte[] value);
    property public final androidx.bluetooth.GattCharacteristic characteristic;
  }

  public static final class GattServerRequest.WriteCharacteristics extends androidx.bluetooth.GattServerRequest {
    method public java.util.List<androidx.bluetooth.GattServerRequest.WriteCharacteristics.Part> getParts();
    method public void sendFailure();
    method public void sendResponse();
    property public final java.util.List<androidx.bluetooth.GattServerRequest.WriteCharacteristics.Part> parts;
  }

  public static final class GattServerRequest.WriteCharacteristics.Part {
    method public androidx.bluetooth.GattCharacteristic getCharacteristic();
    method public int getOffset();
    method public byte[] getValue();
    property public final androidx.bluetooth.GattCharacteristic characteristic;
    property public final int offset;
    property public final byte[] value;
  }

  public final class GattService {
    ctor public GattService(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
    method public androidx.bluetooth.GattCharacteristic? getCharacteristic(java.util.UUID uuid);
    method public java.util.List<androidx.bluetooth.GattCharacteristic> getCharacteristics();
    method public java.util.UUID getUuid();
    property public final java.util.List<androidx.bluetooth.GattCharacteristic> characteristics;
    property public final java.util.UUID uuid;
  }

  public final class ScanFilter {
    ctor public ScanFilter(optional androidx.bluetooth.BluetoothAddress? deviceAddress, optional String? deviceName, optional int manufacturerId, optional byte[]? manufacturerData, optional byte[]? manufacturerDataMask, optional java.util.UUID? serviceDataUuid, optional byte[]? serviceData, optional byte[]? serviceDataMask, optional java.util.UUID? serviceUuid, optional java.util.UUID? serviceUuidMask, optional java.util.UUID? serviceSolicitationUuid, optional java.util.UUID? serviceSolicitationUuidMask);
    method public androidx.bluetooth.BluetoothAddress? getDeviceAddress();
    method public String? getDeviceName();
    method public byte[]? getManufacturerData();
    method public byte[]? getManufacturerDataMask();
    method public int getManufacturerId();
    method public byte[]? getServiceData();
    method public byte[]? getServiceDataMask();
    method public java.util.UUID? getServiceDataUuid();
    method public java.util.UUID? getServiceSolicitationUuid();
    method public java.util.UUID? getServiceSolicitationUuidMask();
    method public java.util.UUID? getServiceUuid();
    method public java.util.UUID? getServiceUuidMask();
    property public final androidx.bluetooth.BluetoothAddress? deviceAddress;
    property public final String? deviceName;
    property public final byte[]? manufacturerData;
    property public final byte[]? manufacturerDataMask;
    property public final int manufacturerId;
    property public final byte[]? serviceData;
    property public final byte[]? serviceDataMask;
    property public final java.util.UUID? serviceDataUuid;
    property public final java.util.UUID? serviceSolicitationUuid;
    property public final java.util.UUID? serviceSolicitationUuidMask;
    property public final java.util.UUID? serviceUuid;
    property public final java.util.UUID? serviceUuidMask;
    field public static final androidx.bluetooth.ScanFilter.Companion Companion;
    field public static final int MANUFACTURER_FILTER_NONE = -1; // 0xffffffff
  }

  public static final class ScanFilter.Companion {
  }

  public final class ScanResult {
    method public androidx.bluetooth.BluetoothDevice getDevice();
    method public androidx.bluetooth.BluetoothAddress getDeviceAddress();
    method public byte[]? getManufacturerSpecificData(int manufacturerId);
    method public long getPeriodicAdvertisingInterval();
    method public int getRssi();
    method public byte[]? getServiceData(java.util.UUID serviceUuid);
    method public java.util.List<java.util.UUID> getServiceUuids();
    method public long getTimestampNanos();
    method public boolean isConnectable();
    property public final androidx.bluetooth.BluetoothDevice device;
    property public final androidx.bluetooth.BluetoothAddress deviceAddress;
    property public final long periodicAdvertisingInterval;
    property public final int rssi;
    property public final java.util.List<java.util.UUID> serviceUuids;
    property public final long timestampNanos;
    field public static final androidx.bluetooth.ScanResult.Companion Companion;
    field public static final int PERIODIC_INTERVAL_NOT_PRESENT = 0; // 0x0
  }

  public static final class ScanResult.Companion {
  }

}

