[Bluetooth] Add bluetooth power off listener for GATTServer
[platform/core/api/webapi-plugins.git] / src / bluetooth / bluetooth_adapter.h
index caee94c..f19107e 100644 (file)
@@ -17,6 +17,7 @@
 #ifndef BLUETOOTH_BLUETOOTH_ADAPTER_H_
 #define BLUETOOTH_BLUETOOTH_ADAPTER_H_
 
+#include <functional>
 #include <list>
 #include <map>
 #include <memory>
@@ -35,6 +36,40 @@ enum AdapterAsyncEvent { SET_POWERED = 0, SET_NAME, SET_VISIBLE, DISCOVER_DEVICE
 
 class BluetoothInstance;
 
+class PowerStateListenersManager {
+ public:
+  PowerStateListenersManager() : count_(0) {
+    ScopeLogger();
+  }
+
+  ~PowerStateListenersManager() {
+    ScopeLogger();
+    power_state_listeners_map_.clear();
+  }
+
+  int Add(const std::function<void(const int)>& listener) {
+    ScopeLogger();
+    power_state_listeners_map_[count_] = listener;
+    return count_++;
+  }
+
+  void Remove(int id) {
+    ScopeLogger();
+    power_state_listeners_map_.erase(id);
+  }
+
+  void FireAll(bool state) {
+    ScopeLogger();
+    for (const auto& it : power_state_listeners_map_) {
+      it.second(state);
+    }
+  }
+
+ private:
+  std::map<int, std::function<void(const int)>> power_state_listeners_map_;
+  int count_;
+};
+
 class BluetoothAdapter {
  public:
   /**
@@ -305,11 +340,15 @@ class BluetoothAdapter {
   void UnregisterUUID(const std::string& uuid, int callback_handle);
 
   void SetChangeListenerCallback(bool val);
+  int AddPowerStateListener(const std::function<void(const int)>& listener);
+  void RemovePowerStateListener(int id);
 
  private:
   BluetoothAdapter(const BluetoothAdapter&) = delete;
   BluetoothAdapter& operator=(const BluetoothAdapter&) = delete;
 
+  PowerStateListenersManager power_state_listeners_;
+
   static void StateChangedCB(int result, bt_adapter_state_e state, void* user_data);
   static void NameChangedCB(char* name, void* user_data);
   static void VisibilityChangedCB(int result, bt_adapter_visibility_mode_e mode, void* user_data);