diff options
author | Zeno Albisser <zeno.albisser@digia.com> | 2013-08-15 21:46:11 +0200 |
---|---|---|
committer | Zeno Albisser <zeno.albisser@digia.com> | 2013-08-15 21:46:11 +0200 |
commit | 679147eead574d186ebf3069647b4c23e8ccace6 (patch) | |
tree | fc247a0ac8ff119f7c8550879ebb6d3dd8d1ff69 /chromium/ash/wm/user_activity_detector.cc |
Initial import.
Diffstat (limited to 'chromium/ash/wm/user_activity_detector.cc')
-rw-r--r-- | chromium/ash/wm/user_activity_detector.cc | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/chromium/ash/wm/user_activity_detector.cc b/chromium/ash/wm/user_activity_detector.cc new file mode 100644 index 00000000000..269b9efe860 --- /dev/null +++ b/chromium/ash/wm/user_activity_detector.cc @@ -0,0 +1,84 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/wm/user_activity_detector.h" + +#include "ash/wm/property_util.h" +#include "ash/wm/user_activity_observer.h" +#include "ui/base/events/event.h" + +namespace ash { + +const int UserActivityDetector::kNotifyIntervalMs = 200; + +// Too low and mouse events generated at the tail end of reconfiguration +// will be reported as user activity and turn the screen back on; too high +// and we'll ignore legitimate activity. +const int UserActivityDetector::kDisplayPowerChangeIgnoreMouseMs = 1000; + +UserActivityDetector::UserActivityDetector() { +} + +UserActivityDetector::~UserActivityDetector() { +} + +bool UserActivityDetector::HasObserver(UserActivityObserver* observer) const { + return observers_.HasObserver(observer); +} + +void UserActivityDetector::AddObserver(UserActivityObserver* observer) { + observers_.AddObserver(observer); +} + +void UserActivityDetector::RemoveObserver(UserActivityObserver* observer) { + observers_.RemoveObserver(observer); +} + +void UserActivityDetector::OnDisplayPowerChanging() { + honor_mouse_events_time_ = GetCurrentTime() + + base::TimeDelta::FromMilliseconds(kDisplayPowerChangeIgnoreMouseMs); +} + +void UserActivityDetector::OnKeyEvent(ui::KeyEvent* event) { + HandleActivity(event); +} + +void UserActivityDetector::OnMouseEvent(ui::MouseEvent* event) { + if (event->flags() & ui::EF_IS_SYNTHESIZED) + return; + if (!honor_mouse_events_time_.is_null() && + GetCurrentTime() < honor_mouse_events_time_) + return; + + HandleActivity(event); +} + +void UserActivityDetector::OnScrollEvent(ui::ScrollEvent* event) { + HandleActivity(event); +} + +void UserActivityDetector::OnTouchEvent(ui::TouchEvent* event) { + HandleActivity(event); +} + +void UserActivityDetector::OnGestureEvent(ui::GestureEvent* event) { + HandleActivity(event); +} + +base::TimeTicks UserActivityDetector::GetCurrentTime() const { + return !now_for_test_.is_null() ? now_for_test_ : base::TimeTicks::Now(); +} + +void UserActivityDetector::HandleActivity(const ui::Event* event) { + base::TimeTicks now = GetCurrentTime(); + last_activity_time_ = now; + if (last_observer_notification_time_.is_null() || + (now - last_observer_notification_time_).InMillisecondsF() >= + kNotifyIntervalMs) { + FOR_EACH_OBSERVER(UserActivityObserver, observers_, OnUserActivity(event)); + last_observer_notification_time_ = now; + } +} + +} // namespace ash |