14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/system/chromeos/power/video_activity_notifier.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace ash {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Minimum number of seconds between notifications.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNotifyIntervalSec = 5;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)VideoActivityNotifier::VideoActivityNotifier(VideoDetector* detector)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : detector_(detector),
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      screen_is_locked_(false) {
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  detector_->AddObserver(this);
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ash::Shell::GetInstance()->AddShellObserver(this);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)VideoActivityNotifier::~VideoActivityNotifier() {
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ash::Shell::GetInstance()->RemoveShellObserver(this);
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  detector_->RemoveObserver(this);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void VideoActivityNotifier::OnVideoDetected(bool is_fullscreen) {
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (screen_is_locked_)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeTicks now = base::TimeTicks::Now();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (last_notify_time_.is_null() ||
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (now - last_notify_time_).InSeconds() >= kNotifyIntervalSec) {
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        NotifyVideoActivity(is_fullscreen);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    last_notify_time_ = now;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void VideoActivityNotifier::OnLockStateChanged(bool locked) {
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  screen_is_locked_ = locked;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace ash
49