Commit 40b97d22 authored by Sonny Sasaka's avatar Sonny Sasaka Committed by Chromium LUCI CQ

[Bluetooth] Remove HfpBatteryListener

Battery reporting via HFP is now consolidated into BlueZ, so there is no
need to listen to CRAS directly.

BUG=b:172361090,b:166543531

Change-Id: Id0f54323790a5788e09441a32a9a4be77a3d8bb8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2593821Reviewed-by: default avatarRyan Hansberry <hansberry@chromium.org>
Reviewed-by: default avatarAhmed Fakhry <afakhry@chromium.org>
Commit-Queue: Sonny Sasaka <sonnysasaka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#837358}
parent 5ceae953
...@@ -714,8 +714,6 @@ component("ash") { ...@@ -714,8 +714,6 @@ component("ash") {
"multi_user/user_switch_animator.h", "multi_user/user_switch_animator.h",
"policy/policy_recommendation_restorer.cc", "policy/policy_recommendation_restorer.cc",
"policy/policy_recommendation_restorer.h", "policy/policy_recommendation_restorer.h",
"power/hfp_battery_listener.cc",
"power/hfp_battery_listener.h",
"power/hid_battery_listener.cc", "power/hid_battery_listener.cc",
"power/hid_battery_listener.h", "power/hid_battery_listener.h",
"power/hid_battery_util.cc", "power/hid_battery_util.cc",
...@@ -2117,7 +2115,6 @@ test("ash_unittests") { ...@@ -2117,7 +2115,6 @@ test("ash_unittests") {
"metrics/user_metrics_recorder_unittest.cc", "metrics/user_metrics_recorder_unittest.cc",
"multi_device_setup/multi_device_notification_presenter_unittest.cc", "multi_device_setup/multi_device_notification_presenter_unittest.cc",
"policy/policy_recommendation_restorer_unittest.cc", "policy/policy_recommendation_restorer_unittest.cc",
"power/hfp_battery_listener_unittest.cc",
"power/hid_battery_listener_unittest.cc", "power/hid_battery_listener_unittest.cc",
"power/hid_battery_util_unittest.cc", "power/hid_battery_util_unittest.cc",
"quick_answers/quick_answers_controller_unittest.cc", "quick_answers/quick_answers_controller_unittest.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/power/hfp_battery_listener.h"
#include "device/bluetooth/bluetooth_device.h"
namespace ash {
HfpBatteryListener::HfpBatteryListener(
scoped_refptr<device::BluetoothAdapter> adapter)
: adapter_(adapter) {
DCHECK(adapter);
chromeos::CrasAudioHandler::Get()->AddAudioObserver(this);
adapter_->AddObserver(this);
// We may be late for DeviceAdded notifications. So for the already added
// devices, simulate DeviceAdded events.
for (auto* const device : adapter_->GetDevices())
DeviceAdded(adapter_.get(), device);
}
HfpBatteryListener::~HfpBatteryListener() {
chromeos::CrasAudioHandler::Get()->RemoveAudioObserver(this);
adapter_->RemoveObserver(this);
}
void HfpBatteryListener::OnBluetoothBatteryChanged(const std::string& address,
uint32_t level) {
device::BluetoothDevice* device = adapter_->GetDevice(address);
if (!device)
return;
if (level > 100)
device->SetBatteryPercentage(base::nullopt);
else
device->SetBatteryPercentage(level);
}
void HfpBatteryListener::DeviceAdded(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) {
chromeos::CrasAudioHandler::Get()->ResendBluetoothBattery();
}
} // namespace ash
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_POWER_HFP_BATTERY_LISTENER_H_
#define ASH_POWER_HFP_BATTERY_LISTENER_H_
#include "ash/ash_export.h"
#include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "chromeos/audio/cras_audio_handler.h"
#include "device/bluetooth/bluetooth_adapter.h"
namespace device {
class BluetoothAdapter;
} // namespace device
namespace ash {
// Listens to changes in battery level for devices compatible with the Hands
// Free Profile, updating the corresponding device::BluetoothDevice.
// TODO(b/166543531): Remove after migrated to BlueZ Battery Provider API.
class ASH_EXPORT HfpBatteryListener
: public chromeos::CrasAudioHandler::AudioObserver,
public device::BluetoothAdapter::Observer {
public:
explicit HfpBatteryListener(scoped_refptr<device::BluetoothAdapter> adapter);
~HfpBatteryListener() override;
private:
friend class HfpBatteryListenerTest;
// chromeos::CrasAudioHandler::AudioObserver:
void OnBluetoothBatteryChanged(const std::string& address,
uint32_t level) override;
// device::BluetoothAdapter::Observer:
void DeviceAdded(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) override;
scoped_refptr<device::BluetoothAdapter> adapter_;
DISALLOW_COPY_AND_ASSIGN(HfpBatteryListener);
};
} // namespace ash
#endif // ASH_POWER_HFP_BATTERY_LISTENER_H_
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/power/hfp_battery_listener.h"
#include <memory>
#include "ash/test/ash_test_base.h"
#include "base/memory/scoped_refptr.h"
#include "device/bluetooth/test/mock_bluetooth_adapter.h"
#include "device/bluetooth/test/mock_bluetooth_device.h"
#include "testing/gmock/include/gmock/gmock.h"
using testing::_;
using testing::NiceMock;
using testing::Return;
namespace ash {
namespace {
const char kAddress[] = "ff:ee:dd:cc:bb:aa";
const char kDeviceName[] = "test device";
} // namespace
class HfpBatteryListenerTest : public AshTestBase {
public:
HfpBatteryListenerTest() = default;
~HfpBatteryListenerTest() override = default;
void SetUp() override {
AshTestBase::SetUp();
mock_adapter_ =
base::MakeRefCounted<NiceMock<device::MockBluetoothAdapter>>();
mock_device_ = std::make_unique<NiceMock<device::MockBluetoothDevice>>(
mock_adapter_.get(), 0 /* bluetooth_class */, kDeviceName, kAddress,
true /* paired */, true /* connected */);
ASSERT_FALSE(mock_device_->battery_percentage());
ON_CALL(*mock_adapter_, GetDevice(kAddress))
.WillByDefault(Return(mock_device_.get()));
// Check that HfpBatteryListener subscribes to be adapter observer.
EXPECT_CALL(*mock_adapter_, AddObserver(_))
.WillOnce(testing::SaveArg<0>(&adapter_observer_));
listener_ = std::make_unique<HfpBatteryListener>(mock_adapter_);
}
void TearDown() override {
listener_.reset();
AshTestBase::TearDown();
}
void NotifyBluetoothBatteryLevelChangedReceived(const std::string& address,
uint32_t level) {
listener_->OnBluetoothBatteryChanged(address, level);
}
protected:
scoped_refptr<NiceMock<device::MockBluetoothAdapter>> mock_adapter_;
std::unique_ptr<device::MockBluetoothDevice> mock_device_;
std::unique_ptr<HfpBatteryListener> listener_;
device::BluetoothAdapter::Observer* adapter_observer_;
private:
DISALLOW_COPY_AND_ASSIGN(HfpBatteryListenerTest);
};
TEST_F(HfpBatteryListenerTest, SetsBatteryToDevice) {
NotifyBluetoothBatteryLevelChangedReceived(kAddress, 100);
EXPECT_EQ(100, mock_device_->battery_percentage());
NotifyBluetoothBatteryLevelChangedReceived(kAddress, 0);
EXPECT_EQ(0, mock_device_->battery_percentage());
NotifyBluetoothBatteryLevelChangedReceived(kAddress, 55);
EXPECT_EQ(55, mock_device_->battery_percentage());
}
TEST_F(HfpBatteryListenerTest, InvalidBatteryLevel) {
NotifyBluetoothBatteryLevelChangedReceived(kAddress, 101);
EXPECT_EQ(base::nullopt, mock_device_->battery_percentage());
NotifyBluetoothBatteryLevelChangedReceived(kAddress, 200);
EXPECT_EQ(base::nullopt, mock_device_->battery_percentage());
}
TEST_F(HfpBatteryListenerTest, DeviceNotPresentInAdapter) {
ON_CALL(*mock_adapter_, GetDevice(kAddress)).WillByDefault(Return(nullptr));
// Should not crash.
NotifyBluetoothBatteryLevelChangedReceived(kAddress, 100);
}
} // namespace ash
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "ash/power/peripheral_battery_tracker.h" #include "ash/power/peripheral_battery_tracker.h"
#include "ash/power/hfp_battery_listener.h"
#include "ash/power/hid_battery_listener.h" #include "ash/power/hid_battery_listener.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/check.h" #include "base/check.h"
...@@ -25,9 +24,9 @@ void PeripheralBatteryTracker::InitializeOnBluetoothReady( ...@@ -25,9 +24,9 @@ void PeripheralBatteryTracker::InitializeOnBluetoothReady(
scoped_refptr<device::BluetoothAdapter> adapter) { scoped_refptr<device::BluetoothAdapter> adapter) {
adapter_ = adapter; adapter_ = adapter;
DCHECK(adapter_.get()); DCHECK(adapter_.get());
hfp_battery_listener_ = std::make_unique<HfpBatteryListener>(adapter_);
hid_battery_listener_ = std::make_unique<HidBatteryListener>(adapter_); hid_battery_listener_ = std::make_unique<HidBatteryListener>(adapter_);
// GATT Battery reporting is handled by device::BluetoothBatteryClient. // GATT and HFP Battery reporting is handled by
// device::BluetoothBatteryClient.
} }
} // namespace ash } // namespace ash
...@@ -33,7 +33,6 @@ class ASH_EXPORT PeripheralBatteryTracker { ...@@ -33,7 +33,6 @@ class ASH_EXPORT PeripheralBatteryTracker {
scoped_refptr<device::BluetoothAdapter> adapter_; scoped_refptr<device::BluetoothAdapter> adapter_;
std::unique_ptr<HfpBatteryListener> hfp_battery_listener_;
std::unique_ptr<HidBatteryListener> hid_battery_listener_; std::unique_ptr<HidBatteryListener> hid_battery_listener_;
base::WeakPtrFactory<PeripheralBatteryTracker> weak_ptr_factory_{this}; base::WeakPtrFactory<PeripheralBatteryTracker> weak_ptr_factory_{this};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment