Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: ash/wm/lock_state_controller.cc

Issue 326813004: Added quick lock mechanism while in Touchview (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added ASH_EXPORT to SessionStateAnimator Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ash/wm/lock_state_controller.h ('k') | ash/wm/lock_state_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/wm/lock_state_controller.h" 5 #include "ash/wm/lock_state_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string>
8 9
9 #include "ash/accessibility_delegate.h" 10 #include "ash/accessibility_delegate.h"
10 #include "ash/ash_switches.h" 11 #include "ash/ash_switches.h"
11 #include "ash/cancel_mode.h" 12 #include "ash/cancel_mode.h"
12 #include "ash/metrics/user_metrics_recorder.h" 13 #include "ash/metrics/user_metrics_recorder.h"
13 #include "ash/shell.h" 14 #include "ash/shell.h"
14 #include "ash/shell_delegate.h" 15 #include "ash/shell_delegate.h"
15 #include "ash/shell_window_ids.h" 16 #include "ash/shell_window_ids.h"
16 #include "ash/wm/session_state_animator.h" 17 #include "ash/wm/session_state_animator.h"
18 #include "ash/wm/session_state_animator_impl.h"
17 #include "base/bind_helpers.h" 19 #include "base/bind_helpers.h"
18 #include "base/command_line.h" 20 #include "base/command_line.h"
19 #include "base/strings/string_util.h" 21 #include "base/strings/string_util.h"
20 #include "base/timer/timer.h" 22 #include "base/timer/timer.h"
21 #include "ui/aura/window_tree_host.h" 23 #include "ui/aura/window_tree_host.h"
22 #include "ui/compositor/layer_animation_sequence.h"
23 #include "ui/compositor/scoped_layer_animation_settings.h"
24 #include "ui/views/controls/menu/menu_controller.h" 24 #include "ui/views/controls/menu/menu_controller.h"
25 #include "ui/wm/core/compound_event_filter.h" 25 #include "ui/wm/core/compound_event_filter.h"
26 26
27 #if defined(OS_CHROMEOS) 27 #if defined(OS_CHROMEOS)
28 #include "base/sys_info.h" 28 #include "base/sys_info.h"
29 #include "media/audio/sounds/sounds_manager.h" 29 #include "media/audio/sounds/sounds_manager.h"
30 #endif 30 #endif
31 31
32 #if defined(OS_CHROMEOS) 32 #if defined(OS_CHROMEOS)
33 using media::SoundsManager; 33 using media::SoundsManager;
34 #endif 34 #endif
35 35
36 namespace ash { 36 namespace ash {
37 37
38 namespace { 38 namespace {
39 39
40 #if defined(OS_CHROMEOS) 40 #if defined(OS_CHROMEOS)
41 const int kMaxShutdownSoundDurationMs = 1500; 41 const int kMaxShutdownSoundDurationMs = 1500;
42 #endif 42 #endif
43 43
44 aura::Window* GetBackground() {
45 aura::Window* root_window = Shell::GetPrimaryRootWindow();
46 return Shell::GetContainer(root_window,
47 kShellWindowId_DesktopBackgroundContainer);
48 }
49
50 bool IsBackgroundHidden() {
51 return !GetBackground()->IsVisible();
52 }
53
54 void ShowBackground() {
55 ui::ScopedLayerAnimationSettings settings(
56 GetBackground()->layer()->GetAnimator());
57 settings.SetTransitionDuration(base::TimeDelta());
58 GetBackground()->Show();
59 }
60
61 void HideBackground() {
62 ui::ScopedLayerAnimationSettings settings(
63 GetBackground()->layer()->GetAnimator());
64 settings.SetTransitionDuration(base::TimeDelta());
65 GetBackground()->Hide();
66 }
67
68 // This observer is intended to use in cases when some action has to be taken
69 // once some animation successfully completes (i.e. it was not aborted).
70 // Observer will count a number of sequences it is attached to, and a number of
71 // finished sequences (either Ended or Aborted). Once these two numbers are
72 // equal, observer will delete itself, calling callback passed to constructor if
73 // there were no aborted animations.
74 // This way it can be either used to wait for some animation to be finished in
75 // multiple layers, to wait once a sequence of animations is finished in one
76 // layer or the mixture of both.
77 class AnimationFinishedObserver : public ui::LayerAnimationObserver {
78 public:
79 explicit AnimationFinishedObserver(base::Closure &callback)
80 : callback_(callback),
81 sequences_attached_(0),
82 sequences_completed_(0),
83 paused_(false) {
84 }
85
86 // Pauses observer: no checks will be made while paused. It can be used when
87 // a sequence has some immediate animations in the beginning, and for
88 // animations that can be tested with flag that makes all animations
89 // immediate.
90 void Pause() {
91 paused_ = true;
92 }
93
94 // Unpauses observer. It does a check and calls callback if conditions are
95 // met.
96 void Unpause() {
97 if (!paused_)
98 return;
99 paused_ = false;
100 if (sequences_completed_ == sequences_attached_) {
101 callback_.Run();
102 delete this;
103 }
104 }
105
106 private:
107 virtual ~AnimationFinishedObserver() {
108 }
109
110 // LayerAnimationObserver implementation
111 virtual void OnLayerAnimationEnded(
112 ui::LayerAnimationSequence* sequence) OVERRIDE {
113 sequences_completed_++;
114 if ((sequences_completed_ == sequences_attached_) && !paused_) {
115 callback_.Run();
116 delete this;
117 }
118 }
119
120 virtual void OnLayerAnimationAborted(
121 ui::LayerAnimationSequence* sequence) OVERRIDE {
122 sequences_completed_++;
123 if ((sequences_completed_ == sequences_attached_) && !paused_)
124 delete this;
125 }
126
127 virtual void OnLayerAnimationScheduled(
128 ui::LayerAnimationSequence* sequence) OVERRIDE {
129 }
130
131 virtual void OnAttachedToSequence(
132 ui::LayerAnimationSequence* sequence) OVERRIDE {
133 LayerAnimationObserver::OnAttachedToSequence(sequence);
134 sequences_attached_++;
135 }
136
137 // Callback to be called.
138 base::Closure callback_;
139
140 // Number of sequences this observer was attached to.
141 int sequences_attached_;
142
143 // Number of sequences either ended or aborted.
144 int sequences_completed_;
145
146 bool paused_;
147
148 DISALLOW_COPY_AND_ASSIGN(AnimationFinishedObserver);
149 };
150
151 } // namespace 44 } // namespace
152 45
153 const int LockStateController::kLockTimeoutMs = 400; 46 const int LockStateController::kLockTimeoutMs = 400;
154 const int LockStateController::kShutdownTimeoutMs = 400; 47 const int LockStateController::kShutdownTimeoutMs = 400;
155 const int LockStateController::kLockFailTimeoutMs = 8000; 48 const int LockStateController::kLockFailTimeoutMs = 8000;
156 const int LockStateController::kLockToShutdownTimeoutMs = 150; 49 const int LockStateController::kLockToShutdownTimeoutMs = 150;
157 const int LockStateController::kShutdownRequestDelayMs = 50; 50 const int LockStateController::kShutdownRequestDelayMs = 50;
158 51
159 LockStateController::TestApi::TestApi(LockStateController* controller) 52 LockStateController::TestApi::TestApi(LockStateController* controller)
160 : controller_(controller) { 53 : controller_(controller) {
161 } 54 }
162 55
163 LockStateController::TestApi::~TestApi() { 56 LockStateController::TestApi::~TestApi() {
164 } 57 }
165 58
166 LockStateController::LockStateController() 59 LockStateController::LockStateController()
167 : animator_(new SessionStateAnimator()), 60 : animator_(new SessionStateAnimatorImpl()),
168 login_status_(user::LOGGED_IN_NONE), 61 login_status_(user::LOGGED_IN_NONE),
169 system_is_locked_(false), 62 system_is_locked_(false),
170 shutting_down_(false), 63 shutting_down_(false),
171 shutdown_after_lock_(false), 64 shutdown_after_lock_(false),
172 animating_lock_(false), 65 animating_lock_(false),
173 can_cancel_lock_animation_(false), 66 can_cancel_lock_animation_(false),
174 weak_ptr_factory_(this) { 67 weak_ptr_factory_(this) {
175 Shell::GetPrimaryRootWindow()->GetHost()->AddObserver(this); 68 Shell::GetPrimaryRootWindow()->GetHost()->AddObserver(this);
176 } 69 }
177 70
178 LockStateController::~LockStateController() { 71 LockStateController::~LockStateController() {
179 Shell::GetPrimaryRootWindow()->GetHost()->RemoveObserver(this); 72 Shell::GetPrimaryRootWindow()->GetHost()->RemoveObserver(this);
180 } 73 }
181 74
182 void LockStateController::SetDelegate(LockStateControllerDelegate* delegate) { 75 void LockStateController::SetDelegate(
183 delegate_.reset(delegate); 76 scoped_ptr<LockStateControllerDelegate> delegate) {
77 delegate_ = delegate.Pass();
184 } 78 }
185 79
186 void LockStateController::AddObserver(LockStateObserver* observer) { 80 void LockStateController::AddObserver(LockStateObserver* observer) {
187 observers_.AddObserver(observer); 81 observers_.AddObserver(observer);
188 } 82 }
189 83
190 void LockStateController::RemoveObserver(LockStateObserver* observer) { 84 void LockStateController::RemoveObserver(LockStateObserver* observer) {
191 observers_.RemoveObserver(observer); 85 observers_.RemoveObserver(observer);
192 } 86 }
193 87
194 bool LockStateController::HasObserver(LockStateObserver* observer) { 88 bool LockStateController::HasObserver(LockStateObserver* observer) {
195 return observers_.HasObserver(observer); 89 return observers_.HasObserver(observer);
196 } 90 }
197 91
198 void LockStateController::StartLockAnimation( 92 void LockStateController::StartLockAnimation(
199 bool shutdown_after_lock) { 93 bool shutdown_after_lock) {
200 if (animating_lock_) 94 if (animating_lock_)
201 return; 95 return;
202 shutdown_after_lock_ = shutdown_after_lock; 96 shutdown_after_lock_ = shutdown_after_lock;
203 can_cancel_lock_animation_ = true; 97 can_cancel_lock_animation_ = true;
204 98
205 StartCancellablePreLockAnimation(); 99 StartCancellablePreLockAnimation();
206 } 100 }
207 101
208 void LockStateController::StartShutdownAnimation() { 102 void LockStateController::StartShutdownAnimation() {
209 StartCancellableShutdownAnimation(); 103 StartCancellableShutdownAnimation();
210 } 104 }
211 105
212 void LockStateController::StartLockAnimationAndLockImmediately() { 106 void LockStateController::StartLockAnimationAndLockImmediately(
107 bool shutdown_after_lock) {
213 if (animating_lock_) 108 if (animating_lock_)
214 return; 109 return;
110 shutdown_after_lock_ = shutdown_after_lock;
215 StartImmediatePreLockAnimation(true /* request_lock_on_completion */); 111 StartImmediatePreLockAnimation(true /* request_lock_on_completion */);
216 } 112 }
217 113
218 bool LockStateController::LockRequested() { 114 bool LockStateController::LockRequested() {
219 return lock_fail_timer_.IsRunning(); 115 return lock_fail_timer_.IsRunning();
220 } 116 }
221 117
222 bool LockStateController::ShutdownRequested() { 118 bool LockStateController::ShutdownRequested() {
223 return shutting_down_; 119 return shutting_down_;
224 } 120 }
(...skipping 21 matching lines...) Expand all
246 return; 142 return;
247 if (lock_to_shutdown_timer_.IsRunning()) { 143 if (lock_to_shutdown_timer_.IsRunning()) {
248 lock_to_shutdown_timer_.Stop(); 144 lock_to_shutdown_timer_.Stop();
249 return; 145 return;
250 } 146 }
251 if (shutdown_after_lock_) { 147 if (shutdown_after_lock_) {
252 shutdown_after_lock_ = false; 148 shutdown_after_lock_ = false;
253 return; 149 return;
254 } 150 }
255 151
256 animator_->StartGlobalAnimation( 152 animator_->StartAnimation(
153 SessionStateAnimator::ROOT_CONTAINER,
257 SessionStateAnimator::ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS, 154 SessionStateAnimator::ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS,
258 SessionStateAnimator::ANIMATION_SPEED_REVERT_SHUTDOWN); 155 SessionStateAnimator::ANIMATION_SPEED_REVERT_SHUTDOWN);
259 pre_shutdown_timer_.Stop(); 156 pre_shutdown_timer_.Stop();
260 } 157 }
261 158
262 void LockStateController::OnStartingLock() { 159 void LockStateController::OnStartingLock() {
263 if (shutting_down_ || system_is_locked_) 160 if (shutting_down_ || system_is_locked_)
264 return; 161 return;
265 if (animating_lock_) 162 if (animating_lock_)
266 return; 163 return;
267 StartImmediatePreLockAnimation(false /* request_lock_on_completion */); 164 StartImmediatePreLockAnimation(false /* request_lock_on_completion */);
268 } 165 }
269 166
270 void LockStateController::RequestShutdown() { 167 void LockStateController::RequestShutdown() {
271 if (shutting_down_) 168 if (shutting_down_)
272 return; 169 return;
273 170
274 shutting_down_ = true; 171 shutting_down_ = true;
275 172
276 Shell* shell = ash::Shell::GetInstance(); 173 Shell* shell = ash::Shell::GetInstance();
277 shell->cursor_manager()->HideCursor(); 174 shell->cursor_manager()->HideCursor();
278 shell->cursor_manager()->LockCursor(); 175 shell->cursor_manager()->LockCursor();
279 176
280 animator_->StartGlobalAnimation( 177 animator_->StartAnimation(
178 SessionStateAnimator::ROOT_CONTAINER,
281 SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS, 179 SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS,
282 SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); 180 SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN);
283 StartRealShutdownTimer(true); 181 StartRealShutdownTimer(true);
284 } 182 }
285 183
286 void LockStateController::OnLockScreenHide( 184 void LockStateController::OnLockScreenHide(
287 base::Callback<void(void)>& callback) { 185 base::Callback<void(void)>& callback) {
288 StartUnlockAnimationBeforeUIDestroyed(callback); 186 StartUnlockAnimationBeforeUIDestroyed(callback);
289 } 187 }
290 188
(...skipping 16 matching lines...) Expand all
307 205
308 void LockStateController::OnAppTerminating() { 206 void LockStateController::OnAppTerminating() {
309 // If we hear that Chrome is exiting but didn't request it ourselves, all we 207 // If we hear that Chrome is exiting but didn't request it ourselves, all we
310 // can really hope for is that we'll have time to clear the screen. 208 // can really hope for is that we'll have time to clear the screen.
311 // This is also the case when the user signs off. 209 // This is also the case when the user signs off.
312 if (!shutting_down_) { 210 if (!shutting_down_) {
313 shutting_down_ = true; 211 shutting_down_ = true;
314 Shell* shell = ash::Shell::GetInstance(); 212 Shell* shell = ash::Shell::GetInstance();
315 shell->cursor_manager()->HideCursor(); 213 shell->cursor_manager()->HideCursor();
316 shell->cursor_manager()->LockCursor(); 214 shell->cursor_manager()->LockCursor();
317 animator_->StartAnimation(SessionStateAnimator::kAllContainersMask, 215 animator_->StartAnimation(SessionStateAnimator::kAllNonRootContainersMask,
318 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, 216 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY,
319 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); 217 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE);
320 } 218 }
321 } 219 }
322 220
323 void LockStateController::OnLockStateChanged(bool locked) { 221 void LockStateController::OnLockStateChanged(bool locked) {
324 VLOG(1) << "OnLockStateChanged " << locked; 222 VLOG(1) << "OnLockStateChanged " << locked;
325 if (shutting_down_ || (system_is_locked_ == locked)) 223 if (shutting_down_ || (system_is_locked_ == locked))
326 return; 224 return;
327 225
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 Shell::GetInstance()->metrics()->RecordUserMetricsAction( 309 Shell::GetInstance()->metrics()->RecordUserMetricsAction(
412 UMA_ACCEL_SHUT_DOWN_POWER_BUTTON); 310 UMA_ACCEL_SHUT_DOWN_POWER_BUTTON);
413 delegate_->RequestShutdown(); 311 delegate_->RequestShutdown();
414 } 312 }
415 313
416 void LockStateController::StartCancellableShutdownAnimation() { 314 void LockStateController::StartCancellableShutdownAnimation() {
417 Shell* shell = ash::Shell::GetInstance(); 315 Shell* shell = ash::Shell::GetInstance();
418 // Hide cursor, but let it reappear if the mouse moves. 316 // Hide cursor, but let it reappear if the mouse moves.
419 shell->cursor_manager()->HideCursor(); 317 shell->cursor_manager()->HideCursor();
420 318
421 animator_->StartGlobalAnimation( 319 animator_->StartAnimation(
320 SessionStateAnimator::ROOT_CONTAINER,
422 SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS, 321 SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS,
423 SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); 322 SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN);
424 StartPreShutdownAnimationTimer(); 323 StartPreShutdownAnimationTimer();
425 } 324 }
426 325
427 void LockStateController::StartImmediatePreLockAnimation( 326 void LockStateController::StartImmediatePreLockAnimation(
428 bool request_lock_on_completion) { 327 bool request_lock_on_completion) {
429 VLOG(1) << "StartImmediatePreLockAnimation " << request_lock_on_completion; 328 VLOG(1) << "StartImmediatePreLockAnimation " << request_lock_on_completion;
430 animating_lock_ = true; 329 animating_lock_ = true;
431 StoreUnlockedProperties(); 330 StoreUnlockedProperties();
432 331
433 base::Closure next_animation_starter = 332 base::Closure next_animation_starter =
434 base::Bind(&LockStateController::PreLockAnimationFinished, 333 base::Bind(&LockStateController::PreLockAnimationFinished,
435 weak_ptr_factory_.GetWeakPtr(), 334 weak_ptr_factory_.GetWeakPtr(),
436 request_lock_on_completion); 335 request_lock_on_completion);
437 AnimationFinishedObserver* observer = 336 SessionStateAnimator::AnimationSequence* animation_sequence =
438 new AnimationFinishedObserver(next_animation_starter); 337 animator_->BeginAnimationSequence(next_animation_starter);
439 338
440 observer->Pause(); 339 animation_sequence->StartAnimation(
441
442 animator_->StartAnimationWithObserver(
443 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, 340 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS,
444 SessionStateAnimator::ANIMATION_LIFT, 341 SessionStateAnimator::ANIMATION_LIFT,
445 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 342 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS);
446 observer); 343 animation_sequence->StartAnimation(
447 animator_->StartAnimationWithObserver(
448 SessionStateAnimator::LAUNCHER, 344 SessionStateAnimator::LAUNCHER,
449 SessionStateAnimator::ANIMATION_FADE_OUT, 345 SessionStateAnimator::ANIMATION_FADE_OUT,
450 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 346 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS);
451 observer);
452 // Hide the screen locker containers so we can raise them later. 347 // Hide the screen locker containers so we can raise them later.
453 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, 348 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS,
454 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, 349 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY,
455 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); 350 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE);
456 AnimateBackgroundAppearanceIfNecessary( 351 AnimateBackgroundAppearanceIfNecessary(
457 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, observer); 352 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, animation_sequence);
458 353
459 observer->Unpause(); 354 animation_sequence->EndSequence();
460 355
461 DispatchCancelMode(); 356 DispatchCancelMode();
462 FOR_EACH_OBSERVER(LockStateObserver, observers_, 357 FOR_EACH_OBSERVER(LockStateObserver, observers_,
463 OnLockStateEvent(LockStateObserver::EVENT_LOCK_ANIMATION_STARTED)); 358 OnLockStateEvent(LockStateObserver::EVENT_LOCK_ANIMATION_STARTED));
464 } 359 }
465 360
466 void LockStateController::StartCancellablePreLockAnimation() { 361 void LockStateController::StartCancellablePreLockAnimation() {
467 animating_lock_ = true; 362 animating_lock_ = true;
468 StoreUnlockedProperties(); 363 StoreUnlockedProperties();
469 VLOG(1) << "StartCancellablePreLockAnimation"; 364 VLOG(1) << "StartCancellablePreLockAnimation";
470 base::Closure next_animation_starter = 365 base::Closure next_animation_starter =
471 base::Bind(&LockStateController::PreLockAnimationFinished, 366 base::Bind(&LockStateController::PreLockAnimationFinished,
472 weak_ptr_factory_.GetWeakPtr(), 367 weak_ptr_factory_.GetWeakPtr(),
473 true /* request_lock */); 368 true /* request_lock */);
474 AnimationFinishedObserver* observer = 369 SessionStateAnimator::AnimationSequence* animation_sequence =
475 new AnimationFinishedObserver(next_animation_starter); 370 animator_->BeginAnimationSequence(next_animation_starter);
476 371
477 observer->Pause(); 372 animation_sequence->StartAnimation(
478
479 animator_->StartAnimationWithObserver(
480 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, 373 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS,
481 SessionStateAnimator::ANIMATION_LIFT, 374 SessionStateAnimator::ANIMATION_LIFT,
482 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 375 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE);
483 observer); 376 animation_sequence->StartAnimation(
484 animator_->StartAnimationWithObserver(
485 SessionStateAnimator::LAUNCHER, 377 SessionStateAnimator::LAUNCHER,
486 SessionStateAnimator::ANIMATION_FADE_OUT, 378 SessionStateAnimator::ANIMATION_FADE_OUT,
487 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 379 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE);
488 observer);
489 // Hide the screen locker containers so we can raise them later. 380 // Hide the screen locker containers so we can raise them later.
490 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, 381 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS,
491 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, 382 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY,
492 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); 383 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE);
493 AnimateBackgroundAppearanceIfNecessary( 384 AnimateBackgroundAppearanceIfNecessary(
494 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, observer); 385 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, animation_sequence);
495 386
496 DispatchCancelMode(); 387 DispatchCancelMode();
497 FOR_EACH_OBSERVER(LockStateObserver, observers_, 388 FOR_EACH_OBSERVER(LockStateObserver, observers_,
498 OnLockStateEvent(LockStateObserver::EVENT_PRELOCK_ANIMATION_STARTED)); 389 OnLockStateEvent(LockStateObserver::EVENT_PRELOCK_ANIMATION_STARTED));
499 observer->Unpause(); 390 animation_sequence->EndSequence();
500 } 391 }
501 392
502 void LockStateController::CancelPreLockAnimation() { 393 void LockStateController::CancelPreLockAnimation() {
503 VLOG(1) << "CancelPreLockAnimation"; 394 VLOG(1) << "CancelPreLockAnimation";
504 base::Closure next_animation_starter = 395 base::Closure next_animation_starter =
505 base::Bind(&LockStateController::LockAnimationCancelled, 396 base::Bind(&LockStateController::LockAnimationCancelled,
506 weak_ptr_factory_.GetWeakPtr()); 397 weak_ptr_factory_.GetWeakPtr());
507 AnimationFinishedObserver* observer = 398 SessionStateAnimator::AnimationSequence* animation_sequence =
508 new AnimationFinishedObserver(next_animation_starter); 399 animator_->BeginAnimationSequence(next_animation_starter);
509 400
510 observer->Pause(); 401 animation_sequence->StartAnimation(
511
512 animator_->StartAnimationWithObserver(
513 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, 402 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS,
514 SessionStateAnimator::ANIMATION_UNDO_LIFT, 403 SessionStateAnimator::ANIMATION_UNDO_LIFT,
515 SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, 404 SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS);
516 observer); 405 animation_sequence->StartAnimation(
517 animator_->StartAnimationWithObserver(
518 SessionStateAnimator::LAUNCHER, 406 SessionStateAnimator::LAUNCHER,
519 SessionStateAnimator::ANIMATION_FADE_IN, 407 SessionStateAnimator::ANIMATION_FADE_IN,
408 SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS);
409 AnimateBackgroundHidingIfNecessary(
520 SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, 410 SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS,
521 observer); 411 animation_sequence);
522 AnimateBackgroundHidingIfNecessary(
523 SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, observer);
524 412
525 observer->Unpause(); 413 animation_sequence->EndSequence();
526 } 414 }
527 415
528 void LockStateController::StartPostLockAnimation() { 416 void LockStateController::StartPostLockAnimation() {
529 VLOG(1) << "StartPostLockAnimation"; 417 VLOG(1) << "StartPostLockAnimation";
530 base::Closure next_animation_starter = 418 base::Closure next_animation_starter =
531 base::Bind(&LockStateController::PostLockAnimationFinished, 419 base::Bind(&LockStateController::PostLockAnimationFinished,
532 weak_ptr_factory_.GetWeakPtr()); 420 weak_ptr_factory_.GetWeakPtr());
421 SessionStateAnimator::AnimationSequence* animation_sequence =
422 animator_->BeginAnimationSequence(next_animation_starter);
533 423
534 AnimationFinishedObserver* observer = 424 animation_sequence->StartAnimation(
535 new AnimationFinishedObserver(next_animation_starter);
536
537 observer->Pause();
538 animator_->StartAnimationWithObserver(
539 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, 425 SessionStateAnimator::LOCK_SCREEN_CONTAINERS,
540 SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN, 426 SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN,
541 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 427 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS);
542 observer); 428 animation_sequence->EndSequence();
543 observer->Unpause();
544 } 429 }
545 430
546 void LockStateController::StartUnlockAnimationBeforeUIDestroyed( 431 void LockStateController::StartUnlockAnimationBeforeUIDestroyed(
547 base::Closure& callback) { 432 base::Closure& callback) {
548 VLOG(1) << "StartUnlockAnimationBeforeUIDestroyed"; 433 VLOG(1) << "StartUnlockAnimationBeforeUIDestroyed";
549 animator_->StartAnimationWithCallback( 434 animator_->StartAnimationWithCallback(
550 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, 435 SessionStateAnimator::LOCK_SCREEN_CONTAINERS,
551 SessionStateAnimator::ANIMATION_LIFT, 436 SessionStateAnimator::ANIMATION_LIFT,
552 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 437 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS,
553 callback); 438 callback);
554 } 439 }
555 440
556 void LockStateController::StartUnlockAnimationAfterUIDestroyed() { 441 void LockStateController::StartUnlockAnimationAfterUIDestroyed() {
557 VLOG(1) << "StartUnlockAnimationAfterUIDestroyed"; 442 VLOG(1) << "StartUnlockAnimationAfterUIDestroyed";
558 base::Closure next_animation_starter = 443 base::Closure next_animation_starter =
559 base::Bind(&LockStateController::UnlockAnimationAfterUIDestroyedFinished, 444 base::Bind(&LockStateController::UnlockAnimationAfterUIDestroyedFinished,
560 weak_ptr_factory_.GetWeakPtr()); 445 weak_ptr_factory_.GetWeakPtr());
446 SessionStateAnimator::AnimationSequence* animation_sequence =
447 animator_->BeginAnimationSequence(next_animation_starter);
561 448
562 AnimationFinishedObserver* observer = 449 animation_sequence->StartAnimation(
563 new AnimationFinishedObserver(next_animation_starter);
564
565 observer->Pause();
566
567 animator_->StartAnimationWithObserver(
568 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, 450 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS,
569 SessionStateAnimator::ANIMATION_DROP, 451 SessionStateAnimator::ANIMATION_DROP,
570 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 452 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS);
571 observer); 453 animation_sequence->StartAnimation(
572 animator_->StartAnimationWithObserver(
573 SessionStateAnimator::LAUNCHER, 454 SessionStateAnimator::LAUNCHER,
574 SessionStateAnimator::ANIMATION_FADE_IN, 455 SessionStateAnimator::ANIMATION_FADE_IN,
575 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 456 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS);
576 observer);
577 AnimateBackgroundHidingIfNecessary( 457 AnimateBackgroundHidingIfNecessary(
578 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, observer); 458 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, animation_sequence);
579 observer->Unpause(); 459 animation_sequence->EndSequence();
580 } 460 }
581 461
582 void LockStateController::LockAnimationCancelled() { 462 void LockStateController::LockAnimationCancelled() {
583 can_cancel_lock_animation_ = false; 463 can_cancel_lock_animation_ = false;
584 RestoreUnlockedProperties(); 464 RestoreUnlockedProperties();
585 } 465 }
586 466
587 void LockStateController::PreLockAnimationFinished(bool request_lock) { 467 void LockStateController::PreLockAnimationFinished(bool request_lock) {
588 VLOG(1) << "PreLockAnimationFinished"; 468 VLOG(1) << "PreLockAnimationFinished";
589 can_cancel_lock_animation_ = false; 469 can_cancel_lock_animation_ = false;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 } 515 }
636 } 516 }
637 517
638 void LockStateController::UnlockAnimationAfterUIDestroyedFinished() { 518 void LockStateController::UnlockAnimationAfterUIDestroyedFinished() {
639 RestoreUnlockedProperties(); 519 RestoreUnlockedProperties();
640 } 520 }
641 521
642 void LockStateController::StoreUnlockedProperties() { 522 void LockStateController::StoreUnlockedProperties() {
643 if (!unlocked_properties_) { 523 if (!unlocked_properties_) {
644 unlocked_properties_.reset(new UnlockedStateProperties()); 524 unlocked_properties_.reset(new UnlockedStateProperties());
645 unlocked_properties_->background_is_hidden = IsBackgroundHidden(); 525 unlocked_properties_->background_is_hidden =
526 animator_->IsBackgroundHidden();
646 } 527 }
647 if (unlocked_properties_->background_is_hidden) { 528 if (unlocked_properties_->background_is_hidden) {
648 // Hide background so that it can be animated later. 529 // Hide background so that it can be animated later.
649 animator_->StartAnimation(SessionStateAnimator::DESKTOP_BACKGROUND, 530 animator_->StartAnimation(SessionStateAnimator::DESKTOP_BACKGROUND,
650 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, 531 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY,
651 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); 532 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE);
652 ShowBackground(); 533 animator_->ShowBackground();
653 } 534 }
654 } 535 }
655 536
656 void LockStateController::RestoreUnlockedProperties() { 537 void LockStateController::RestoreUnlockedProperties() {
657 if (!unlocked_properties_) 538 if (!unlocked_properties_)
658 return; 539 return;
659 if (unlocked_properties_->background_is_hidden) { 540 if (unlocked_properties_->background_is_hidden) {
660 HideBackground(); 541 animator_->HideBackground();
661 // Restore background visibility. 542 // Restore background visibility.
662 animator_->StartAnimation(SessionStateAnimator::DESKTOP_BACKGROUND, 543 animator_->StartAnimation(SessionStateAnimator::DESKTOP_BACKGROUND,
663 SessionStateAnimator::ANIMATION_FADE_IN, 544 SessionStateAnimator::ANIMATION_FADE_IN,
664 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); 545 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE);
665 } 546 }
666 unlocked_properties_.reset(); 547 unlocked_properties_.reset();
667 } 548 }
668 549
669 void LockStateController::AnimateBackgroundAppearanceIfNecessary( 550 void LockStateController::AnimateBackgroundAppearanceIfNecessary(
670 SessionStateAnimator::AnimationSpeed speed, 551 SessionStateAnimator::AnimationSpeed speed,
671 ui::LayerAnimationObserver* observer) { 552 SessionStateAnimator::AnimationSequence* animation_sequence) {
672 if (unlocked_properties_.get() && 553 if (unlocked_properties_.get() &&
673 unlocked_properties_->background_is_hidden) { 554 unlocked_properties_->background_is_hidden) {
674 animator_->StartAnimationWithObserver( 555 animation_sequence->StartAnimation(
675 SessionStateAnimator::DESKTOP_BACKGROUND, 556 SessionStateAnimator::DESKTOP_BACKGROUND,
676 SessionStateAnimator::ANIMATION_FADE_IN, 557 SessionStateAnimator::ANIMATION_FADE_IN,
677 speed, 558 speed);
678 observer);
679 } 559 }
680 } 560 }
681 561
682 void LockStateController::AnimateBackgroundHidingIfNecessary( 562 void LockStateController::AnimateBackgroundHidingIfNecessary(
683 SessionStateAnimator::AnimationSpeed speed, 563 SessionStateAnimator::AnimationSpeed speed,
684 ui::LayerAnimationObserver* observer) { 564 SessionStateAnimator::AnimationSequence* animation_sequence) {
685 if (unlocked_properties_.get() && 565 if (unlocked_properties_.get() &&
686 unlocked_properties_->background_is_hidden) { 566 unlocked_properties_->background_is_hidden) {
687 animator_->StartAnimationWithObserver( 567 animation_sequence->StartAnimation(
688 SessionStateAnimator::DESKTOP_BACKGROUND, 568 SessionStateAnimator::DESKTOP_BACKGROUND,
689 SessionStateAnimator::ANIMATION_FADE_OUT, 569 SessionStateAnimator::ANIMATION_FADE_OUT,
690 speed, 570 speed);
691 observer);
692 } 571 }
693 } 572 }
694 573
695 } // namespace ash 574 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/lock_state_controller.h ('k') | ash/wm/lock_state_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698