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

Commit 13d1b7ca authored by Rahul Arya's avatar Rahul Arya Committed by Cherrypicker Worker
Browse files

Add RotatingAddress() method to le_address_manager

This fixes an issue where we sent the LeMultiAdvtSetRandomAddr
command even when using a static address type.

Bug: 268112598
Test: unit
(cherry picked from https://android-review.googlesource.com/q/commit:acf58f75d95991b2c011f7724c2322413dd4921d)
Merged-In: I51da3a2ce4f215e14f2f0f86a378211839f98407
Change-Id: I51da3a2ce4f215e14f2f0f86a378211839f98407
Bug:279962122
parent 26ccadfa
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -152,7 +152,10 @@ void LeAddressManager::SetPrivacyPolicyForInitiatorAddressForTest(
LeAddressManager::AddressPolicy LeAddressManager::GetAddressPolicy() {
  return address_policy_;
}

bool LeAddressManager::RotatingAddress() {
  return address_policy_ == AddressPolicy::USE_RESOLVABLE_ADDRESS ||
         address_policy_ == AddressPolicy::USE_NON_RESOLVABLE_ADDRESS;
}
LeAddressManager::AddressPolicy LeAddressManager::Register(LeAddressManagerCallback* callback) {
  handler_->BindOnceOn(this, &LeAddressManager::register_client, callback).Invoke();
  return address_policy_;
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ class LeAddressManager {
      std::chrono::milliseconds minimum_rotation_time,
      std::chrono::milliseconds maximum_rotation_time);
  AddressPolicy GetAddressPolicy();
  bool RotatingAddress();
  virtual void AckPause(LeAddressManagerCallback* callback);
  virtual void AckResume(LeAddressManagerCallback* callback);
  virtual AddressPolicy Register(LeAddressManagerCallback* callback);
+4 −10
Original line number Diff line number Diff line
@@ -330,9 +330,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb

    switch (advertising_api_type_) {
      case (AdvertisingApiType::LEGACY): {
        auto address_policy = le_address_manager_->GetAddressPolicy();
        if (address_policy == LeAddressManager::AddressPolicy::USE_NON_RESOLVABLE_ADDRESS ||
            address_policy == LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          advertising_sets_[id].current_address = le_address_manager_->GetAnotherAddress();
        } else {
          advertising_sets_[id].current_address = le_address_manager_->GetCurrentAddress();
@@ -350,9 +348,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb
        }
      } break;
      case (AdvertisingApiType::ANDROID_HCI): {
        auto address_policy = le_address_manager_->GetAddressPolicy();
        if (address_policy == LeAddressManager::AddressPolicy::USE_NON_RESOLVABLE_ADDRESS ||
            address_policy == LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          advertising_sets_[id].current_address = le_address_manager_->GetAnotherAddress();
        } else {
          advertising_sets_[id].current_address = le_address_manager_->GetCurrentAddress();
@@ -363,7 +359,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb
          set_data(id, true, config.scan_response);
        }
        set_data(id, false, config.advertisement);
        if (address_policy != LeAddressManager::AddressPolicy::USE_PUBLIC_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          le_advertising_interface_->EnqueueCommand(
              hci::LeMultiAdvtSetRandomAddrBuilder::Create(advertising_sets_[id].current_address.GetAddress(), id),
              module_handler_->BindOnce(impl::check_status<LeMultiAdvtCompleteView>));
@@ -430,11 +426,9 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb
    advertising_sets_[id].max_extended_advertising_events = max_ext_adv_events;
    advertising_sets_[id].handler = handler;

    auto address_policy = le_address_manager_->GetAddressPolicy();
    switch (config.requested_advertiser_address_type) {
      case AdvertiserAddressType::RESOLVABLE_RANDOM:
        if (address_policy == LeAddressManager::AddressPolicy::USE_NON_RESOLVABLE_ADDRESS ||
            address_policy == LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          advertising_sets_[id].current_address = le_address_manager_->GetAnotherAddress();
          set_parameters(id, config);
          le_advertising_interface_->EnqueueCommand(
+1 −0
Original line number Diff line number Diff line
@@ -292,6 +292,7 @@ class LeAndroidHciAdvertisingManagerTest : public LeAdvertisingManagerTest {
  void SetUp() override {
    param_opcode_ = OpCode::LE_MULTI_ADVT;
    LeAdvertisingManagerTest::SetUp();
    test_acl_manager_->SetAddressPolicy(LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS);
  }
};