blob: 937d45382ade905a62c020aa24cd50ed3157b88d [file] [log] [blame]
// Copyright 2017 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/system/bluetooth/tray_bluetooth_helper.h"
#include "base/bind.h"
#include "base/time/time.h"
using device::mojom::BluetoothSystem;
namespace ash {
namespace {
constexpr base::TimeDelta kUpdateFrequencyMs =
base::TimeDelta::FromMilliseconds(1000);
} // namespace
TrayBluetoothHelper::TrayBluetoothHelper() = default;
TrayBluetoothHelper::~TrayBluetoothHelper() = default;
void TrayBluetoothHelper::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void TrayBluetoothHelper::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
const BluetoothDeviceList& TrayBluetoothHelper::GetAvailableBluetoothDevices()
const {
return cached_devices_;
}
bool TrayBluetoothHelper::IsBluetoothStateAvailable() {
switch (GetBluetoothState()) {
case BluetoothSystem::State::kUnsupported:
case BluetoothSystem::State::kUnavailable:
return false;
case BluetoothSystem::State::kPoweredOff:
case BluetoothSystem::State::kTransitioning:
case BluetoothSystem::State::kPoweredOn:
return true;
}
}
void TrayBluetoothHelper::StartOrStopRefreshingDeviceList() {
if (GetBluetoothState() == BluetoothSystem::State::kPoweredOn) {
DCHECK(!timer_.IsRunning());
UpdateDeviceCache();
timer_.Start(FROM_HERE, kUpdateFrequencyMs, this,
&TrayBluetoothHelper::UpdateDeviceCache);
return;
}
timer_.Stop();
cached_devices_.clear();
NotifyBluetoothDeviceListChanged();
}
void TrayBluetoothHelper::UpdateDeviceCache() {
GetBluetoothDevices(
base::BindOnce(&TrayBluetoothHelper::OnGetBluetoothDevices,
weak_ptr_factory_.GetWeakPtr()));
}
void TrayBluetoothHelper::OnGetBluetoothDevices(BluetoothDeviceList devices) {
cached_devices_ = std::move(devices);
NotifyBluetoothDeviceListChanged();
}
void TrayBluetoothHelper::NotifyBluetoothDeviceListChanged() {
for (auto& observer : observers_)
observer.OnBluetoothDeviceListChanged();
}
void TrayBluetoothHelper::NotifyBluetoothSystemStateChanged() {
for (auto& observer : observers_)
observer.OnBluetoothSystemStateChanged();
}
void TrayBluetoothHelper::NotifyBluetoothScanStateChanged() {
for (auto& observer : observers_)
observer.OnBluetoothScanStateChanged();
}
} // namespace ash