power_button_display_controller.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ASH_SYSTEM_POWER_POWER_BUTTON_DISPLAY_CONTROLLER_H_
  5. #define ASH_SYSTEM_POWER_POWER_BUTTON_DISPLAY_CONTROLLER_H_
  6. #include <memory>
  7. #include "ash/ash_export.h"
  8. #include "ash/system/power/backlights_forced_off_setter.h"
  9. #include "base/memory/weak_ptr.h"
  10. #include "base/scoped_observation.h"
  11. #include "base/time/time.h"
  12. #include "chromeos/dbus/power/power_manager_client.h"
  13. #include "ui/events/devices/input_device_event_observer.h"
  14. #include "ui/events/event_handler.h"
  15. namespace base {
  16. class TickClock;
  17. } // namespace base
  18. namespace ash {
  19. class ScopedBacklightsForcedOff;
  20. // PowerButtonDisplayController performs display-related tasks (e.g. forcing
  21. // backlights off or disabling the touchscreen) on behalf of
  22. // PowerButtonController and TabletPowerButtonController.
  23. class ASH_EXPORT PowerButtonDisplayController
  24. : public ScreenBacklightObserver,
  25. public chromeos::PowerManagerClient::Observer,
  26. public ui::EventHandler,
  27. public ui::InputDeviceEventObserver {
  28. public:
  29. PowerButtonDisplayController(
  30. BacklightsForcedOffSetter* backlights_forced_off_setter,
  31. const base::TickClock* tick_clock);
  32. PowerButtonDisplayController(const PowerButtonDisplayController&) = delete;
  33. PowerButtonDisplayController& operator=(const PowerButtonDisplayController&) =
  34. delete;
  35. ~PowerButtonDisplayController() override;
  36. bool IsScreenOn() const;
  37. base::TimeTicks screen_state_last_changed() const {
  38. return screen_state_last_changed_;
  39. }
  40. // Updates the power manager's backlights-forced-off state and enables or
  41. // disables the touchscreen. No-op if |backlights_forced_off_| already equals
  42. // |forced_off|.
  43. void SetBacklightsForcedOff(bool forced_off);
  44. // Overridden from ScreenBacklightObserver:
  45. void OnBacklightsForcedOffChanged(bool forced_off) override;
  46. void OnScreenBacklightStateChanged(
  47. ScreenBacklightState screen_backlight_state) override;
  48. // Overridden from chromeos::PowerManagerClient::Observer:
  49. void SuspendDone(base::TimeDelta sleep_duration) override;
  50. void LidEventReceived(chromeos::PowerManagerClient::LidState state,
  51. base::TimeTicks timestamp) override;
  52. void TabletModeEventReceived(chromeos::PowerManagerClient::TabletMode mode,
  53. base::TimeTicks timestamp) override;
  54. // Overridden from ui::EventHandler:
  55. void OnKeyEvent(ui::KeyEvent* event) override;
  56. void OnMouseEvent(ui::MouseEvent* event) override;
  57. // Overridden from ui::InputDeviceObserver:
  58. void OnStylusStateChanged(ui::StylusState state) override;
  59. private:
  60. // Saves the most recent timestamp that screen state changed.
  61. base::TimeTicks screen_state_last_changed_;
  62. BacklightsForcedOffSetter* backlights_forced_off_setter_; // Not owned.
  63. base::ScopedObservation<BacklightsForcedOffSetter, ScreenBacklightObserver>
  64. backlights_forced_off_observation_{this};
  65. // Whether an accessibility alert should be sent when the backlights
  66. // forced-off state changes.
  67. bool send_accessibility_alert_on_backlights_forced_off_change_ = false;
  68. // Time source for performed action times.
  69. const base::TickClock* tick_clock_; // Not owned.
  70. // If set, the active request passed to |backlights_forced_off_setter_| in
  71. // order to force the backlights off.
  72. std::unique_ptr<ScopedBacklightsForcedOff> backlights_forced_off_;
  73. base::WeakPtrFactory<PowerButtonDisplayController> weak_ptr_factory_{this};
  74. };
  75. } // namespace ash
  76. #endif // ASH_SYSTEM_POWER_POWER_BUTTON_DISPLAY_CONTROLLER_H_