summaryrefslogtreecommitdiffstats
path: root/ash/wm
diff options
context:
space:
mode:
Diffstat (limited to 'ash/wm')
-rw-r--r--ash/wm/session_state_controller.cc14
-rw-r--r--ash/wm/session_state_controller.h8
-rw-r--r--ash/wm/session_state_controller_impl.cc11
-rw-r--r--ash/wm/session_state_controller_impl2.cc11
-rw-r--r--ash/wm/session_state_observer.h28
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_