blob: 017aff29d99f86e6ca5de01bd6de84751ae06233 [file] [log] [blame]
// Copyright 2020 The Chromium OS 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 "power_manager/powerd/system/ambient_light_sensor.h"
#include <algorithm>
#include <utility>
#include <base/bind.h>
#include <base/check.h>
namespace power_manager {
namespace system {
void AmbientLightSensor::SetDelegate(
std::unique_ptr<AmbientLightSensorDelegate> delegate) {
delegate_ = std::move(delegate);
if (!delegate_.get())
return;
delegate_->SetLuxCallback(base::BindRepeating(
&AmbientLightSensor::SetLuxAndColorTemperature, base::Unretained(this)));
}
void AmbientLightSensor::SetLuxAndColorTemperature(
base::Optional<int> lux, base::Optional<int> color_temperature) {
if (lux.has_value())
lux_value_ = lux.value();
if (color_temperature.has_value()) {
DCHECK(IsColorSensor());
color_temperature_ = color_temperature.value();
}
lux_value_ = std::max(lux_value_, -1);
color_temperature_ = std::max(color_temperature_, -1);
for (AmbientLightObserver& observer : observers_)
observer.OnAmbientLightUpdated(this);
}
base::FilePath AmbientLightSensor::GetIlluminancePath() const {
if (!delegate_)
return base::FilePath();
return delegate_->GetIlluminancePath();
}
void AmbientLightSensor::AddObserver(AmbientLightObserver* observer) {
DCHECK(observer);
observers_.AddObserver(observer);
}
void AmbientLightSensor::RemoveObserver(AmbientLightObserver* observer) {
DCHECK(observer);
observers_.RemoveObserver(observer);
}
bool AmbientLightSensor::IsColorSensor() const {
if (!delegate_)
return false;
return delegate_->IsColorSensor();
}
int AmbientLightSensor::GetAmbientLightLux() {
return lux_value_;
}
int AmbientLightSensor::GetColorTemperature() {
return color_temperature_;
}
} // namespace system
} // namespace power_manager