#ifndef ASH_SYSTEM_POWER_POWER_BUTTON_DISPLAY_CONTROLLER_H_
#define ASH_SYSTEM_POWER_POWER_BUTTON_DISPLAY_CONTROLLER_H_
#include <memory>
#include "ash/ash_export.h"
#include "ash/system/power/backlights_forced_off_setter.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "base/time/time.h"
#include "chromeos/dbus/power/power_manager_client.h"
#include "ui/events/devices/input_device_event_observer.h"
#include "ui/events/event_handler.h"
namespace base {
class TickClock;
}
namespace ash {
class ScopedBacklightsForcedOff;
class ASH_EXPORT PowerButtonDisplayController
: public ScreenBacklightObserver,
public chromeos::PowerManagerClient::Observer,
public ui::EventHandler,
public ui::InputDeviceEventObserver {
public:
PowerButtonDisplayController(
BacklightsForcedOffSetter* backlights_forced_off_setter,
const base::TickClock* tick_clock);
PowerButtonDisplayController(const PowerButtonDisplayController&) = delete;
PowerButtonDisplayController& operator=(const PowerButtonDisplayController&) =
delete;
~PowerButtonDisplayController() override;
bool IsScreenOn() const;
base::TimeTicks screen_state_last_changed() const {
return screen_state_last_changed_;
}
void SetBacklightsForcedOff(bool forced_off);
void OnBacklightsForcedOffChanged(bool forced_off) override;
void OnScreenBacklightStateChanged(
ScreenBacklightState screen_backlight_state) override;
void SuspendDone(base::TimeDelta sleep_duration) override;
void LidEventReceived(chromeos::PowerManagerClient::LidState state,
base::TimeTicks timestamp) override;
void TabletModeEventReceived(chromeos::PowerManagerClient::TabletMode mode,
base::TimeTicks timestamp) override;
void OnKeyEvent(ui::KeyEvent* event) override;
void OnMouseEvent(ui::MouseEvent* event) override;
void OnStylusStateChanged(ui::StylusState state) override;
private:
base::TimeTicks screen_state_last_changed_;
raw_ptr<BacklightsForcedOffSetter>
backlights_forced_off_setter_;
base::ScopedObservation<BacklightsForcedOffSetter, ScreenBacklightObserver>
backlights_forced_off_observation_{this};
bool send_accessibility_alert_on_backlights_forced_off_change_ = false;
raw_ptr<const base::TickClock> tick_clock_;
std::unique_ptr<ScopedBacklightsForcedOff> backlights_forced_off_;
base::WeakPtrFactory<PowerButtonDisplayController> weak_ptr_factory_{this};
};
}
#endif