1 // Copyright 2020 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromeos/components/telemetry_extension_ui/bluetooth_observer.h" 6 7 #include <utility> 8 9 #include "base/bind.h" 10 #include "chromeos/components/telemetry_extension_ui/mojom/system_events_service.mojom.h" 11 #include "chromeos/services/cros_healthd/public/cpp/service_connection.h" 12 13 namespace chromeos { 14 BluetoothObserver()15BluetoothObserver::BluetoothObserver() : receiver_{this} { 16 Connect(); 17 } 18 19 BluetoothObserver::~BluetoothObserver() = default; 20 AddObserver(mojo::PendingRemote<health::mojom::BluetoothObserver> observer)21void BluetoothObserver::AddObserver( 22 mojo::PendingRemote<health::mojom::BluetoothObserver> observer) { 23 health::mojom::BluetoothObserverPtr ptr{std::move(observer)}; 24 observers_.Add(ptr.PassInterface()); 25 } 26 OnAdapterAdded()27void BluetoothObserver::OnAdapterAdded() { 28 for (auto& observer : observers_) { 29 observer->OnAdapterAdded(); 30 } 31 } 32 OnAdapterRemoved()33void BluetoothObserver::OnAdapterRemoved() { 34 for (auto& observer : observers_) { 35 observer->OnAdapterRemoved(); 36 } 37 } 38 OnAdapterPropertyChanged()39void BluetoothObserver::OnAdapterPropertyChanged() { 40 for (auto& observer : observers_) { 41 observer->OnAdapterPropertyChanged(); 42 } 43 } 44 OnDeviceAdded()45void BluetoothObserver::OnDeviceAdded() { 46 for (auto& observer : observers_) { 47 observer->OnDeviceAdded(); 48 } 49 } 50 OnDeviceRemoved()51void BluetoothObserver::OnDeviceRemoved() { 52 for (auto& observer : observers_) { 53 observer->OnDeviceRemoved(); 54 } 55 } 56 OnDevicePropertyChanged()57void BluetoothObserver::OnDevicePropertyChanged() { 58 for (auto& observer : observers_) { 59 observer->OnDevicePropertyChanged(); 60 } 61 } 62 Connect()63void BluetoothObserver::Connect() { 64 receiver_.reset(); 65 cros_healthd::ServiceConnection::GetInstance()->AddBluetoothObserver( 66 receiver_.BindNewPipeAndPassRemote()); 67 68 // We try to reconnect right after disconnect because Mojo will queue the 69 // request and connect to cros_healthd when it becomes available. 70 receiver_.set_disconnect_handler( 71 base::BindOnce(&BluetoothObserver::Connect, base::Unretained(this))); 72 } 73 FlushForTesting()74void BluetoothObserver::FlushForTesting() { 75 receiver_.FlushForTesting(); 76 } 77 78 } // namespace chromeos 79