// 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_power_manager_notifier.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power_manager_client.h" #include "ui/base/user_activity/user_activity_detector.h" #include "ui/events/event.h" #include "ui/events/event_constants.h" #include "ui/events/keycodes/keyboard_codes_posix.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(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 UserActivityPowerManagerNotifier::UserActivityPowerManagerNotifier( UserActivityDetector* detector) : detector_(detector) { detector_->AddObserver(this); } UserActivityPowerManagerNotifier::~UserActivityPowerManagerNotifier() { detector_->RemoveObserver(this); } void UserActivityPowerManagerNotifier::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