#ifndef ASH_SYSTEM_POWER_VIDEO_ACTIVITY_NOTIFIER_H_
#define ASH_SYSTEM_POWER_VIDEO_ACTIVITY_NOTIFIER_H_
#include "ash/ash_export.h"
#include "ash/public/cpp/session/session_observer.h"
#include "ash/wm/video_detector.h"
#include "base/memory/raw_ptr.h"
#include "base/timer/timer.h"
namespace ash {
class ASH_EXPORT VideoActivityNotifier : public VideoDetector::Observer,
public SessionObserver {
public:
explicit VideoActivityNotifier(VideoDetector* detector);
VideoActivityNotifier(const VideoActivityNotifier&) = delete;
VideoActivityNotifier& operator=(const VideoActivityNotifier&) = delete;
~VideoActivityNotifier() override;
void OnVideoStateChanged(VideoDetector::State state) override;
void OnLockStateChanged(bool locked) override;
[[nodiscard]] bool TriggerTimeoutForTest();
private:
bool should_notify_power_manager() {
return video_state_ != VideoDetector::State::NOT_PLAYING &&
!screen_is_locked_;
}
void UpdateTimer();
void MaybeNotifyPowerManager();
raw_ptr<VideoDetector> detector_;
VideoDetector::State video_state_;
bool screen_is_locked_;
base::RepeatingTimer notify_timer_;
ScopedSessionObserver scoped_session_observer_;
};
}
#endif