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

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

Issue 13862020: Simplified BluetoothAdapterMac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated comments Created 7 years, 8 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 #import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h> 7 #import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h>
8 #import <IOBluetooth/objc/IOBluetoothDevice.h> 8 #import <IOBluetooth/objc/IOBluetoothDevice.h>
9 #import <IOBluetooth/objc/IOBluetoothHostController.h> 9 #import <IOBluetooth/objc/IOBluetoothHostController.h>
10 10
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 BluetoothAdapterMac::BluetoothAdapterMac() 93 BluetoothAdapterMac::BluetoothAdapterMac()
94 : BluetoothAdapter(), 94 : BluetoothAdapter(),
95 powered_(false), 95 powered_(false),
96 discovery_status_(NOT_DISCOVERING), 96 discovery_status_(NOT_DISCOVERING),
97 adapter_delegate_( 97 adapter_delegate_(
98 [[BluetoothAdapterMacDelegate alloc] initWithAdapter:this]), 98 [[BluetoothAdapterMacDelegate alloc] initWithAdapter:this]),
99 device_inquiry_( 99 device_inquiry_(
100 [[IOBluetoothDeviceInquiry 100 [[IOBluetoothDeviceInquiry
101 inquiryWithDelegate:adapter_delegate_] retain]), 101 inquiryWithDelegate:adapter_delegate_] retain]),
102 recently_accessed_device_timestamp_(nil),
102 weak_ptr_factory_(this) { 103 weak_ptr_factory_(this) {
103 } 104 }
104 105
105 BluetoothAdapterMac::~BluetoothAdapterMac() { 106 BluetoothAdapterMac::~BluetoothAdapterMac() {
106 [device_inquiry_ release]; 107 [device_inquiry_ release];
107 [adapter_delegate_ release]; 108 [adapter_delegate_ release];
109 [recently_accessed_device_timestamp_ release];
108 } 110 }
109 111
110 void BluetoothAdapterMac::AddObserver(BluetoothAdapter::Observer* observer) { 112 void BluetoothAdapterMac::AddObserver(BluetoothAdapter::Observer* observer) {
111 DCHECK(observer); 113 DCHECK(observer);
112 observers_.AddObserver(observer); 114 observers_.AddObserver(observer);
113 } 115 }
114 116
115 void BluetoothAdapterMac::RemoveObserver(BluetoothAdapter::Observer* observer) { 117 void BluetoothAdapterMac::RemoveObserver(BluetoothAdapter::Observer* observer) {
116 DCHECK(observer); 118 DCHECK(observer);
117 observers_.RemoveObserver(observer); 119 observers_.RemoveObserver(observer);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 if (was_present != is_present) { 210 if (was_present != is_present) {
209 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 211 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
210 AdapterPresentChanged(this, is_present)); 212 AdapterPresentChanged(this, is_present));
211 } 213 }
212 if (powered_ != powered) { 214 if (powered_ != powered) {
213 powered_ = powered; 215 powered_ = powered;
214 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 216 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
215 AdapterPoweredChanged(this, powered_)); 217 AdapterPoweredChanged(this, powered_));
216 } 218 }
217 219
218 NSArray* paired_devices = [IOBluetoothDevice pairedDevices]; 220 IOBluetoothDevice* recent_device =
Mark Mentovai 2013/04/09 20:57:03 Extra space.
219 AddDevices(paired_devices); 221 [[IOBluetoothDevice recentDevices:1] lastObject];
220 RemoveUnpairedDevices(paired_devices); 222 NSDate* access_timestamp = [recent_device recentAccessDate];
223 if (recently_accessed_device_timestamp_ == nil ||
224 access_timestamp == nil ||
225 [recently_accessed_device_timestamp_ compare:access_timestamp] ==
226 NSOrderedAscending) {
227 UpdateDevices([IOBluetoothDevice pairedDevices]);
228 [recently_accessed_device_timestamp_ release];
229 recently_accessed_device_timestamp_ = [access_timestamp copy];
230 }
221 231
222 ui_task_runner_->PostDelayedTask( 232 ui_task_runner_->PostDelayedTask(
223 FROM_HERE, 233 FROM_HERE,
224 base::Bind(&BluetoothAdapterMac::PollAdapter, 234 base::Bind(&BluetoothAdapterMac::PollAdapter,
225 weak_ptr_factory_.GetWeakPtr()), 235 weak_ptr_factory_.GetWeakPtr()),
226 base::TimeDelta::FromMilliseconds(kPollIntervalMs)); 236 base::TimeDelta::FromMilliseconds(kPollIntervalMs));
227 } 237 }
228 238
229 void BluetoothAdapterMac::AddDevices(NSArray* devices) { 239 void BluetoothAdapterMac::UpdateDevices(NSArray* devices) {
240 STLDeleteValues(&devices_);
230 for (IOBluetoothDevice* device in devices) { 241 for (IOBluetoothDevice* device in devices) {
231 std::string device_address = 242 std::string device_address =
232 base::SysNSStringToUTF8([device addressString]); 243 base::SysNSStringToUTF8([device addressString]);
233 DevicesMap::iterator found_device_iter = devices_.find(device_address); 244 devices_[device_address] = new BluetoothDeviceMac(device);
234
235 if (found_device_iter == devices_.end()) {
236 devices_[device_address] = new BluetoothDeviceMac(device);
237 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
238 DeviceAdded(this, devices_[device_address]));
239 continue;
240 }
241 BluetoothDeviceMac* device_mac =
242 static_cast<BluetoothDeviceMac*>(found_device_iter->second);
243 if (device_mac->device_fingerprint() !=
244 BluetoothDeviceMac::ComputeDeviceFingerprint(device)) {
245 devices_[device_address] = new BluetoothDeviceMac(device);
246 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
247 DeviceChanged(this, devices_[device_address]));
248 delete device_mac;
249 }
250 } 245 }
251 } 246 }
252 247
253 void BluetoothAdapterMac::RemoveUnpairedDevices(NSArray* paired_devices) {
254 base::hash_set<std::string> paired_device_address_list;
255 for (IOBluetoothDevice* device in paired_devices) {
256 paired_device_address_list.insert(
257 base::SysNSStringToUTF8([device addressString]));
258 }
259
260 DevicesMap::iterator iter = devices_.begin();
261 while (iter != devices_.end()) {
262 DevicesMap::iterator device_iter = iter;
263 ++iter;
264
265 if (paired_device_address_list.find(device_iter->first) !=
266 paired_device_address_list.end())
267 continue;
268
269 if (device_iter->second->IsPaired()) {
270 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
271 DeviceRemoved(this, device_iter->second));
272 delete device_iter->second;
273 devices_.erase(device_iter);
274 }
275 }
276 }
277
278 void BluetoothAdapterMac::DeviceInquiryStarted( 248 void BluetoothAdapterMac::DeviceInquiryStarted(
279 IOBluetoothDeviceInquiry* inquiry) { 249 IOBluetoothDeviceInquiry* inquiry) {
280 DCHECK(device_inquiry_ == inquiry); 250 DCHECK(device_inquiry_ == inquiry);
281 if (discovery_status_ == DISCOVERING) 251 if (discovery_status_ == DISCOVERING)
282 return; 252 return;
283 253
284 discovery_status_ = DISCOVERING; 254 discovery_status_ = DISCOVERING;
285 RunCallbacks(on_start_discovery_callbacks_, true); 255 RunCallbacks(on_start_discovery_callbacks_, true);
286 num_discovery_listeners_ = on_start_discovery_callbacks_.size(); 256 num_discovery_listeners_ = on_start_discovery_callbacks_.size();
287 on_start_discovery_callbacks_.clear(); 257 on_start_discovery_callbacks_.clear();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 iter != callback_list.end(); 330 iter != callback_list.end();
361 ++iter) { 331 ++iter) {
362 if (success) 332 if (success)
363 ui_task_runner_->PostTask(FROM_HERE, iter->first); 333 ui_task_runner_->PostTask(FROM_HERE, iter->first);
364 else 334 else
365 ui_task_runner_->PostTask(FROM_HERE, iter->second); 335 ui_task_runner_->PostTask(FROM_HERE, iter->second);
366 } 336 }
367 } 337 }
368 338
369 } // namespace device 339 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698