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()15 BluetoothObserver::BluetoothObserver() : receiver_{this} {
16   Connect();
17 }
18 
19 BluetoothObserver::~BluetoothObserver() = default;
20 
AddObserver(mojo::PendingRemote<health::mojom::BluetoothObserver> observer)21 void 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()27 void BluetoothObserver::OnAdapterAdded() {
28   for (auto& observer : observers_) {
29     observer->OnAdapterAdded();
30   }
31 }
32 
OnAdapterRemoved()33 void BluetoothObserver::OnAdapterRemoved() {
34   for (auto& observer : observers_) {
35     observer->OnAdapterRemoved();
36   }
37 }
38 
OnAdapterPropertyChanged()39 void BluetoothObserver::OnAdapterPropertyChanged() {
40   for (auto& observer : observers_) {
41     observer->OnAdapterPropertyChanged();
42   }
43 }
44 
OnDeviceAdded()45 void BluetoothObserver::OnDeviceAdded() {
46   for (auto& observer : observers_) {
47     observer->OnDeviceAdded();
48   }
49 }
50 
OnDeviceRemoved()51 void BluetoothObserver::OnDeviceRemoved() {
52   for (auto& observer : observers_) {
53     observer->OnDeviceRemoved();
54   }
55 }
56 
OnDevicePropertyChanged()57 void BluetoothObserver::OnDevicePropertyChanged() {
58   for (auto& observer : observers_) {
59     observer->OnDevicePropertyChanged();
60   }
61 }
62 
Connect()63 void 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()74 void BluetoothObserver::FlushForTesting() {
75   receiver_.FlushForTesting();
76 }
77 
78 }  // namespace chromeos
79