blob: 0b925efcd9a362ad369c580fb861cf92cbd35185 [file] [log] [blame]
// 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 <memory>
#include "base/callback.h"
#include "base/time/time.h"
namespace chromecast {
// This is an interface that controls the screen power. There are two stages
// when the screen is off: brightness off (zero) and power off. Whether the
// screen backlight is set to zero or the screen is powered off is abstracted in
// this class. Higher-level services generally do not care which mode it's in.
// The interface doesn't perform actual actions but invokes its delegate to turn
// on/off the screen, which is easy to isolate with mock classes and write
// unittest.
class ScreenPowerController {
// The actual class that controls the brightness and the power of the
// screen.
class Delegate {
using PowerToggleCallback = base::OnceCallback<void(bool)>;
virtual ~Delegate() = default;
// Turns the screen power on and calls the |callback| with a bool that
// indicates if the action is successful.
virtual void SetScreenPowerOn(PowerToggleCallback callback) = 0;
// Turns the screen power off and calls the |callback| with a bool that
// indicates if the action is successful.
virtual void SetScreenPowerOff(PowerToggleCallback callback) = 0;
// Turns the screen brightness on/off according to |brightness_on| with an
// animation of |duration|.
virtual void SetScreenBrightnessOn(bool brightness_on,
base::TimeDelta duration) = 0;
// The factory method that creates the derived implementation class.
static std::unique_ptr<ScreenPowerController> Create(Delegate* delegate);
virtual ~ScreenPowerController() = default;
// Turns on the screen.
virtual void SetScreenOn() = 0;
// Turns off the screen and lets the derived class decide which stage should
// the screen transfer to.
virtual void SetScreenOff() = 0;
// Sets whether the screen is allow to power off.
virtual void SetAllowScreenPowerOff(bool allow_power_off) = 0;
// Returns the state whether the screen is on/off.
virtual bool IsScreenOn() const = 0;
} // namespace chromecast