[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 1 | // Copyright (c) 2012 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 "ash/wm/user_activity_detector.h" | ||||
6 | |||||
7 | #include "ash/wm/user_activity_observer.h" | ||||
[email protected] | 86ccbd4 | 2013-09-18 18:11:54 | [diff] [blame] | 8 | #include "ui/events/event.h" |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 9 | |
10 | namespace ash { | ||||
11 | |||||
[email protected] | 8405db5 | 2013-03-07 05:24:07 | [diff] [blame] | 12 | const int UserActivityDetector::kNotifyIntervalMs = 200; |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 13 | |
[email protected] | 8405db5 | 2013-03-07 05:24:07 | [diff] [blame] | 14 | // Too low and mouse events generated at the tail end of reconfiguration |
15 | // will be reported as user activity and turn the screen back on; too high | ||||
16 | // and we'll ignore legitimate activity. | ||||
17 | const int UserActivityDetector::kDisplayPowerChangeIgnoreMouseMs = 1000; | ||||
18 | |||||
19 | UserActivityDetector::UserActivityDetector() { | ||||
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 20 | } |
21 | |||||
22 | UserActivityDetector::~UserActivityDetector() { | ||||
23 | } | ||||
24 | |||||
[email protected] | 5bcf62d7 | 2012-08-23 00:51:52 | [diff] [blame] | 25 | bool UserActivityDetector::HasObserver(UserActivityObserver* observer) const { |
26 | return observers_.HasObserver(observer); | ||||
27 | } | ||||
28 | |||||
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 29 | void UserActivityDetector::AddObserver(UserActivityObserver* observer) { |
30 | observers_.AddObserver(observer); | ||||
31 | } | ||||
32 | |||||
33 | void UserActivityDetector::RemoveObserver(UserActivityObserver* observer) { | ||||
34 | observers_.RemoveObserver(observer); | ||||
35 | } | ||||
36 | |||||
[email protected] | 8405db5 | 2013-03-07 05:24:07 | [diff] [blame] | 37 | void UserActivityDetector::OnDisplayPowerChanging() { |
38 | honor_mouse_events_time_ = GetCurrentTime() + | ||||
39 | base::TimeDelta::FromMilliseconds(kDisplayPowerChangeIgnoreMouseMs); | ||||
[email protected] | 46c39747 | 2012-10-23 23:25:59 | [diff] [blame] | 40 | } |
41 | |||||
[email protected] | 5eebaf4 | 2012-12-14 17:16:21 | [diff] [blame] | 42 | void UserActivityDetector::OnKeyEvent(ui::KeyEvent* event) { |
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 43 | HandleActivity(event); |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 44 | } |
45 | |||||
[email protected] | d44efe0 | 2012-12-18 06:08:18 | [diff] [blame] | 46 | void UserActivityDetector::OnMouseEvent(ui::MouseEvent* event) { |
[email protected] | 8405db5 | 2013-03-07 05:24:07 | [diff] [blame] | 47 | if (event->flags() & ui::EF_IS_SYNTHESIZED) |
48 | return; | ||||
49 | if (!honor_mouse_events_time_.is_null() && | ||||
50 | GetCurrentTime() < honor_mouse_events_time_) | ||||
51 | return; | ||||
52 | |||||
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 53 | HandleActivity(event); |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 54 | } |
55 | |||||
[email protected] | 6f34b483 | 2012-12-14 16:18:08 | [diff] [blame] | 56 | void UserActivityDetector::OnScrollEvent(ui::ScrollEvent* event) { |
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 57 | HandleActivity(event); |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 58 | } |
59 | |||||
[email protected] | 6f34b483 | 2012-12-14 16:18:08 | [diff] [blame] | 60 | void UserActivityDetector::OnTouchEvent(ui::TouchEvent* event) { |
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 61 | HandleActivity(event); |
[email protected] | 304594c | 2012-11-13 16:35:27 | [diff] [blame] | 62 | } |
63 | |||||
[email protected] | e93b70cc | 2012-12-04 05:08:30 | [diff] [blame] | 64 | void UserActivityDetector::OnGestureEvent(ui::GestureEvent* event) { |
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 65 | HandleActivity(event); |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 66 | } |
67 | |||||
[email protected] | 8405db5 | 2013-03-07 05:24:07 | [diff] [blame] | 68 | base::TimeTicks UserActivityDetector::GetCurrentTime() const { |
69 | return !now_for_test_.is_null() ? now_for_test_ : base::TimeTicks::Now(); | ||||
70 | } | ||||
71 | |||||
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 72 | void UserActivityDetector::HandleActivity(const ui::Event* event) { |
[email protected] | 8405db5 | 2013-03-07 05:24:07 | [diff] [blame] | 73 | base::TimeTicks now = GetCurrentTime(); |
[email protected] | 163b119 | 2013-03-21 13:08:51 | [diff] [blame] | 74 | last_activity_time_ = now; |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 75 | if (last_observer_notification_time_.is_null() || |
[email protected] | 5bcf62d7 | 2012-08-23 00:51:52 | [diff] [blame] | 76 | (now - last_observer_notification_time_).InMillisecondsF() >= |
77 | kNotifyIntervalMs) { | ||||
[email protected] | 0b1eede3 | 2013-07-17 05:35:47 | [diff] [blame] | 78 | FOR_EACH_OBSERVER(UserActivityObserver, observers_, OnUserActivity(event)); |
[email protected] | c16b942 | 2012-06-06 21:51:11 | [diff] [blame] | 79 | last_observer_notification_time_ = now; |
80 | } | ||||
81 | } | ||||
82 | |||||
83 | } // namespace ash |