Home | History | Annotate | Download | only in chromeos
      1 // Copyright 2014 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 
      5 #include "chrome/browser/chromeos/idle_detector.h"
      6 
      7 #include "ash/shell.h"
      8 #include "base/bind.h"
      9 #include "base/logging.h"
     10 #include "ui/wm/core/user_activity_detector.h"
     11 
     12 namespace chromeos {
     13 
     14 IdleDetector::IdleDetector(const base::Closure& on_active_callback,
     15                            const base::Closure& on_idle_callback)
     16     : active_callback_(on_active_callback), idle_callback_(on_idle_callback) {}
     17 
     18 IdleDetector::~IdleDetector() {
     19   if (ash::Shell::HasInstance() &&
     20       ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
     21     ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
     22 }
     23 
     24 void IdleDetector::OnUserActivity(const ui::Event* event) {
     25   if (!active_callback_.is_null())
     26     active_callback_.Run();
     27   ResetTimer();
     28 }
     29 
     30 void IdleDetector::Start(const base::TimeDelta& timeout) {
     31   timeout_ = timeout;
     32   if (!ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
     33     ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
     34   ResetTimer();
     35 }
     36 
     37 void IdleDetector::ResetTimer() {
     38   if (timer_.IsRunning())
     39     timer_.Reset();
     40   else
     41     timer_.Start(FROM_HERE, timeout_, idle_callback_);
     42 }
     43 
     44 }  // namespace chromeos
     45