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

Commit 05480f1f authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Fix dangling pointer issues post Bluetooth shutdown cleanup for delayed...

Merge "Fix dangling pointer issues post Bluetooth shutdown cleanup for delayed task in main thread."
parents 977a8526 ba0d0fc5
Loading
Loading
Loading
Loading
+36 −8
Original line number Diff line number Diff line
@@ -321,13 +321,13 @@ class HearingAidImpl : public HearingAid {
    return connection_interval;
  }

  void Connect(const RawAddress& address) override {
  void Connect(const RawAddress& address) {
    LOG_DEBUG("%s", address.ToStringForLogging().c_str());
    hearingDevices.Add(HearingDevice(address, true));
    BTA_GATTC_Open(gatt_if, address, BTM_BLE_DIRECT_CONNECTION, false);
  }

  void AddToAcceptlist(const RawAddress& address) override {
  void AddToAcceptlist(const RawAddress& address) {
    LOG_DEBUG("%s", address.ToStringForLogging().c_str());
    hearingDevices.Add(HearingDevice(address, true));
    BTA_GATTC_Open(gatt_if, address, BTM_BLE_BKG_CONNECT_ALLOW_LIST, false);
@@ -1593,7 +1593,7 @@ class HearingAidImpl : public HearingAid {
    dprintf(fd, "%s", stream.str().c_str());
  }

  void Disconnect(const RawAddress& address) override {
  void Disconnect(const RawAddress& address) {
    HearingDevice* hearingDevice = hearingDevices.FindByAddress(address);
    if (!hearingDevice) {
      LOG_INFO("Device not connected to profile %s",
@@ -1716,7 +1716,7 @@ class HearingAidImpl : public HearingAid {
    current_volume = VOLUME_UNKNOWN;
  }

  void SetVolume(int8_t volume) override {
  void SetVolume(int8_t volume) {
    LOG_DEBUG("%d", volume);
    current_volume = volume;
    for (HearingDevice& device : hearingDevices.devices) {
@@ -1950,6 +1950,7 @@ void HearingAid::Initialize(
    bluetooth::hearing_aid::HearingAidCallbacks* callbacks, Closure initCb) {
  if (instance) {
    LOG_ERROR("Already initialized!");
    return;
  }

  audioReceiver = &audioReceiverImpl;
@@ -1959,10 +1960,37 @@ void HearingAid::Initialize(

bool HearingAid::IsHearingAidRunning() { return instance; }

HearingAid* HearingAid::Get() {
  CHECK(instance);
  return instance;
};
void HearingAid::Connect(const RawAddress& address) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->Connect(address);
}

void HearingAid::Disconnect(const RawAddress& address) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->Disconnect(address);
}

void HearingAid::AddToAcceptlist(const RawAddress& address) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->AddToAcceptlist(address);
}

void HearingAid::SetVolume(int8_t volume) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->SetVolume(volume);
}

void HearingAid::AddFromStorage(const HearingDevice& dev_info,
                                uint16_t is_acceptlisted) {
+4 −5
Original line number Diff line number Diff line
@@ -228,7 +228,6 @@ class HearingAid {
                         base::Closure initCb);
  static void CleanUp();
  static bool IsHearingAidRunning();
  static HearingAid* Get();
  static void DebugDump(int fd);

  static void AddFromStorage(const HearingDevice& dev_info,
@@ -236,10 +235,10 @@ class HearingAid {

  static int GetDeviceCount();

  virtual void Connect(const RawAddress& address) = 0;
  virtual void Disconnect(const RawAddress& address) = 0;
  virtual void AddToAcceptlist(const RawAddress& address) = 0;
  virtual void SetVolume(int8_t volume) = 0;
  static void Connect(const RawAddress& address);
  static void Disconnect(const RawAddress& address);
  static void AddToAcceptlist(const RawAddress& address);
  static void SetVolume(int8_t volume);
};

/* Represents configuration of audio codec, as exchanged between hearing aid and
+5 −11
Original line number Diff line number Diff line
@@ -85,30 +85,26 @@ class HearingAidInterfaceImpl

  void Connect(const RawAddress& address) override {
    DVLOG(2) << __func__ << " address: " << address;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Connect,
                                      Unretained(HearingAid::Get()), address));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Connect, address));
  }

  void Disconnect(const RawAddress& address) override {
    DVLOG(2) << __func__ << " address: " << address;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect,
                                      Unretained(HearingAid::Get()), address));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect, address));
    do_in_jni_thread(FROM_HERE, Bind(&btif_storage_set_hearing_aid_acceptlist,
                                     address, false));
  }

  void AddToAcceptlist(const RawAddress& address) override {
    VLOG(2) << __func__ << " address: " << address;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::AddToAcceptlist,
                                      Unretained(HearingAid::Get()), address));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::AddToAcceptlist, address));
    do_in_jni_thread(FROM_HERE, Bind(&btif_storage_set_hearing_aid_acceptlist,
                                     address, true));
  }

  void SetVolume(int8_t volume) override {
    DVLOG(2) << __func__ << " volume: " << +volume;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::SetVolume,
                                      Unretained(HearingAid::Get()), volume));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::SetVolume, volume));
  }

  void RemoveDevice(const RawAddress& address) override {
@@ -116,9 +112,7 @@ class HearingAidInterfaceImpl

    // RemoveDevice can be called on devices that don't have HA enabled
    if (HearingAid::IsHearingAidRunning()) {
      do_in_main_thread(FROM_HERE,
                        Bind(&HearingAid::Disconnect,
                             Unretained(HearingAid::Get()), address));
      do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect, address));
    }

    do_in_jni_thread(FROM_HERE,
+21 −4
Original line number Diff line number Diff line
@@ -52,22 +52,39 @@ int HearingAid::GetDeviceCount() {
  mock_function_count_map[__func__]++;
  return 0;
}

void HearingAid::AddFromStorage(const HearingDevice& dev_info,
                                uint16_t is_acceptlisted) {
  mock_function_count_map[__func__]++;
}

void HearingAid::DebugDump(int fd) { mock_function_count_map[__func__]++; }
HearingAid* HearingAid::Get() {
  mock_function_count_map[__func__]++;
  return nullptr;
}

bool HearingAid::IsHearingAidRunning() {
  mock_function_count_map[__func__]++;
  return false;
}

void HearingAid::CleanUp() { mock_function_count_map[__func__]++; }

void HearingAid::Initialize(
    bluetooth::hearing_aid::HearingAidCallbacks* callbacks,
    base::Closure initCb) {
  mock_function_count_map[__func__]++;
}

void HearingAid::Connect(const RawAddress& address) {
  mock_function_count_map[__func__]++;
}

void HearingAid::Disconnect(const RawAddress& address) {
  mock_function_count_map[__func__]++;
}

void HearingAid::AddToAcceptlist(const RawAddress& address) {
  mock_function_count_map[__func__]++;
}

void HearingAid::SetVolume(int8_t volume) {
  mock_function_count_map[__func__]++;
}