Commit c44cb64d authored by pkotwicz's avatar pkotwicz Committed by Commit bot

Make UserActivityDetector a singleton

BUG=426561,408752
TEST=None

Review URL: https://codereview.chromium.org/693643004

Cr-Commit-Position: refs/heads/master@{#302734}
parent 8747d18f
......@@ -267,7 +267,7 @@ void DisplayChangeObserver::OnDisplayModeChanged(
// For the purposes of user activity detection, ignore synthetic mouse events
// that are triggered by screen resizes: http://crbug.com/360634
::wm::UserActivityDetector* user_activity_detector =
Shell::GetInstance()->user_activity_detector();
::wm::UserActivityDetector::Get();
if (user_activity_detector)
user_activity_detector->OnDisplayPowerChanging();
}
......
......@@ -368,9 +368,6 @@ class ASH_EXPORT Shell : public SystemModalContainerEventFilterDelegate,
MruWindowTracker* mru_window_tracker() {
return mru_window_tracker_.get();
}
::wm::UserActivityDetector* user_activity_detector() {
return user_activity_detector_.get();
}
VideoDetector* video_detector() {
return video_detector_.get();
}
......
......@@ -50,7 +50,7 @@ void PowerEventObserver::SuspendImminent() {
RequestLockScreen();
}
shell->user_activity_detector()->OnDisplayPowerChanging();
wm::UserActivityDetector::Get()->OnDisplayPowerChanging();
shell->display_configurator()->SuspendDisplays();
}
......
......@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h"
#include "ash/shell.h"
#include "base/bind.h"
#include "base/command_line.h"
#include "base/logging.h"
......@@ -57,9 +56,10 @@ KioskModeIdleAppNameNotification::KioskModeIdleAppNameNotification()
}
KioskModeIdleAppNameNotification::~KioskModeIdleAppNameNotification() {
if (ash::Shell::HasInstance() &&
ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this)) {
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
wm::UserActivityDetector* user_activity_detector =
wm::UserActivityDetector::Get();
if (user_activity_detector && user_activity_detector->HasObserver(this)) {
user_activity_detector->RemoveObserver(this);
// At this time the DBusThreadManager might already be gone.
if (chromeos::DBusThreadManager::IsInitialized())
chromeos::DBusThreadManager::Get()->GetPowerManagerClient(
......@@ -98,8 +98,8 @@ void KioskModeIdleAppNameNotification::SuspendDone(
}
void KioskModeIdleAppNameNotification::Start() {
if (!ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this)) {
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
if (!wm::UserActivityDetector::Get()->HasObserver(this)) {
wm::UserActivityDetector::Get()->AddObserver(this);
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
this);
}
......
......@@ -57,8 +57,7 @@ void DisplayPowerServiceProvider::SetDisplayPower(
// we suspend may trigger a mouse move, which would then be incorrectly
// reported as user activity. Let the UserActivityDetector
// know so that it can ignore such events.
ash::Shell::GetInstance()->user_activity_detector()->
OnDisplayPowerChanging();
wm::UserActivityDetector::Get()->OnDisplayPowerChanging();
DisplayPowerState state = static_cast<DisplayPowerState>(int_state);
ash::Shell::GetInstance()->display_configurator()->SetDisplayPower(
......
......@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/idle_detector.h"
#include "ash/shell.h"
#include "base/bind.h"
#include "base/logging.h"
#include "ui/wm/core/user_activity_detector.h"
......@@ -16,9 +15,10 @@ IdleDetector::IdleDetector(const base::Closure& on_active_callback,
: active_callback_(on_active_callback), idle_callback_(on_idle_callback) {}
IdleDetector::~IdleDetector() {
if (ash::Shell::HasInstance() &&
ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
wm::UserActivityDetector* user_activity_detector =
wm::UserActivityDetector::Get();
if (user_activity_detector && user_activity_detector->HasObserver(this))
user_activity_detector->RemoveObserver(this);
}
void IdleDetector::OnUserActivity(const ui::Event* event) {
......@@ -29,8 +29,8 @@ void IdleDetector::OnUserActivity(const ui::Event* event) {
void IdleDetector::Start(const base::TimeDelta& timeout) {
timeout_ = timeout;
if (!ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
if (!wm::UserActivityDetector::Get()->HasObserver(this))
wm::UserActivityDetector::Get()->AddObserver(this);
ResetTimer();
}
......
......@@ -42,9 +42,10 @@ KioskModeIdleLogout::KioskModeIdleLogout() {
}
KioskModeIdleLogout::~KioskModeIdleLogout() {
if (ash::Shell::HasInstance() &&
ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
wm::UserActivityDetector* user_activity_detector =
wm::UserActivityDetector::Get();
if (user_activity_detector && user_activity_detector->HasObserver(this))
user_activity_detector->RemoveObserver(this);
}
void KioskModeIdleLogout::Setup() {
......@@ -74,8 +75,8 @@ void KioskModeIdleLogout::OnUserActivity(const ui::Event* event) {
}
void KioskModeIdleLogout::Start() {
if (!ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
if (!wm::UserActivityDetector::Get()->HasObserver(this))
wm::UserActivityDetector::Get()->AddObserver(this);
ResetTimer();
}
......
......@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.h"
#include "ash/shell.h"
#include "ash/test/ash_test_base.h"
#include "base/bind.h"
#include "base/memory/scoped_ptr.h"
......@@ -44,8 +43,7 @@ class KioskModeIdleLogoutTest : public ash::test::AshTestBase {
}
bool UserActivityObserverRegistered() {
return ash::Shell::GetInstance()->user_activity_detector()->HasObserver(
idle_logout_);
return wm::UserActivityDetector::Get()->HasObserver(idle_logout_);
}
ScopedDeviceSettingsTestHelper device_settings_test_helper_;
......
......@@ -5,7 +5,6 @@
#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h"
#include "ash/screensaver/screensaver_view.h"
#include "ash/shell.h"
#include "base/bind.h"
#include "base/callback.h"
#include "base/lazy_instance.h"
......@@ -199,10 +198,10 @@ KioskModeScreensaver::~KioskModeScreensaver() {
// In case we're shutting down without ever triggering the active
// notification and/or logging in.
if (ash::Shell::GetInstance() &&
ash::Shell::GetInstance()->user_activity_detector() &&
ash::Shell::GetInstance()->user_activity_detector()->HasObserver(this))
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
wm::UserActivityDetector* user_activity_detector =
wm::UserActivityDetector::Get();
if (user_activity_detector && user_activity_detector->HasObserver(this))
user_activity_detector->RemoveObserver(this);
}
void KioskModeScreensaver::GetScreensaverCrxPath() {
......@@ -252,7 +251,7 @@ void KioskModeScreensaver::SetupScreensaver(
if (chromeos::LoginState::Get()->IsUserLoggedIn())
return;
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
wm::UserActivityDetector::Get()->AddObserver(this);
ExtensionService* extension_service = GetDefaultExtensionService();
// Add the extension to the extension service and display the screensaver.
......@@ -269,7 +268,7 @@ void KioskModeScreensaver::SetupScreensaver(
void KioskModeScreensaver::OnUserActivity(const ui::Event* event) {
// We don't want to handle further user notifications; we'll either login
// the user and close out or or at least close the screensaver.
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
wm::UserActivityDetector::Get()->RemoveObserver(this);
// Find the retail mode login page.
if (LoginDisplayHostImpl::default_host()) {
......
......@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/login/screens/user_selection_screen.h"
#include "ash/shell.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/prefs/pref_service.h"
......@@ -106,13 +105,9 @@ UserSelectionScreen::UserSelectionScreen() : handler_(NULL) {
}
UserSelectionScreen::~UserSelectionScreen() {
#if !defined(USE_ATHENA)
// TODO(dpolukhin): crbug.com/408752
wm::UserActivityDetector* activity_detector =
ash::Shell::GetInstance()->user_activity_detector();
wm::UserActivityDetector* activity_detector = wm::UserActivityDetector::Get();
if (activity_detector->HasObserver(this))
activity_detector->RemoveObserver(this);
#endif
}
// static
......@@ -210,13 +205,9 @@ void UserSelectionScreen::Init(const user_manager::UserList& users,
users_ = users;
show_guest_ = show_guest;
#if !defined(USE_ATHENA)
// TODO(dpolukhin): crbug.com/408752
wm::UserActivityDetector* activity_detector =
ash::Shell::GetInstance()->user_activity_detector();
wm::UserActivityDetector* activity_detector = wm::UserActivityDetector::Get();
if (!activity_detector->HasObserver(this))
activity_detector->AddObserver(this);
#endif
}
void UserSelectionScreen::OnBeforeUserRemoved(const std::string& username) {
......
......@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/login/ui/webui_login_display.h"
#include "ash/shell.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "chrome/browser/chromeos/login/lock/screen_locker.h"
#include "chrome/browser/chromeos/login/screens/chrome_user_selection_screen.h"
......@@ -35,12 +34,9 @@ namespace chromeos {
WebUILoginDisplay::~WebUILoginDisplay() {
if (webui_handler_)
webui_handler_->ResetSigninScreenHandlerDelegate();
#if !defined(USE_ATHENA)
wm::UserActivityDetector* activity_detector = ash::Shell::GetInstance()->
user_activity_detector();
wm::UserActivityDetector* activity_detector = wm::UserActivityDetector::Get();
if (activity_detector->HasObserver(this))
activity_detector->RemoveObserver(this);
#endif
}
// LoginDisplay implementation: ------------------------------------------------
......@@ -71,12 +67,9 @@ void WebUILoginDisplay::Init(const user_manager::UserList& users,
show_users_ = show_users;
show_new_user_ = show_new_user;
#if !defined(USE_ATHENA)
wm::UserActivityDetector* activity_detector = ash::Shell::GetInstance()->
user_activity_detector();
wm::UserActivityDetector* activity_detector = wm::UserActivityDetector::Get();
if (!activity_detector->HasObserver(this))
activity_detector->AddObserver(this);
#endif
}
// ---- Common methods
......
......@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/policy/recommendation_restorer.h"
#include "ash/shell.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"
......@@ -107,11 +106,14 @@ void RecommendationRestorer::Restore(bool allow_delay,
if (logged_in_) {
allow_delay = false;
} else if (allow_delay && ash::Shell::HasInstance()) {
} else if (allow_delay) {
// Skip the delay if there has been no user input since the browser started.
const wm::UserActivityDetector* user_activity_detector =
ash::Shell::GetInstance()->user_activity_detector();
allow_delay = !user_activity_detector->last_activity_time().is_null();
wm::UserActivityDetector::Get();
if (user_activity_detector &&
user_activity_detector->last_activity_time().is_null()) {
allow_delay = false;
}
}
if (allow_delay)
......@@ -133,12 +135,10 @@ void RecommendationRestorer::StartTimer() {
// Listen for user activity so that the timer can be reset while the user is
// active, causing it to fire only when the user remains idle for
// |kRestoreDelayInMs|.
if (ash::Shell::HasInstance()) {
wm::UserActivityDetector* user_activity_detector =
ash::Shell::GetInstance()->user_activity_detector();
if (!user_activity_detector->HasObserver(this))
wm::UserActivityDetector::Get();
if (user_activity_detector && !user_activity_detector->HasObserver(this))
user_activity_detector->AddObserver(this);
}
// There should be a separate timer for each pref. However, in the common
// case of the user changing settings, a single timer is sufficient. This is
......@@ -156,8 +156,8 @@ void RecommendationRestorer::StartTimer() {
void RecommendationRestorer::StopTimer() {
restore_timer_.Stop();
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
if (wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->RemoveObserver(this);
}
} // namespace policy
......@@ -6,7 +6,6 @@
#include <algorithm>
#include "ash/shell.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"
......@@ -98,20 +97,20 @@ SessionLengthLimiter::SessionLengthLimiter(Delegate* delegate,
UpdateSessionStartTime();
}
if (!user_activity_seen_ && ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
if (!user_activity_seen_ && wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->AddObserver(this);
}
SessionLengthLimiter::~SessionLengthLimiter() {
if (!user_activity_seen_ && ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
if (!user_activity_seen_ && wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->RemoveObserver(this);
}
void SessionLengthLimiter::OnUserActivity(const ui::Event* event) {
if (user_activity_seen_)
return;
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
if (wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->RemoveObserver(this);
user_activity_seen_ = true;
PrefService* local_state = g_browser_process->local_state();
......
......@@ -11,7 +11,6 @@
#include <algorithm>
#include <string>
#include "ash/shell.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/callback.h"
......@@ -172,8 +171,8 @@ AutomaticRebootManager::AutomaticRebootManager(
// idle. Start listening for user activity to determine whether the user is
// idle or not.
if (!user_manager::UserManager::Get()->IsUserLoggedIn()) {
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this);
if (wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->AddObserver(this);
notification_registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED,
content::NotificationService::AllSources());
login_screen_idle_timer_.reset(
......@@ -202,8 +201,8 @@ AutomaticRebootManager::~AutomaticRebootManager() {
DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get();
dbus_thread_manager->GetPowerManagerClient()->RemoveObserver(this);
dbus_thread_manager->GetUpdateEngineClient()->RemoveObserver(this);
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
if (wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->RemoveObserver(this);
}
void AutomaticRebootManager::AddObserver(
......@@ -270,8 +269,8 @@ void AutomaticRebootManager::Observe(
} else if (type == chrome::NOTIFICATION_LOGIN_USER_CHANGED) {
// A session is starting. Stop listening for user activity as it no longer
// is a relevant criterion.
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this);
if (wm::UserActivityDetector::Get())
wm::UserActivityDetector::Get()->RemoveObserver(this);
notification_registrar_.Remove(
this, chrome::NOTIFICATION_LOGIN_USER_CHANGED,
content::NotificationService::AllSources());
......
......@@ -10,14 +10,8 @@
#include "ui/wm/core/user_activity_detector.h"
void CalculateIdleTime(IdleTimeCallback notify) {
#if defined(USE_ATHENA)
// TODO(oshima): Implement this for athena. crbug.com/408752
base::TimeDelta idle_time;
NOTIMPLEMENTED();
#else
base::TimeDelta idle_time = base::TimeTicks::Now() -
ash::Shell::GetInstance()->user_activity_detector()->last_activity_time();
#endif
wm::UserActivityDetector::Get()->last_activity_time();
notify.Run(static_cast<int>(idle_time.InSeconds()));
}
......
......@@ -14,6 +14,8 @@ namespace wm {
namespace {
UserActivityDetector* g_instance = nullptr;
// Returns a string describing |event|.
std::string GetEventDebugString(const ui::Event* event) {
std::string details = base::StringPrintf(
......@@ -44,9 +46,17 @@ const int UserActivityDetector::kNotifyIntervalMs = 200;
const int UserActivityDetector::kDisplayPowerChangeIgnoreMouseMs = 1000;
UserActivityDetector::UserActivityDetector() {
CHECK(!g_instance);
g_instance = this;
}
UserActivityDetector::~UserActivityDetector() {
g_instance = nullptr;
}
// static
UserActivityDetector* UserActivityDetector::Get() {
return g_instance;
}
bool UserActivityDetector::HasObserver(UserActivityObserver* observer) const {
......
......@@ -29,6 +29,9 @@ class WM_EXPORT UserActivityDetector : public ui::EventHandler {
UserActivityDetector();
~UserActivityDetector() override;
// Returns the UserActivityDetector instance if one was created.
static UserActivityDetector* Get();
base::TimeTicks last_activity_time() const { return last_activity_time_; }
void set_now_for_test(base::TimeTicks now) { now_for_test_ = now; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment