Index: device/bluetooth/bluetooth_gatt_notify_session.cc |
diff --git a/device/bluetooth/bluetooth_gatt_notify_session.cc b/device/bluetooth/bluetooth_gatt_notify_session.cc |
index 3c9a242388024c5321d4bf4bc1529bd1aaa98b23..5e22e71d08695cd06157dff8922e6c78126144d4 100644 |
--- a/device/bluetooth/bluetooth_gatt_notify_session.cc |
+++ b/device/bluetooth/bluetooth_gatt_notify_session.cc |
@@ -4,12 +4,48 @@ |
#include "device/bluetooth/bluetooth_gatt_notify_session.h" |
+#include "base/bind.h" |
+#include "base/bind_helpers.h" |
+#include "base/logging.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+#include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" |
+ |
namespace device { |
-BluetoothGattNotifySession::BluetoothGattNotifySession() { |
-} |
+BluetoothGattNotifySession::BluetoothGattNotifySession( |
+ base::WeakPtr<BluetoothRemoteGattCharacteristic> characteristic) |
+ : characteristic_(characteristic), |
+ characteristic_id_(characteristic.get() ? characteristic->GetIdentifier() |
+ : std::string()), |
+ active_(true) {} |
BluetoothGattNotifySession::~BluetoothGattNotifySession() { |
+ if (active_) { |
+ Stop(base::Bind(&base::DoNothing)); |
+ } |
+} |
+ |
+std::string BluetoothGattNotifySession::GetCharacteristicIdentifier() const { |
+ return characteristic_id_; |
+} |
+ |
+BluetoothRemoteGattCharacteristic* |
+BluetoothGattNotifySession::GetCharacteristic() const { |
+ return characteristic_.get(); |
+} |
+ |
+bool BluetoothGattNotifySession::IsActive() { |
+ return active_ && characteristic_ != nullptr && |
+ characteristic_->IsNotifying(); |
+} |
+ |
+void BluetoothGattNotifySession::Stop(const base::Closure& callback) { |
+ active_ = false; |
+ if (characteristic_ != nullptr) { |
+ characteristic_->StopNotifySession(this, callback); |
+ } else { |
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); |
+ } |
} |
} // namespace device |