Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 032eea9b authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by android-build-merger
Browse files

Store pointer to handle outside of ISecurityManagerListener am: 12dad709 am: 9e921706

am: bfe3ea0d

Change-Id: I90de195acb9a61f28dcd576baff55a842274d324
parents 008c6ded bfe3ea0d
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -100,20 +100,20 @@ void SecurityManagerImpl::RemoveBond(std::shared_ptr<hci::ClassicDevice> device)
  // Signal Remove from database
}

void SecurityManagerImpl::RegisterCallbackListener(ISecurityManagerListener* listener) {
void SecurityManagerImpl::RegisterCallbackListener(ISecurityManagerListener* listener, os::Handler* handler) {
  if (listeners_.size() < 1) {
    listeners_.push_back(listener);
    listeners_.push_back({listener, handler});
  } else {
    bool found = false;
    for (auto it = listeners_.begin(); it != listeners_.end(); ++it) {
      found = *it == listener;
      found = it->first == listener;
      if (found) break;
    }

    if (found) {
      LOG_ERROR("Listener has already been registered!");
    } else {
      listeners_.push_back(listener);
      listeners_.push_back({listener, handler});
    }
  }
}
@@ -125,7 +125,7 @@ void SecurityManagerImpl::UnregisterCallbackListener(ISecurityManagerListener* l
    bool found = false;
    auto it = listeners_.begin();
    while (it != listeners_.end()) {
      found = *it == listener;
      found = it->first == listener;
      if (found) break;
      ++it;
    }
@@ -137,18 +137,20 @@ void SecurityManagerImpl::UnregisterCallbackListener(ISecurityManagerListener* l

void SecurityManagerImpl::FireDeviceBondedCallbacks(std::shared_ptr<Device> device) {
  for (auto& iter : listeners_) {
    iter->handler_->Post(common::Bind(&ISecurityManagerListener::OnDeviceBonded, common::Unretained(iter), device));
    iter.second->Post(common::Bind(&ISecurityManagerListener::OnDeviceBonded, common::Unretained(iter.first), device));
  }
}

void SecurityManagerImpl::FireBondFailedCallbacks(std::shared_ptr<Device> device) {
  for (auto& iter : listeners_) {
    iter->handler_->Post(common::Bind(&ISecurityManagerListener::OnDeviceBondFailed, common::Unretained(iter), device));
    iter.second->Post(
        common::Bind(&ISecurityManagerListener::OnDeviceBondFailed, common::Unretained(iter.first), device));
  }
}

void SecurityManagerImpl::FireUnbondCallbacks(std::shared_ptr<Device> device) {
  for (auto& iter : listeners_) {
    iter->handler_->Post(common::Bind(&ISecurityManagerListener::OnDeviceUnbonded, common::Unretained(iter), device));
    iter.second->Post(
        common::Bind(&ISecurityManagerListener::OnDeviceUnbonded, common::Unretained(iter.first), device));
  }
}
+4 −2
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@
#include "os/handler.h"
#include "security/channel/security_manager_channel.h"

#include <utility>

namespace bluetooth {
namespace security {

@@ -80,7 +82,7 @@ class SecurityManagerImpl /*: public channel::ISecurityManagerChannelListener*/
   *
   * @param listener ISecurityManagerListener instance to handle callbacks
   */
  void RegisterCallbackListener(ISecurityManagerListener* listener);
  void RegisterCallbackListener(ISecurityManagerListener* listener, os::Handler* handler);

  /**
   * Unregister listener for callback events from SecurityManager
@@ -90,7 +92,7 @@ class SecurityManagerImpl /*: public channel::ISecurityManagerChannelListener*/
  void UnregisterCallbackListener(ISecurityManagerListener* listener);

 protected:
  std::vector<ISecurityManagerListener*> listeners_;
  std::vector<std::pair<ISecurityManagerListener*, os::Handler*>> listeners_;
  void FireDeviceBondedCallbacks(std::shared_ptr<bluetooth::hci::Device> device);
  void FireBondFailedCallbacks(std::shared_ptr<bluetooth::hci::Device> device);
  void FireUnbondCallbacks(std::shared_ptr<bluetooth::hci::Device> device);
+3 −5
Original line number Diff line number Diff line
@@ -47,14 +47,12 @@ void SecurityManager::RemoveBond(std::shared_ptr<hci::ClassicDevice> device) {
                                           std::forward<std::shared_ptr<hci::ClassicDevice>>(device)));
}

void SecurityManager::RegisterCallbackListener(ISecurityManagerListener* listener) {
void SecurityManager::RegisterCallbackListener(ISecurityManagerListener* listener, os::Handler* handler) {
  security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::RegisterCallbackListener,
                                           common::Unretained(security_manager_impl_),
                                           std::forward<ISecurityManagerListener*>(listener)));
                                           common::Unretained(security_manager_impl_), listener, handler));
}

void SecurityManager::UnregisterCallbackListener(ISecurityManagerListener* listener) {
  security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::UnregisterCallbackListener,
                                           common::Unretained(security_manager_impl_),
                                           std::forward<ISecurityManagerListener*>(listener)));
                                           common::Unretained(security_manager_impl_), listener));
}
+1 −4
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ namespace security {
 */
class ISecurityManagerListener {
 public:
  ISecurityManagerListener(os::Handler* handler) : handler_(handler) {}
  virtual ~ISecurityManagerListener() = 0;

  /**
@@ -56,8 +55,6 @@ class ISecurityManagerListener {
   * @param device pointer to the device that is no longer bonded
   */
  virtual void OnDeviceBondFailed(std::shared_ptr<bluetooth::hci::Device> device) = 0;

  os::Handler* handler_ = nullptr;
};

/**
@@ -99,7 +96,7 @@ class SecurityManager {
   *
   * @param listener ISecurityManagerListener instance to handle callbacks
   */
  void RegisterCallbackListener(ISecurityManagerListener* listener);
  void RegisterCallbackListener(ISecurityManagerListener* listener, os::Handler* handler);

  /**
   * Unregister listener for callback events from SecurityManager