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

Side by Side Diff: device/bluetooth/bluetooth_adapter_android.cc

Issue 1842223003: Remove outdated devices from Android device chooser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased on master. Created 4 years, 6 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_android.h" 5 #include "device/bluetooth/bluetooth_adapter_android.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/bind.h"
12 #include "base/location.h"
11 #include "base/sequenced_task_runner.h" 13 #include "base/sequenced_task_runner.h"
12 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
13 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
14 #include "device/bluetooth/android/wrappers.h" 16 #include "device/bluetooth/android/wrappers.h"
15 #include "device/bluetooth/bluetooth_advertisement.h" 17 #include "device/bluetooth/bluetooth_advertisement.h"
16 #include "device/bluetooth/bluetooth_device_android.h" 18 #include "device/bluetooth/bluetooth_device_android.h"
17 #include "device/bluetooth/bluetooth_discovery_session_outcome.h" 19 #include "device/bluetooth/bluetooth_discovery_session_outcome.h"
18 #include "jni/ChromeBluetoothAdapter_jni.h" 20 #include "jni/ChromeBluetoothAdapter_jni.h"
19 21
20 using base::android::AttachCurrentThread; 22 using base::android::AttachCurrentThread;
(...skipping 10 matching lines...) Expand all
31 33
32 // static 34 // static
33 base::WeakPtr<BluetoothAdapterAndroid> BluetoothAdapterAndroid::Create( 35 base::WeakPtr<BluetoothAdapterAndroid> BluetoothAdapterAndroid::Create(
34 jobject bluetooth_adapter_wrapper) { // Java Type: bluetoothAdapterWrapper 36 jobject bluetooth_adapter_wrapper) { // Java Type: bluetoothAdapterWrapper
35 BluetoothAdapterAndroid* adapter = new BluetoothAdapterAndroid(); 37 BluetoothAdapterAndroid* adapter = new BluetoothAdapterAndroid();
36 38
37 adapter->j_adapter_.Reset(Java_ChromeBluetoothAdapter_create( 39 adapter->j_adapter_.Reset(Java_ChromeBluetoothAdapter_create(
38 AttachCurrentThread(), reinterpret_cast<intptr_t>(adapter), 40 AttachCurrentThread(), reinterpret_cast<intptr_t>(adapter),
39 bluetooth_adapter_wrapper)); 41 bluetooth_adapter_wrapper));
40 42
43 adapter->ui_task_runner_ = base::ThreadTaskRunnerHandle::Get();
44 adapter->PurgeTimedOutDevices();
ortuno 2016/06/14 15:29:33 I don't think we want to be purging devices all th
perja 2016/06/15 13:03:40 Acknowledged.
45
41 return adapter->weak_ptr_factory_.GetWeakPtr(); 46 return adapter->weak_ptr_factory_.GetWeakPtr();
42 } 47 }
43 48
44 // static 49 // static
45 bool BluetoothAdapterAndroid::RegisterJNI(JNIEnv* env) { 50 bool BluetoothAdapterAndroid::RegisterJNI(JNIEnv* env) {
46 return RegisterNativesImpl(env); // Generated in BluetoothAdapter_jni.h 51 return RegisterNativesImpl(env); // Generated in BluetoothAdapter_jni.h
47 } 52 }
48 53
49 std::string BluetoothAdapterAndroid::GetAddress() const { 54 std::string BluetoothAdapterAndroid::GetAddress() const {
50 return ConvertJavaStringToUTF8(Java_ChromeBluetoothAdapter_getAddress( 55 return ConvertJavaStringToUTF8(Java_ChromeBluetoothAdapter_getAddress(
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 const JavaParamRef<jobject>& 173 const JavaParamRef<jobject>&
169 advertised_uuids) { // Java Type: List<ParcelUuid> 174 advertised_uuids) { // Java Type: List<ParcelUuid>
170 std::string device_address = ConvertJavaStringToUTF8(env, address); 175 std::string device_address = ConvertJavaStringToUTF8(env, address);
171 DevicesMap::const_iterator iter = devices_.find(device_address); 176 DevicesMap::const_iterator iter = devices_.find(device_address);
172 177
173 if (iter == devices_.end()) { 178 if (iter == devices_.end()) {
174 // New device. 179 // New device.
175 BluetoothDeviceAndroid* device_android = 180 BluetoothDeviceAndroid* device_android =
176 BluetoothDeviceAndroid::Create(this, bluetooth_device_wrapper); 181 BluetoothDeviceAndroid::Create(this, bluetooth_device_wrapper);
177 device_android->UpdateAdvertisedUUIDs(advertised_uuids); 182 device_android->UpdateAdvertisedUUIDs(advertised_uuids);
183 device_android->UpdateTimestamp();
178 devices_.add(device_address, 184 devices_.add(device_address,
179 std::unique_ptr<BluetoothDevice>(device_android)); 185 std::unique_ptr<BluetoothDevice>(device_android));
180 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 186 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
181 DeviceAdded(this, device_android)); 187 DeviceAdded(this, device_android));
182 } else { 188 } else {
183 // Existing device. 189 // Existing device.
184 BluetoothDeviceAndroid* device_android = 190 BluetoothDeviceAndroid* device_android =
185 static_cast<BluetoothDeviceAndroid*>(iter->second); 191 static_cast<BluetoothDeviceAndroid*>(iter->second);
192 device_android->UpdateTimestamp();
186 if (device_android->UpdateAdvertisedUUIDs(advertised_uuids)) { 193 if (device_android->UpdateAdvertisedUUIDs(advertised_uuids)) {
187 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 194 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
188 DeviceChanged(this, device_android)); 195 DeviceChanged(this, device_android));
189 } 196 }
190 } 197 }
191 } 198 }
192 199
193 BluetoothAdapterAndroid::BluetoothAdapterAndroid() : weak_ptr_factory_(this) { 200 BluetoothAdapterAndroid::BluetoothAdapterAndroid() : weak_ptr_factory_(this) {
194 } 201 }
195 202
196 BluetoothAdapterAndroid::~BluetoothAdapterAndroid() { 203 BluetoothAdapterAndroid::~BluetoothAdapterAndroid() {
197 Java_ChromeBluetoothAdapter_onBluetoothAdapterAndroidDestruction( 204 Java_ChromeBluetoothAdapter_onBluetoothAdapterAndroidDestruction(
198 AttachCurrentThread(), j_adapter_.obj()); 205 AttachCurrentThread(), j_adapter_.obj());
199 } 206 }
200 207
208 void BluetoothAdapterAndroid::PurgeTimedOutDevices() {
209 RemoveTimedOutDevices();
210 int pollIntervalMs = 11000;
ortuno 2016/06/14 15:29:33 Make these enums: namespace { // TODO add a com
perja 2016/06/15 13:03:40 Acknowledged.
211 if (IsDiscovering()) {
212 pollIntervalMs = 1000;
213 }
214 ui_task_runner_->PostDelayedTask(
ortuno 2016/06/14 15:29:33 I think what Vince was suggesting was that we run
perja 2016/06/15 13:03:40 Acknowledged.
215 FROM_HERE, base::Bind(&BluetoothAdapterAndroid::PurgeTimedOutDevices,
216 weak_ptr_factory_.GetWeakPtr()),
217 base::TimeDelta::FromMilliseconds(pollIntervalMs));
218 }
219
201 void BluetoothAdapterAndroid::AddDiscoverySession( 220 void BluetoothAdapterAndroid::AddDiscoverySession(
202 BluetoothDiscoveryFilter* discovery_filter, 221 BluetoothDiscoveryFilter* discovery_filter,
203 const base::Closure& callback, 222 const base::Closure& callback,
204 const DiscoverySessionErrorCallback& error_callback) { 223 const DiscoverySessionErrorCallback& error_callback) {
205 // TODO(scheib): Support filters crbug.com/490401 224 // TODO(scheib): Support filters crbug.com/490401
206 if (Java_ChromeBluetoothAdapter_addDiscoverySession(AttachCurrentThread(), 225 if (Java_ChromeBluetoothAdapter_addDiscoverySession(AttachCurrentThread(),
207 j_adapter_.obj())) { 226 j_adapter_.obj())) {
208 callback.Run(); 227 callback.Run();
209 } else { 228 } else {
210 // TODO(scheib): Eventually wire the SCAN_FAILED result through to here. 229 // TODO(scheib): Eventually wire the SCAN_FAILED result through to here.
(...skipping 21 matching lines...) Expand all
232 // TODO(scheib): Support filters crbug.com/490401 251 // TODO(scheib): Support filters crbug.com/490401
233 NOTIMPLEMENTED(); 252 NOTIMPLEMENTED();
234 error_callback.Run(UMABluetoothDiscoverySessionOutcome::NOT_IMPLEMENTED); 253 error_callback.Run(UMABluetoothDiscoverySessionOutcome::NOT_IMPLEMENTED);
235 } 254 }
236 255
237 void BluetoothAdapterAndroid::RemovePairingDelegateInternal( 256 void BluetoothAdapterAndroid::RemovePairingDelegateInternal(
238 device::BluetoothDevice::PairingDelegate* pairing_delegate) { 257 device::BluetoothDevice::PairingDelegate* pairing_delegate) {
239 } 258 }
240 259
241 } // namespace device 260 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698