Commit b0a9322a authored by Daniele Castagna's avatar Daniele Castagna Committed by Commit Bot

chromeos/dbus: Add ambient color temperature signal to PowerManagerClient

This CL adds support for dbus "AmbientColorTemperatureChanged" signal.
A new method AmbientColorChanged is added to PowerManagerClient
and it will be called every time powerd emits a new ambient color
temperature.

A prototpe using the new signal can be found here: crrev.com/c/1883289

Bug: b/138731765
Test: chromeos_unittests --gtest_filter=PowerManagerClientTest.ChangeAmbientColorTemperature

Change-Id: Idf6462e90f4c378cd03dfd131434e045748deaf6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1900432
Commit-Queue: Daniele Castagna <dcastagna@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713622}
parent c0ce5411
......@@ -178,6 +178,8 @@ class PowerManagerClientImpl : public PowerManagerClient {
const std::map<const char*, SignalMethod> kSignalMethods = {
{power_manager::kScreenBrightnessChangedSignal,
&PowerManagerClientImpl::ScreenBrightnessChangedReceived},
{power_manager::kAmbientColorTemperatureChangedSignal,
&PowerManagerClientImpl::AmbientColorTemperatureChangedReceived},
{power_manager::kKeyboardBrightnessChangedSignal,
&PowerManagerClientImpl::KeyboardBrightnessChangedReceived},
{power_manager::kScreenIdleStateChangedSignal,
......@@ -617,6 +619,20 @@ class PowerManagerClientImpl : public PowerManagerClient {
observer.ScreenBrightnessChanged(proto);
}
void AmbientColorTemperatureChangedReceived(dbus::Signal* signal) {
dbus::MessageReader reader(signal);
int32_t color_temperature = 0;
if (!reader.PopInt32(&color_temperature)) {
POWER_LOG(ERROR) << "Unable to decode read ambient color from "
<< power_manager::kAmbientColorTemperatureChangedSignal
<< " signal";
return;
}
for (auto& observer : observers_)
observer.AmbientColorChanged(color_temperature);
}
void KeyboardBrightnessChangedReceived(dbus::Signal* signal) {
dbus::MessageReader reader(signal);
power_manager::BacklightBrightnessChange proto;
......
......@@ -82,6 +82,9 @@ class COMPONENT_EXPORT(DBUS_POWER) PowerManagerClient {
virtual void ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) {}
// Called when the ambient light changed.
virtual void AmbientColorChanged(const int32_t color_temperature) {}
// Called when the keyboard brightness is changed.
virtual void KeyboardBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) {}
......
......@@ -96,6 +96,9 @@ class TestObserver : public PowerManagerClient::Observer {
const base::UnguessableToken& block_suspend_token() const {
return block_suspend_token_;
}
int32_t ambient_color_temperature() const {
return ambient_color_temperature_;
}
void set_should_block_suspend(bool take_callback) {
should_block_suspend_ = take_callback;
......@@ -135,6 +138,9 @@ class TestObserver : public PowerManagerClient::Observer {
if (run_unblock_suspend_immediately_)
CHECK(UnblockSuspend());
}
void AmbientColorChanged(const int32_t color_temperature) override {
ambient_color_temperature_ = color_temperature;
}
private:
PowerManagerClient* client_; // Not owned.
......@@ -157,6 +163,8 @@ class TestObserver : public PowerManagerClient::Observer {
// When non-empty, the token for the outstanding block-suspend registration.
base::UnguessableToken block_suspend_token_;
// Ambient color temperature
int32_t ambient_color_temperature_ = 0;
DISALLOW_COPY_AND_ASSIGN(TestObserver);
};
......@@ -592,4 +600,17 @@ TEST_F(PowerManagerClientTest, SyncCallbackWithMultipleObservers) {
EmitSuspendDoneSignal(kSuspendId);
}
// Tests that observers are notified about changes in ambient color temperature.
TEST_F(PowerManagerClientTest, ChangeAmbientColorTemperature) {
TestObserver observer(client_);
constexpr int32_t kTemperature = 6500;
dbus::Signal signal(kInterface,
power_manager::kAmbientColorTemperatureChangedSignal);
dbus::MessageWriter(&signal).AppendInt32(kTemperature);
EmitSignal(&signal);
EXPECT_EQ(kTemperature, observer.ambient_color_temperature());
}
} // namespace chromeos
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