diff options
Diffstat (limited to 'ash/wm')
-rw-r--r-- | ash/wm/session_state_controller.cc | 14 | ||||
-rw-r--r-- | ash/wm/session_state_controller.h | 8 | ||||
-rw-r--r-- | ash/wm/session_state_controller_impl.cc | 11 | ||||
-rw-r--r-- | ash/wm/session_state_controller_impl2.cc | 11 | ||||
-rw-r--r-- | ash/wm/session_state_observer.h | 28 |
5 files changed, 71 insertions, 1 deletions
diff --git a/ash/wm/session_state_controller.cc b/ash/wm/session_state_controller.cc index ea12b8d..0bcf31d 100644 --- a/ash/wm/session_state_controller.cc +++ b/ash/wm/session_state_controller.cc @@ -36,4 +36,18 @@ void SessionStateController::SetDelegate( SessionStateControllerDelegate* delegate) { delegate_.reset(delegate); } + +void SessionStateController::AddObserver(SessionStateObserver* observer) { + observers_.AddObserver(observer); +} + +void SessionStateController::RemoveObserver(SessionStateObserver* observer) { + observers_.RemoveObserver(observer); +} + +bool SessionStateController::HasObserver(SessionStateObserver* observer) { + return observers_.HasObserver(observer); +} + + } // namespace ash diff --git a/ash/wm/session_state_controller.h b/ash/wm/session_state_controller.h index 703a680..648e923 100644 --- a/ash/wm/session_state_controller.h +++ b/ash/wm/session_state_controller.h @@ -8,8 +8,10 @@ #include "ash/ash_export.h" #include "ash/shell_observer.h" #include "ash/wm/session_state_animator.h" +#include "ash/wm/session_state_observer.h" #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" +#include "base/observer_list.h" #include "base/time.h" #include "base/timer.h" #include "ui/aura/root_window_observer.h" @@ -120,6 +122,10 @@ class ASH_EXPORT SessionStateController : public aura::RootWindowObserver, // Callback is guaranteed to be called once and then discarded. virtual void SetLockScreenDisplayedCallback(base::Closure& callback) = 0; + virtual void AddObserver(SessionStateObserver* observer); + virtual void RemoveObserver(SessionStateObserver* observer); + virtual bool HasObserver(SessionStateObserver* observer); + protected: friend class test::PowerButtonControllerTest; @@ -127,6 +133,8 @@ class ASH_EXPORT SessionStateController : public aura::RootWindowObserver, scoped_ptr<SessionStateControllerDelegate> delegate_; + ObserverList<SessionStateObserver> observers_; + private: DISALLOW_COPY_AND_ASSIGN(SessionStateController); }; diff --git a/ash/wm/session_state_controller_impl.cc b/ash/wm/session_state_controller_impl.cc index 93b55ce..96b2788 100644 --- a/ash/wm/session_state_controller_impl.cc +++ b/ash/wm/session_state_controller_impl.cc @@ -71,6 +71,9 @@ void SessionStateControllerImpl::OnLockStateChanged(bool locked) { internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, internal::SessionStateAnimator::ANIMATION_FADE_IN, internal::SessionStateAnimator::ANIMATION_SPEED_SHOW_LOCK_SCREEN); + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent( + SessionStateObserver::EVENT_LOCK_ANIMATION_STARTED)); lock_timer_.Stop(); lock_fail_timer_.Stop(); @@ -102,6 +105,9 @@ void SessionStateControllerImpl::OnStartingLock() { internal::SessionStateAnimator::ANIMATION_FULL_CLOSE, internal::SessionStateAnimator::ANIMATION_SPEED_FAST); + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent(SessionStateObserver::EVENT_LOCK_ANIMATION_STARTED)); + // Hide the screen locker containers so we can make them fade in later. animator_->StartAnimation( internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, @@ -114,6 +120,8 @@ void SessionStateControllerImpl::StartLockAnimationAndLockImmediately() { internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, internal::SessionStateAnimator::ANIMATION_PARTIAL_CLOSE, internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent(SessionStateObserver::EVENT_LOCK_ANIMATION_STARTED)); OnLockTimeout(); } @@ -124,6 +132,9 @@ void SessionStateControllerImpl::StartLockAnimation(bool shutdown_after_lock) { internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, internal::SessionStateAnimator::ANIMATION_PARTIAL_CLOSE, internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent( + SessionStateObserver::EVENT_PRELOCK_ANIMATION_STARTED)); StartLockTimer(); } diff --git a/ash/wm/session_state_controller_impl2.cc b/ash/wm/session_state_controller_impl2.cc index 0cacb44..ef1da5e 100644 --- a/ash/wm/session_state_controller_impl2.cc +++ b/ash/wm/session_state_controller_impl2.cc @@ -93,6 +93,9 @@ void SessionStateControllerImpl2::SetLockScreenDisplayedCallback( } void SessionStateControllerImpl2::OnLockScreenAnimationFinished() { + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent( + SessionStateObserver::EVENT_LOCK_ANIMATION_FINISHED)); if (!lock_screen_displayed_callback_.is_null()) { lock_screen_displayed_callback_.Run(); lock_screen_displayed_callback_.Reset(); @@ -112,7 +115,8 @@ void SessionStateControllerImpl2::OnStartingLock() { internal::SessionStateAnimator::LAUNCHER, internal::SessionStateAnimator::ANIMATION_LIFT, internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); - + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent(SessionStateObserver::EVENT_LOCK_ANIMATION_STARTED)); // Hide the screen locker containers so we can raise them later. animator_->StartAnimation( internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, @@ -126,6 +130,8 @@ void SessionStateControllerImpl2::StartLockAnimationAndLockImmediately() { internal::SessionStateAnimator::LAUNCHER, internal::SessionStateAnimator::ANIMATION_LIFT, internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent(SessionStateObserver::EVENT_LOCK_ANIMATION_STARTED)); OnLockTimeout(); } @@ -137,6 +143,9 @@ void SessionStateControllerImpl2::StartLockAnimation(bool shutdown_after_lock) { internal::SessionStateAnimator::LAUNCHER, internal::SessionStateAnimator::ANIMATION_LIFT, internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); + FOR_EACH_OBSERVER(SessionStateObserver, observers_, + OnSessionStateEvent( + SessionStateObserver::EVENT_PRELOCK_ANIMATION_STARTED)); StartLockTimer(); } diff --git a/ash/wm/session_state_observer.h b/ash/wm/session_state_observer.h new file mode 100644 index 0000000..8df4018 --- /dev/null +++ b/ash/wm/session_state_observer.h @@ -0,0 +1,28 @@ +// 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. + +#ifndef ASH_WM_SESSION_STATE_OBSERVER_H_ +#define ASH_WM_SESSION_STATE_OBSERVER_H_ + +#include "ash/ash_export.h" + +namespace ash { + +// Interface for classes that want to be notified by SessionStateController when +// session-related events occur. +class ASH_EXPORT SessionStateObserver { + public: + enum EventType { + EVENT_PRELOCK_ANIMATION_STARTED, + EVENT_LOCK_ANIMATION_STARTED, + EVENT_LOCK_ANIMATION_FINISHED, + }; + + virtual void OnSessionStateEvent(EventType event) = 0; + virtual ~SessionStateObserver() {}; +}; + +} // namespace ash + +#endif // ASH_WM_SESSION_STATE_CONTROLLER_H_ |