| OLD | NEW | 
|    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" | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   57   return adapter->weak_ptr_factory_.GetWeakPtr(); |   57   return adapter->weak_ptr_factory_.GetWeakPtr(); | 
|   58 } |   58 } | 
|   59  |   59  | 
|   60 // static |   60 // static | 
|   61 bool BluetoothAdapterAndroid::RegisterJNI(JNIEnv* env) { |   61 bool BluetoothAdapterAndroid::RegisterJNI(JNIEnv* env) { | 
|   62   return RegisterNativesImpl(env);  // Generated in BluetoothAdapter_jni.h |   62   return RegisterNativesImpl(env);  // Generated in BluetoothAdapter_jni.h | 
|   63 } |   63 } | 
|   64  |   64  | 
|   65 std::string BluetoothAdapterAndroid::GetAddress() const { |   65 std::string BluetoothAdapterAndroid::GetAddress() const { | 
|   66   return ConvertJavaStringToUTF8(Java_ChromeBluetoothAdapter_getAddress( |   66   return ConvertJavaStringToUTF8(Java_ChromeBluetoothAdapter_getAddress( | 
|   67       AttachCurrentThread(), j_adapter_.obj())); |   67       AttachCurrentThread(), j_adapter_)); | 
|   68 } |   68 } | 
|   69  |   69  | 
|   70 std::string BluetoothAdapterAndroid::GetName() const { |   70 std::string BluetoothAdapterAndroid::GetName() const { | 
|   71   return ConvertJavaStringToUTF8(Java_ChromeBluetoothAdapter_getName( |   71   return ConvertJavaStringToUTF8( | 
|   72       AttachCurrentThread(), j_adapter_.obj())); |   72       Java_ChromeBluetoothAdapter_getName(AttachCurrentThread(), j_adapter_)); | 
|   73 } |   73 } | 
|   74  |   74  | 
|   75 void BluetoothAdapterAndroid::SetName(const std::string& name, |   75 void BluetoothAdapterAndroid::SetName(const std::string& name, | 
|   76                                       const base::Closure& callback, |   76                                       const base::Closure& callback, | 
|   77                                       const ErrorCallback& error_callback) { |   77                                       const ErrorCallback& error_callback) { | 
|   78   NOTIMPLEMENTED(); |   78   NOTIMPLEMENTED(); | 
|   79 } |   79 } | 
|   80  |   80  | 
|   81 bool BluetoothAdapterAndroid::IsInitialized() const { |   81 bool BluetoothAdapterAndroid::IsInitialized() const { | 
|   82   return true; |   82   return true; | 
|   83 } |   83 } | 
|   84  |   84  | 
|   85 bool BluetoothAdapterAndroid::IsPresent() const { |   85 bool BluetoothAdapterAndroid::IsPresent() const { | 
|   86   return Java_ChromeBluetoothAdapter_isPresent(AttachCurrentThread(), |   86   return Java_ChromeBluetoothAdapter_isPresent(AttachCurrentThread(), | 
|   87                                                j_adapter_.obj()); |   87                                                j_adapter_); | 
|   88 } |   88 } | 
|   89  |   89  | 
|   90 bool BluetoothAdapterAndroid::IsPowered() const { |   90 bool BluetoothAdapterAndroid::IsPowered() const { | 
|   91   return Java_ChromeBluetoothAdapter_isPowered(AttachCurrentThread(), |   91   return Java_ChromeBluetoothAdapter_isPowered(AttachCurrentThread(), | 
|   92                                                j_adapter_.obj()); |   92                                                j_adapter_); | 
|   93 } |   93 } | 
|   94  |   94  | 
|   95 void BluetoothAdapterAndroid::SetPowered(bool powered, |   95 void BluetoothAdapterAndroid::SetPowered(bool powered, | 
|   96                                          const base::Closure& callback, |   96                                          const base::Closure& callback, | 
|   97                                          const ErrorCallback& error_callback) { |   97                                          const ErrorCallback& error_callback) { | 
|   98   if (Java_ChromeBluetoothAdapter_setPowered(AttachCurrentThread(), |   98   if (Java_ChromeBluetoothAdapter_setPowered(AttachCurrentThread(), j_adapter_, | 
|   99                                              j_adapter_.obj(), powered)) { |   99                                              powered)) { | 
|  100     callback.Run(); |  100     callback.Run(); | 
|  101   } else { |  101   } else { | 
|  102     error_callback.Run(); |  102     error_callback.Run(); | 
|  103   } |  103   } | 
|  104 } |  104 } | 
|  105  |  105  | 
|  106 bool BluetoothAdapterAndroid::IsDiscoverable() const { |  106 bool BluetoothAdapterAndroid::IsDiscoverable() const { | 
|  107   return Java_ChromeBluetoothAdapter_isDiscoverable(AttachCurrentThread(), |  107   return Java_ChromeBluetoothAdapter_isDiscoverable(AttachCurrentThread(), | 
|  108                                                     j_adapter_.obj()); |  108                                                     j_adapter_); | 
|  109 } |  109 } | 
|  110  |  110  | 
|  111 void BluetoothAdapterAndroid::SetDiscoverable( |  111 void BluetoothAdapterAndroid::SetDiscoverable( | 
|  112     bool discoverable, |  112     bool discoverable, | 
|  113     const base::Closure& callback, |  113     const base::Closure& callback, | 
|  114     const ErrorCallback& error_callback) { |  114     const ErrorCallback& error_callback) { | 
|  115   NOTIMPLEMENTED(); |  115   NOTIMPLEMENTED(); | 
|  116 } |  116 } | 
|  117  |  117  | 
|  118 bool BluetoothAdapterAndroid::IsDiscovering() const { |  118 bool BluetoothAdapterAndroid::IsDiscovering() const { | 
|  119   return Java_ChromeBluetoothAdapter_isDiscovering(AttachCurrentThread(), |  119   return Java_ChromeBluetoothAdapter_isDiscovering(AttachCurrentThread(), | 
|  120                                                    j_adapter_.obj()); |  120                                                    j_adapter_); | 
|  121 } |  121 } | 
|  122  |  122  | 
|  123 BluetoothAdapter::UUIDList BluetoothAdapterAndroid::GetUUIDs() const { |  123 BluetoothAdapter::UUIDList BluetoothAdapterAndroid::GetUUIDs() const { | 
|  124   NOTIMPLEMENTED(); |  124   NOTIMPLEMENTED(); | 
|  125   return UUIDList(); |  125   return UUIDList(); | 
|  126 } |  126 } | 
|  127  |  127  | 
|  128 void BluetoothAdapterAndroid::CreateRfcommService( |  128 void BluetoothAdapterAndroid::CreateRfcommService( | 
|  129     const BluetoothUUID& uuid, |  129     const BluetoothUUID& uuid, | 
|  130     const ServiceOptions& options, |  130     const ServiceOptions& options, | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  207     FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |  207     FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 
|  208                       DeviceChanged(this, device_android)); |  208                       DeviceChanged(this, device_android)); | 
|  209   } |  209   } | 
|  210 } |  210 } | 
|  211  |  211  | 
|  212 BluetoothAdapterAndroid::BluetoothAdapterAndroid() : weak_ptr_factory_(this) { |  212 BluetoothAdapterAndroid::BluetoothAdapterAndroid() : weak_ptr_factory_(this) { | 
|  213 } |  213 } | 
|  214  |  214  | 
|  215 BluetoothAdapterAndroid::~BluetoothAdapterAndroid() { |  215 BluetoothAdapterAndroid::~BluetoothAdapterAndroid() { | 
|  216   Java_ChromeBluetoothAdapter_onBluetoothAdapterAndroidDestruction( |  216   Java_ChromeBluetoothAdapter_onBluetoothAdapterAndroidDestruction( | 
|  217       AttachCurrentThread(), j_adapter_.obj()); |  217       AttachCurrentThread(), j_adapter_); | 
|  218 } |  218 } | 
|  219  |  219  | 
|  220 void BluetoothAdapterAndroid::PurgeTimedOutDevices() { |  220 void BluetoothAdapterAndroid::PurgeTimedOutDevices() { | 
|  221   RemoveTimedOutDevices(); |  221   RemoveTimedOutDevices(); | 
|  222   if (IsDiscovering()) { |  222   if (IsDiscovering()) { | 
|  223     ui_task_runner_->PostDelayedTask( |  223     ui_task_runner_->PostDelayedTask( | 
|  224         FROM_HERE, base::Bind(&BluetoothAdapterAndroid::PurgeTimedOutDevices, |  224         FROM_HERE, base::Bind(&BluetoothAdapterAndroid::PurgeTimedOutDevices, | 
|  225                               weak_ptr_factory_.GetWeakPtr()), |  225                               weak_ptr_factory_.GetWeakPtr()), | 
|  226         base::TimeDelta::FromMilliseconds(kActivePollInterval)); |  226         base::TimeDelta::FromMilliseconds(kActivePollInterval)); | 
|  227   } else { |  227   } else { | 
|  228     ui_task_runner_->PostDelayedTask( |  228     ui_task_runner_->PostDelayedTask( | 
|  229         FROM_HERE, base::Bind(&BluetoothAdapterAndroid::RemoveTimedOutDevices, |  229         FROM_HERE, base::Bind(&BluetoothAdapterAndroid::RemoveTimedOutDevices, | 
|  230                               weak_ptr_factory_.GetWeakPtr()), |  230                               weak_ptr_factory_.GetWeakPtr()), | 
|  231         base::TimeDelta::FromMilliseconds(kPassivePollInterval)); |  231         base::TimeDelta::FromMilliseconds(kPassivePollInterval)); | 
|  232   } |  232   } | 
|  233 } |  233 } | 
|  234  |  234  | 
|  235 void BluetoothAdapterAndroid::AddDiscoverySession( |  235 void BluetoothAdapterAndroid::AddDiscoverySession( | 
|  236     BluetoothDiscoveryFilter* discovery_filter, |  236     BluetoothDiscoveryFilter* discovery_filter, | 
|  237     const base::Closure& callback, |  237     const base::Closure& callback, | 
|  238     const DiscoverySessionErrorCallback& error_callback) { |  238     const DiscoverySessionErrorCallback& error_callback) { | 
|  239   // TODO(scheib): Support filters crbug.com/490401 |  239   // TODO(scheib): Support filters crbug.com/490401 | 
|  240   bool session_added = false; |  240   bool session_added = false; | 
|  241   if (IsPowered()) { |  241   if (IsPowered()) { | 
|  242     if (num_discovery_sessions_ > 0) { |  242     if (num_discovery_sessions_ > 0) { | 
|  243       session_added = true; |  243       session_added = true; | 
|  244     } else if (Java_ChromeBluetoothAdapter_startScan(AttachCurrentThread(), |  244     } else if (Java_ChromeBluetoothAdapter_startScan(AttachCurrentThread(), | 
|  245                                                      j_adapter_.obj())) { |  245                                                      j_adapter_)) { | 
|  246       session_added = true; |  246       session_added = true; | 
|  247  |  247  | 
|  248       // Using a delayed task in order to give the adapter some time |  248       // Using a delayed task in order to give the adapter some time | 
|  249       // to settle before purging devices. |  249       // to settle before purging devices. | 
|  250       ui_task_runner_->PostDelayedTask( |  250       ui_task_runner_->PostDelayedTask( | 
|  251           FROM_HERE, base::Bind(&BluetoothAdapterAndroid::PurgeTimedOutDevices, |  251           FROM_HERE, base::Bind(&BluetoothAdapterAndroid::PurgeTimedOutDevices, | 
|  252                                 weak_ptr_factory_.GetWeakPtr()), |  252                                 weak_ptr_factory_.GetWeakPtr()), | 
|  253           base::TimeDelta::FromMilliseconds(kPurgeDelay)); |  253           base::TimeDelta::FromMilliseconds(kPurgeDelay)); | 
|  254     } |  254     } | 
|  255   } else { |  255   } else { | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|  274   bool session_removed = false; |  274   bool session_removed = false; | 
|  275   if (num_discovery_sessions_ == 0) { |  275   if (num_discovery_sessions_ == 0) { | 
|  276     VLOG(1) << "RemoveDiscoverySession: No scan in progress."; |  276     VLOG(1) << "RemoveDiscoverySession: No scan in progress."; | 
|  277     NOTREACHED(); |  277     NOTREACHED(); | 
|  278   } else { |  278   } else { | 
|  279     --num_discovery_sessions_; |  279     --num_discovery_sessions_; | 
|  280     session_removed = true; |  280     session_removed = true; | 
|  281     if (num_discovery_sessions_ == 0) { |  281     if (num_discovery_sessions_ == 0) { | 
|  282       VLOG(1) << "RemoveDiscoverySession: Now 0 sessions. Stopping scan."; |  282       VLOG(1) << "RemoveDiscoverySession: Now 0 sessions. Stopping scan."; | 
|  283       session_removed = Java_ChromeBluetoothAdapter_stopScan( |  283       session_removed = Java_ChromeBluetoothAdapter_stopScan( | 
|  284           AttachCurrentThread(), j_adapter_.obj()); |  284           AttachCurrentThread(), j_adapter_); | 
|  285     } else { |  285     } else { | 
|  286       VLOG(1) << "RemoveDiscoverySession: Now " |  286       VLOG(1) << "RemoveDiscoverySession: Now " | 
|  287               << unsigned(num_discovery_sessions_) << " sessions."; |  287               << unsigned(num_discovery_sessions_) << " sessions."; | 
|  288     } |  288     } | 
|  289   } |  289   } | 
|  290  |  290  | 
|  291   if (session_removed) { |  291   if (session_removed) { | 
|  292     callback.Run(); |  292     callback.Run(); | 
|  293   } else { |  293   } else { | 
|  294     // TODO(scheib): Eventually wire the SCAN_FAILED result through to here. |  294     // TODO(scheib): Eventually wire the SCAN_FAILED result through to here. | 
|  295     error_callback.Run(UMABluetoothDiscoverySessionOutcome::UNKNOWN); |  295     error_callback.Run(UMABluetoothDiscoverySessionOutcome::UNKNOWN); | 
|  296   } |  296   } | 
|  297 } |  297 } | 
|  298  |  298  | 
|  299 void BluetoothAdapterAndroid::SetDiscoveryFilter( |  299 void BluetoothAdapterAndroid::SetDiscoveryFilter( | 
|  300     std::unique_ptr<BluetoothDiscoveryFilter> discovery_filter, |  300     std::unique_ptr<BluetoothDiscoveryFilter> discovery_filter, | 
|  301     const base::Closure& callback, |  301     const base::Closure& callback, | 
|  302     const DiscoverySessionErrorCallback& error_callback) { |  302     const DiscoverySessionErrorCallback& error_callback) { | 
|  303   // TODO(scheib): Support filters crbug.com/490401 |  303   // TODO(scheib): Support filters crbug.com/490401 | 
|  304   NOTIMPLEMENTED(); |  304   NOTIMPLEMENTED(); | 
|  305   error_callback.Run(UMABluetoothDiscoverySessionOutcome::NOT_IMPLEMENTED); |  305   error_callback.Run(UMABluetoothDiscoverySessionOutcome::NOT_IMPLEMENTED); | 
|  306 } |  306 } | 
|  307  |  307  | 
|  308 void BluetoothAdapterAndroid::RemovePairingDelegateInternal( |  308 void BluetoothAdapterAndroid::RemovePairingDelegateInternal( | 
|  309     device::BluetoothDevice::PairingDelegate* pairing_delegate) { |  309     device::BluetoothDevice::PairingDelegate* pairing_delegate) { | 
|  310 } |  310 } | 
|  311  |  311  | 
|  312 }  // namespace device |  312 }  // namespace device | 
| OLD | NEW |