123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright 2018 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.
- #include "ash/bluetooth_devices_observer.h"
- #include "base/bind.h"
- #include "device/bluetooth/bluetooth_adapter_factory.h"
- namespace ash {
- BluetoothDevicesObserver::BluetoothDevicesObserver(
- const AdapterOrDeviceChangedCallback& device_changed_callback)
- : adapter_or_device_changed_callback_(device_changed_callback) {
- if (device::BluetoothAdapterFactory::IsBluetoothSupported()) {
- device::BluetoothAdapterFactory::Get()->GetAdapter(
- base::BindOnce(&BluetoothDevicesObserver::InitializeOnAdapterReady,
- weak_factory_.GetWeakPtr()));
- } else {
- adapter_or_device_changed_callback_.Run(/*device=*/nullptr);
- }
- }
- BluetoothDevicesObserver::~BluetoothDevicesObserver() {
- if (bluetooth_adapter_)
- bluetooth_adapter_->RemoveObserver(this);
- }
- void BluetoothDevicesObserver::AdapterPresentChanged(
- device::BluetoothAdapter* adapter,
- bool present) {
- adapter_or_device_changed_callback_.Run(/*device=*/nullptr);
- }
- void BluetoothDevicesObserver::AdapterPoweredChanged(
- device::BluetoothAdapter* adapter,
- bool powered) {
- adapter_or_device_changed_callback_.Run(/*device=*/nullptr);
- }
- void BluetoothDevicesObserver::DeviceChanged(device::BluetoothAdapter* adapter,
- device::BluetoothDevice* device) {
- adapter_or_device_changed_callback_.Run(device);
- }
- void BluetoothDevicesObserver::InitializeOnAdapterReady(
- scoped_refptr<device::BluetoothAdapter> adapter) {
- bluetooth_adapter_ = std::move(adapter);
- bluetooth_adapter_->AddObserver(this);
- }
- bool BluetoothDevicesObserver::IsConnectedBluetoothDevice(
- const ui::InputDevice& input_device) const {
- if (!bluetooth_adapter_ || !bluetooth_adapter_->IsPresent() ||
- !bluetooth_adapter_->IsInitialized() ||
- !bluetooth_adapter_->IsPowered()) {
- return false;
- }
- // Since there is no map from an InputDevice to a BluetoothDevice. We just
- // comparing their vendor id and product id to guess a match.
- for (auto* device : bluetooth_adapter_->GetDevices()) {
- if (!device->IsConnected())
- continue;
- if (device->GetVendorID() == input_device.vendor_id &&
- device->GetProductID() == input_device.product_id) {
- return true;
- }
- }
- return false;
- }
- } // namespace ash
|