123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // Copyright 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_ANDROID_H_
- #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_ANDROID_H_
- #include <memory>
- #include "base/android/jni_android.h"
- #include "base/android/scoped_java_ref.h"
- #include "base/gtest_prod_util.h"
- #include "base/memory/weak_ptr.h"
- #include "device/bluetooth/bluetooth_adapter.h"
- using base::android::ScopedJavaLocalRef;
- namespace device {
- // BluetoothAdapterAndroid, along with the Java class
- // org.chromium.device.bluetooth.BluetoothAdapter, implement BluetoothAdapter.
- //
- // The GATT Profile over Low Energy is supported, but not Classic Bluetooth at
- // this time. LE GATT support has been initially built out to support Web
- // Bluetooth, which does not need other Bluetooth features. There is no
- // technical reason they can not be supported should a need arrise.
- //
- // BluetoothAdapterAndroid is reference counted, and owns the lifetime of the
- // Java class BluetoothAdapter via j_adapter_. The adapter also owns a tree of
- // additional C++ objects (Devices, Services, Characteristics, Descriptors),
- // with each C++ object owning its associated Java class.
- class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterAndroid final
- : public BluetoothAdapter {
- public:
- // Create a BluetoothAdapterAndroid instance.
- //
- // |java_bluetooth_adapter_wrapper| is optional. If it is NULL the adapter
- // will return false for |IsPresent()| and not be functional.
- //
- // The BluetoothAdapterAndroid instance will indirectly hold a Java reference
- // to |bluetooth_adapter_wrapper|.
- static scoped_refptr<BluetoothAdapterAndroid> Create(
- const base::android::JavaRef<jobject>&
- bluetooth_adapter_wrapper); // Java Type: bluetoothAdapterWrapper
- BluetoothAdapterAndroid(const BluetoothAdapterAndroid&) = delete;
- BluetoothAdapterAndroid& operator=(const BluetoothAdapterAndroid&) = delete;
- // BluetoothAdapter:
- void Initialize(base::OnceClosure callback) override;
- std::string GetAddress() const override;
- std::string GetName() const override;
- void SetName(const std::string& name,
- base::OnceClosure callback,
- ErrorCallback error_callback) override;
- bool IsInitialized() const override;
- bool IsPresent() const override;
- bool IsPowered() const override;
- bool IsDiscoverable() const override;
- void SetDiscoverable(bool discoverable,
- base::OnceClosure callback,
- ErrorCallback error_callback) override;
- bool IsDiscovering() const override;
- UUIDList GetUUIDs() const override;
- void CreateRfcommService(const BluetoothUUID& uuid,
- const ServiceOptions& options,
- CreateServiceCallback callback,
- CreateServiceErrorCallback error_callback) override;
- void CreateL2capService(const BluetoothUUID& uuid,
- const ServiceOptions& options,
- CreateServiceCallback callback,
- CreateServiceErrorCallback error_callback) override;
- void RegisterAdvertisement(
- std::unique_ptr<BluetoothAdvertisement::Data> advertisement_data,
- CreateAdvertisementCallback callback,
- AdvertisementErrorCallback error_callback) override;
- BluetoothLocalGattService* GetGattService(
- const std::string& identifier) const override;
- // Called when adapter state changes.
- void OnAdapterStateChanged(JNIEnv* env,
- const base::android::JavaParamRef<jobject>& caller,
- const bool powered);
- // Handles a scan error event by invalidating all discovery sessions.
- void OnScanFailed(JNIEnv* env,
- const base::android::JavaParamRef<jobject>& caller);
- // Creates or updates device with advertised UUID information when a device is
- // discovered during a scan.
- void CreateOrUpdateDeviceOnScan(
- JNIEnv* env,
- const base::android::JavaParamRef<jobject>& caller,
- const base::android::JavaParamRef<jstring>& address,
- const base::android::JavaParamRef<jobject>&
- bluetooth_device_wrapper, // Java Type: bluetoothDeviceWrapper
- const base::android::JavaParamRef<jstring>& local_name,
- int32_t rssi,
- const base::android::JavaParamRef<jobjectArray>&
- advertised_uuids, // Java Type: String[]
- int32_t tx_power,
- const base::android::JavaParamRef<jobjectArray>&
- service_data_keys, // Java Type: String[]
- const base::android::JavaParamRef<jobjectArray>&
- service_data_values, // Java Type: byte[]
- const base::android::JavaParamRef<jintArray>&
- manufacturer_data_keys, // Java Type: int[]
- const base::android::JavaParamRef<jobjectArray>&
- manufacturer_data_values, // Java Type: byte[]
- int32_t advertisement_flags);
- protected:
- BluetoothAdapterAndroid();
- ~BluetoothAdapterAndroid() override;
- // BluetoothAdapter:
- base::WeakPtr<BluetoothAdapter> GetWeakPtr() override;
- bool SetPoweredImpl(bool powered) override;
- void StartScanWithFilter(
- std::unique_ptr<BluetoothDiscoveryFilter> discovery_filter,
- DiscoverySessionResultCallback callback) override;
- void UpdateFilter(std::unique_ptr<BluetoothDiscoveryFilter> discovery_filter,
- DiscoverySessionResultCallback callback) override;
- void StopScan(DiscoverySessionResultCallback callback) override;
- void RemovePairingDelegateInternal(
- BluetoothDevice::PairingDelegate* pairing_delegate) override;
- void PurgeTimedOutDevices();
- // Utility function used to create a Java object that represents the filter.
- base::android::ScopedJavaLocalRef<jobject> CreateAndroidFilter(
- const BluetoothDiscoveryFilter* discovery_filter);
- // Java object org.chromium.device.bluetooth.ChromeBluetoothAdapter.
- base::android::ScopedJavaGlobalRef<jobject> j_adapter_;
- private:
- FRIEND_TEST_ALL_PREFIXES(BluetoothAdapterAndroidTest, ScanFilterTest);
- // Note: This should remain the last member so it'll be destroyed and
- // invalidate its weak pointers before any other members are destroyed.
- base::WeakPtrFactory<BluetoothAdapterAndroid> weak_ptr_factory_{this};
- };
- } // namespace device
- #endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_ANDROID_H_
|