OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 #include <utility> | 6 #include <utility> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | |
10 #include "base/strings/utf_string_conversions.h" | |
11 #include "device/bluetooth/adapter.h" | 9 #include "device/bluetooth/adapter.h" |
12 #include "mojo/public/cpp/bindings/string.h" | 10 #include "device/bluetooth/device.h" |
13 #include "mojo/public/cpp/bindings/strong_binding.h" | 11 #include "mojo/public/cpp/bindings/strong_binding.h" |
14 | 12 |
15 namespace bluetooth { | 13 namespace bluetooth { |
16 | 14 |
17 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter) | 15 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter) |
18 : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) { | 16 : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) { |
19 adapter_->AddObserver(this); | 17 adapter_->AddObserver(this); |
20 } | 18 } |
21 | 19 |
22 Adapter::~Adapter() { | 20 Adapter::~Adapter() { |
23 adapter_->RemoveObserver(this); | 21 adapter_->RemoveObserver(this); |
24 adapter_ = nullptr; | 22 adapter_ = nullptr; |
25 } | 23 } |
26 | 24 |
27 void Adapter::GetInfo(const GetInfoCallback& callback) { | 25 void Adapter::GetInfo(const GetInfoCallback& callback) { |
28 mojom::AdapterInfoPtr adapter_info = mojom::AdapterInfo::New(); | 26 mojom::AdapterInfoPtr adapter_info = mojom::AdapterInfo::New(); |
29 adapter_info->address = adapter_->GetAddress(); | 27 adapter_info->address = adapter_->GetAddress(); |
30 adapter_info->name = adapter_->GetName(); | 28 adapter_info->name = adapter_->GetName(); |
31 adapter_info->initialized = adapter_->IsInitialized(); | 29 adapter_info->initialized = adapter_->IsInitialized(); |
32 adapter_info->present = adapter_->IsPresent(); | 30 adapter_info->present = adapter_->IsPresent(); |
33 adapter_info->powered = adapter_->IsPowered(); | 31 adapter_info->powered = adapter_->IsPowered(); |
34 adapter_info->discoverable = adapter_->IsDiscoverable(); | 32 adapter_info->discoverable = adapter_->IsDiscoverable(); |
35 adapter_info->discovering = adapter_->IsDiscovering(); | 33 adapter_info->discovering = adapter_->IsDiscovering(); |
36 callback.Run(std::move(adapter_info)); | 34 callback.Run(std::move(adapter_info)); |
37 } | 35 } |
38 | 36 |
| 37 void Adapter::GetDevice(const std::string& address, |
| 38 const GetDeviceCallback& callback) { |
| 39 mojom::DevicePtr device_ptr; |
| 40 mojo::MakeStrongBinding(base::MakeUnique<Device>(address, adapter_), |
| 41 mojo::GetProxy(&device_ptr)); |
| 42 callback.Run(std::move(device_ptr)); |
| 43 } |
| 44 |
39 void Adapter::GetDevices(const GetDevicesCallback& callback) { | 45 void Adapter::GetDevices(const GetDevicesCallback& callback) { |
40 std::vector<mojom::DeviceInfoPtr> devices; | 46 std::vector<mojom::DeviceInfoPtr> devices; |
41 | 47 |
42 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { | 48 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { |
43 mojom::DeviceInfoPtr device_info = ConstructDeviceInfoStruct(device); | 49 mojom::DeviceInfoPtr device_info = |
| 50 Device::ConstructDeviceInfoStruct(device); |
44 devices.push_back(std::move(device_info)); | 51 devices.push_back(std::move(device_info)); |
45 } | 52 } |
46 | 53 |
47 callback.Run(std::move(devices)); | 54 callback.Run(std::move(devices)); |
48 } | 55 } |
49 | 56 |
50 void Adapter::SetClient(mojom::AdapterClientPtr client) { | 57 void Adapter::SetClient(mojom::AdapterClientPtr client) { |
51 client_ = std::move(client); | 58 client_ = std::move(client); |
52 } | 59 } |
53 | 60 |
54 void Adapter::DeviceAdded(device::BluetoothAdapter* adapter, | 61 void Adapter::DeviceAdded(device::BluetoothAdapter* adapter, |
55 device::BluetoothDevice* device) { | 62 device::BluetoothDevice* device) { |
56 if (client_) { | 63 if (client_) { |
57 auto device_info = ConstructDeviceInfoStruct(device); | 64 auto device_info = Device::ConstructDeviceInfoStruct(device); |
58 client_->DeviceAdded(std::move(device_info)); | 65 client_->DeviceAdded(std::move(device_info)); |
59 } | 66 } |
60 } | 67 } |
61 | 68 |
62 void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter, | 69 void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter, |
63 device::BluetoothDevice* device) { | 70 device::BluetoothDevice* device) { |
64 if (client_) { | 71 if (client_) { |
65 auto device_info = ConstructDeviceInfoStruct(device); | 72 auto device_info = Device::ConstructDeviceInfoStruct(device); |
66 client_->DeviceRemoved(std::move(device_info)); | 73 client_->DeviceRemoved(std::move(device_info)); |
67 } | 74 } |
68 } | 75 } |
69 | 76 |
70 // static | |
71 mojom::DeviceInfoPtr Adapter::ConstructDeviceInfoStruct( | |
72 const device::BluetoothDevice* device) { | |
73 mojom::DeviceInfoPtr device_info = mojom::DeviceInfo::New(); | |
74 | |
75 device_info->name = device->GetName(); | |
76 device_info->name_for_display = | |
77 base::UTF16ToUTF8(device->GetNameForDisplay()); | |
78 device_info->id = device->GetIdentifier(); | |
79 device_info->address = device->GetAddress(); | |
80 | |
81 return device_info; | |
82 } | |
83 | |
84 } // namespace bluetooth | 77 } // namespace bluetooth |
OLD | NEW |