| // Copyright 2024 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/hardware_offloading_supported_provider.h" |
| |
| #include "device/bluetooth/bluetooth_adapter_factory.h" |
| #include "hardware_offloading_supported_provider.h" |
| |
| namespace ash { |
| namespace quick_pair { |
| |
| HardwareOffloadingSupportedProvider::HardwareOffloadingSupportedProvider() { |
| device::BluetoothAdapterFactory::Get()->GetAdapter( |
| base::BindOnce(&HardwareOffloadingSupportedProvider::OnAdapterReceived, |
| weak_factory_.GetWeakPtr())); |
| } |
| |
| HardwareOffloadingSupportedProvider::~HardwareOffloadingSupportedProvider() = |
| default; |
| |
| void HardwareOffloadingSupportedProvider::AdapterPoweredChanged( |
| device::BluetoothAdapter* adapter, |
| bool powered) { |
| SetEnabled(); |
| } |
| |
| void HardwareOffloadingSupportedProvider::AdapterPresentChanged( |
| device::BluetoothAdapter* adapter, |
| bool present) { |
| SetEnabled(); |
| } |
| |
| void HardwareOffloadingSupportedProvider:: |
| LowEnergyScanSessionHardwareOffloadingStatusChanged( |
| device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus |
| status) { |
| SetEnabled(); |
| } |
| |
| void HardwareOffloadingSupportedProvider::OnAdapterReceived( |
| scoped_refptr<device::BluetoothAdapter> adapter) { |
| adapter_ = adapter; |
| if (adapter_) { |
| adapter_observation_.Observe(adapter_.get()); |
| } |
| SetEnabled(); |
| } |
| |
| bool HardwareOffloadingSupportedProvider::IsEnabled() { |
| if (!adapter_) { |
| return false; |
| } |
| |
| // An adapter must be present in the physical system in order for it to scan. |
| if (!adapter_->IsPresent()) { |
| return false; |
| } |
| |
| // The adapter must be powered in order for it to scan. |
| if (!adapter_->IsPowered()) { |
| return false; |
| } |
| |
| device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus |
| offloading_status = |
| adapter_->GetLowEnergyScanSessionHardwareOffloadingStatus(); |
| return offloading_status == |
| device::BluetoothAdapter:: |
| LowEnergyScanSessionHardwareOffloadingStatus::kSupported; |
| } |
| |
| void HardwareOffloadingSupportedProvider::SetEnabled() { |
| SetEnabledAndInvokeCallback(IsEnabled()); |
| } |
| |
| } // namespace quick_pair |
| } // namespace ash |