diff options
Diffstat (limited to 'ui/chromeos/user_activity_notifier.cc')
-rw-r--r-- | ui/chromeos/user_activity_notifier.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/ui/chromeos/user_activity_notifier.cc b/ui/chromeos/user_activity_notifier.cc new file mode 100644 index 0000000..53f3129 --- /dev/null +++ b/ui/chromeos/user_activity_notifier.cc @@ -0,0 +1,65 @@ +// Copyright 2014 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 "ui/chromeos/user_activity_notifier.h" + +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/power_manager_client.h" +#include "ui/events/event.h" +#include "ui/events/event_constants.h" +#include "ui/events/keycodes/keyboard_codes_posix.h" +#include "ui/wm/core/user_activity_detector.h" + +namespace ui { +namespace { + +// Minimum number of seconds between notifications. +const int kNotifyIntervalSec = 5; + +// Returns a UserActivityType describing |event|. +power_manager::UserActivityType GetUserActivityTypeForEvent( + const Event* event) { + if (!event || event->type() != ET_KEY_PRESSED) + return power_manager::USER_ACTIVITY_OTHER; + + switch (static_cast<const KeyEvent*>(event)->key_code()) { + case VKEY_BRIGHTNESS_DOWN: + return power_manager::USER_ACTIVITY_BRIGHTNESS_DOWN_KEY_PRESS; + case VKEY_BRIGHTNESS_UP: + return power_manager::USER_ACTIVITY_BRIGHTNESS_UP_KEY_PRESS; + case VKEY_VOLUME_DOWN: + return power_manager::USER_ACTIVITY_VOLUME_DOWN_KEY_PRESS; + case VKEY_VOLUME_MUTE: + return power_manager::USER_ACTIVITY_VOLUME_MUTE_KEY_PRESS; + case VKEY_VOLUME_UP: + return power_manager::USER_ACTIVITY_VOLUME_UP_KEY_PRESS; + default: + return power_manager::USER_ACTIVITY_OTHER; + } +} + +} // namespace + +UserActivityNotifier::UserActivityNotifier(::wm::UserActivityDetector* detector) + : detector_(detector) { + detector_->AddObserver(this); +} + +UserActivityNotifier::~UserActivityNotifier() { + detector_->RemoveObserver(this); +} + +void UserActivityNotifier::OnUserActivity(const Event* event) { + base::TimeTicks now = base::TimeTicks::Now(); + // InSeconds() truncates rather than rounding, so it's fine for this + // comparison. + if (last_notify_time_.is_null() || + (now - last_notify_time_).InSeconds() >= kNotifyIntervalSec) { + chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> + NotifyUserActivity(GetUserActivityTypeForEvent(event)); + last_notify_time_ = now; + } +} + +} // namespace ui |