Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: device/bluetooth/bluetooth_adapter_mac.mm

Issue 12929003: Implemented BluetoothAdapterMac::AddDevices(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: used pairedDevices instead of recentDevices Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "device/bluetooth/bluetooth_adapter_mac.h" 5 #include "device/bluetooth/bluetooth_adapter_mac.h"
6 6
7 #include <IOBluetooth/objc/IOBluetoothHostController.h> 7 #import <IOBluetooth/objc/IOBluetoothDevice.h>
8 #import <IOBluetooth/objc/IOBluetoothHostController.h>
8 9
9 #include <string> 10 #include <string>
10 11
11 #include "base/bind.h" 12 #include "base/bind.h"
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/hash_tables.h"
13 #include "base/location.h" 15 #include "base/location.h"
14 #include "base/sequenced_task_runner.h" 16 #include "base/sequenced_task_runner.h"
15 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
16 #include "base/thread_task_runner_handle.h" 18 #include "base/thread_task_runner_handle.h"
17 #include "base/time.h" 19 #include "base/time.h"
18 #include "base/strings/sys_string_conversions.h" 20 #include "base/strings/sys_string_conversions.h"
21 #include "device/bluetooth/bluetooth_device_mac.h"
19 22
20 // Replicate specific 10.7 SDK declarations for building with prior SDKs. 23 // Replicate specific 10.7 SDK declarations for building with prior SDKs.
21 #if !defined(MAC_OS_X_VERSION_10_7) || \ 24 #if !defined(MAC_OS_X_VERSION_10_7) || \
22 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 25 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
23 26
24 @interface IOBluetoothHostController (LionSDKDeclarations) 27 @interface IOBluetoothHostController (LionSDKDeclarations)
25 - (NSString *)nameAsString; 28 - (NSString *)nameAsString;
26 - (BluetoothHCIPowerState)powerState; 29 - (BluetoothHCIPowerState)powerState;
27 @end 30 @end
28 31
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 if (was_present != is_present) { 129 if (was_present != is_present) {
127 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 130 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
128 AdapterPresentChanged(this, is_present)); 131 AdapterPresentChanged(this, is_present));
129 } 132 }
130 if (powered_ != powered) { 133 if (powered_ != powered) {
131 powered_ = powered; 134 powered_ = powered;
132 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 135 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
133 AdapterPoweredChanged(this, powered_)); 136 AdapterPoweredChanged(this, powered_));
134 } 137 }
135 138
139 NSArray* paired_devices = [IOBluetoothDevice pairedDevices];
140 UpdateDevices(paired_devices);
141 RemoveUnpairedDevices(paired_devices);
142
136 ui_task_runner_->PostDelayedTask( 143 ui_task_runner_->PostDelayedTask(
137 FROM_HERE, 144 FROM_HERE,
138 base::Bind(&BluetoothAdapterMac::PollAdapter, 145 base::Bind(&BluetoothAdapterMac::PollAdapter,
139 weak_ptr_factory_.GetWeakPtr()), 146 weak_ptr_factory_.GetWeakPtr()),
140 base::TimeDelta::FromMilliseconds(kPollIntervalMs)); 147 base::TimeDelta::FromMilliseconds(kPollIntervalMs));
141 } 148 }
142 149
150 void BluetoothAdapterMac::UpdateDevices(NSArray* devices) {
151 for (IOBluetoothDevice* device in devices) {
152 std::string device_address =
153 base::SysNSStringToUTF8([device addressString]);
154 DevicesMap::iterator found_device_iter = devices_.find(device_address);
155
156 if (found_device_iter == devices_.end()) {
157 devices_[device_address] = new BluetoothDeviceMac(device);
158 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
159 DeviceAdded(this, devices_[device_address]));
160 continue;
161 }
162 BluetoothDeviceMac* device_mac =
163 static_cast<BluetoothDeviceMac*>(found_device_iter->second);
164 if (device_mac->device_fingerprint() !=
165 BluetoothDeviceMac::ComputeDeviceFingerprint(device)) {
166 devices_[device_address] = new BluetoothDeviceMac(device);
167 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
168 DeviceChanged(this, devices_[device_address]));
169 delete device_mac;
170 continue;
171 }
172 if (!device_mac->IsVisible()) {
173 device_mac->SetVisible(true);
174 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
175 DeviceChanged(this, device_mac));
176 }
177 }
178 }
179
180 void BluetoothAdapterMac::RemoveUnpairedDevices(NSArray* paired_devices) {
181 base::hash_set<std::string> paired_device_address_list;
182 for (IOBluetoothDevice* device in paired_devices)
Mark Mentovai 2013/03/20 19:01:16 Use {braces} when you’re controlling something tha
youngki 2013/03/20 20:30:50 Done.
183 paired_device_address_list.insert(
184 base::SysNSStringToUTF8([device addressString]));
185
186 DevicesMap::iterator iter = devices_.begin();
187 while (iter != devices_.end()) {
188 DevicesMap::iterator device_iter = iter;
189 ++iter;
190
191 if (paired_device_address_list.find(device_iter->first) !=
192 paired_device_address_list.end())
193 continue;
194
195 if (device_iter->second->IsPaired()) {
196 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
197 DeviceRemoved(this, device_iter->second));
198 delete device_iter->second;
Mark Mentovai 2013/03/20 19:01:16 What if IsPaired was false?
youngki 2013/03/20 20:30:50 We do nothing. I was going to reuse BluetoothDevic
199 devices_.erase(device_iter);
200 }
201 }
202 }
203
143 } // namespace device 204 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698