| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/quick_pair/feature_status_tracker/bluetooth_enabled_provider.h" |
| |
| #include "ash/quick_pair/feature_status_tracker/fast_pair_support_utils.h" |
| #include "base/functional/bind.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "device/bluetooth/bluetooth_adapter.h" |
| #include "device/bluetooth/bluetooth_adapter_factory.h" |
| |
| namespace ash { |
| namespace quick_pair { |
| |
| BluetoothEnabledProvider::BluetoothEnabledProvider() { |
| device::BluetoothAdapterFactory::Get()->GetAdapter( |
| base::BindOnce(&BluetoothEnabledProvider::OnAdapterReceived, |
| weak_factory_.GetWeakPtr())); |
| } |
| |
| BluetoothEnabledProvider::~BluetoothEnabledProvider() = default; |
| |
| void BluetoothEnabledProvider::AdapterPoweredChanged( |
| device::BluetoothAdapter* adapter, |
| bool powered) { |
| Update(); |
| } |
| |
| void BluetoothEnabledProvider::AdapterPresentChanged( |
| device::BluetoothAdapter* adapter, |
| bool present) { |
| Update(); |
| } |
| |
| void BluetoothEnabledProvider::OnAdapterReceived( |
| scoped_refptr<device::BluetoothAdapter> adapter) { |
| adapter_ = adapter; |
| adapter_observation_.Observe(adapter_.get()); |
| |
| Update(); |
| } |
| |
| void BluetoothEnabledProvider:: |
| LowEnergyScanSessionHardwareOffloadingStatusChanged( |
| device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus |
| status) { |
| Update(); |
| } |
| |
| void BluetoothEnabledProvider::Update() { |
| if (!HasHardwareSupport(adapter_)) { |
| SetEnabledAndInvokeCallback(/*is_enabled=*/false); |
| return; |
| } |
| |
| SetEnabledAndInvokeCallback(adapter_->IsPowered()); |
| } |
| |
| } // namespace quick_pair |
| } // namespace ash |