#ifndef CHROMECAST_UI_DISPLAY_SETTINGS_MANAGER_IMPL_H_
#define CHROMECAST_UI_DISPLAY_SETTINGS_MANAGER_IMPL_H_
#include <memory>
#include <vector>
#include "base/memory/weak_ptr.h"
#include "chromecast/ui/display_settings/screen_power_controller.h"
#include "chromecast/ui/display_settings_manager.h"
#include "chromecast/ui/mojom/display_settings.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote_set.h"
namespace chromecast {
class CastWindowManager;
class ColorTemperatureAnimation;
class BrightnessAnimation;
class GammaAnimation;
#if defined(USE_AURA)
class GammaConfigurator;
#endif
namespace shell {
class CastDisplayConfigurator;
}
class DisplaySettingsManagerImpl : public DisplaySettingsManager,
public ScreenPowerController::Delegate,
public mojom::DisplaySettings {
public:
DisplaySettingsManagerImpl(
CastWindowManager* window_manager,
shell::CastDisplayConfigurator* display_configurator);
DisplaySettingsManagerImpl(const DisplaySettingsManagerImpl&) = delete;
DisplaySettingsManagerImpl& operator=(const DisplaySettingsManagerImpl&) =
delete;
~DisplaySettingsManagerImpl() override;
void SetDelegate(DisplaySettingsManager::Delegate* delegate) override;
void ResetDelegate() override;
void SetColorTemperatureConfig(
const DisplaySettingsManager::ColorTemperatureConfig& config) override;
void SetGammaCalibration(
const std::vector<display::GammaRampRGBEntry>& gamma) override;
void NotifyBrightnessChanged(float new_brightness,
float old_brightness) override;
void SetColorInversion(bool enable) override;
void AddReceiver(
mojo::PendingReceiver<mojom::DisplaySettings> receiver) override;
void SetScreenPowerOn(PowerToggleCallback callback) override;
void SetScreenPowerOff(PowerToggleCallback callback) override;
void SetScreenBrightnessOn(bool brightness_on,
base::TimeDelta duration) override;
void SetColorTemperature(float temperature) override;
void SetColorTemperatureSmooth(float temperature,
base::TimeDelta duration) override;
void ResetColorTemperature() override;
void SetBrightness(float brightness) override;
void SetBrightnessSmooth(float brightness, base::TimeDelta duration) override;
void ResetBrightness() override;
void SetScreenOn(bool screen_on) override;
void SetAllowScreenPowerOff(bool allow_power_off) override;
private:
void AddDisplaySettingsObserver(
mojo::PendingRemote<mojom::DisplaySettingsObserver> observer) override;
void UpdateBrightness(float brightness, base::TimeDelta duration);
CastWindowManager* const window_manager_;
shell::CastDisplayConfigurator* const display_configurator_;
#if defined(USE_AURA)
const std::unique_ptr<GammaConfigurator> gamma_configurator_;
#endif
float brightness_;
std::unique_ptr<ScreenPowerController> screen_power_controller_;
std::unique_ptr<ColorTemperatureAnimation> color_temperature_animation_;
std::unique_ptr<BrightnessAnimation> brightness_animation_;
mojo::ReceiverSet<mojom::DisplaySettings> receivers_;
mojo::RemoteSet<mojom::DisplaySettingsObserver> observers_;
base::WeakPtrFactory<DisplaySettingsManagerImpl> weak_factory_;
};
}
#endif