15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_WM_SESSION_STATE_ANIMATOR_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_WM_SESSION_STATE_ANIMATOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Displays onscreen animations for session state changes (lock/unlock, sign
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// out, shut down).
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ASH_EXPORT SessionStateAnimator {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Animations that can be applied to groups of containers.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum AnimationType {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_PARTIAL_CLOSE = 0,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_UNDO_PARTIAL_CLOSE,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_FULL_CLOSE,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_FADE_IN,
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_FADE_OUT,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_HIDE_IMMEDIATELY,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_RESTORE,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Animations that raise/lower windows to/from area "in front" of the
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // screen.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_LIFT,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_UNDO_LIFT,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_DROP,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Animations that raise/lower windows from/to area "behind" of the screen.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_RAISE_TO_SCREEN,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_LOWER_BELOW_SCREEN,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_PARTIAL_FADE_IN,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_UNDO_PARTIAL_FADE_IN,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANIMATION_FULL_FADE_IN,
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_GRAYSCALE_BRIGHTNESS,
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Constants for determining animation speed.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum AnimationSpeed {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Immediately change state.
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_IMMEDIATE = 0,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for animations associated with user action that can be undone.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Used for pre-lock and pre-shutdown animations.
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_UNDOABLE,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for animation that reverts undoable action. Used for aborting
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // pre-lock and pre-shutdown animations.
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_REVERT,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for user action that can not be undone, Used for lock and shutdown
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // animations requested via menus/shortcuts and for animating remaining
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // parts of partial lock/shutdown animations.
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_FAST,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for lock screen appearance in "old" animation set.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_SHOW_LOCK_SCREEN,
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for workspace-like animations in "new" animation set.
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_MOVE_WINDOWS,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for undoing workspace-like animations in "new" animation set.
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_UNDO_MOVE_WINDOWS,
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for shutdown in "new" animation set.
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_SHUTDOWN,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Speed for reverting shutdown in "new" animation set.
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ANIMATION_SPEED_REVERT_SHUTDOWN,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Specific containers or groups of containers that can be animated.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Container {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DESKTOP_BACKGROUND = 1 << 0,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LAUNCHER = 1 << 1,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // All user session related containers including system background but
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // not including desktop background (wallpaper).
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NON_LOCK_SCREEN_CONTAINERS = 1 << 2,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Desktop wallpaper is moved to this layer when screen is locked.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // This layer is excluded from lock animation so that wallpaper stays as is,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // user session windows are hidden and lock UI is shown on top of it.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // This layer is included in shutdown animation.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LOCK_SCREEN_BACKGROUND = 1 << 3,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Lock screen and lock screen modal containers.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LOCK_SCREEN_CONTAINERS = 1 << 4,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Multiple system layers belong here like status, menu, tooltip
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // and overlay layers.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LOCK_SCREEN_RELATED_CONTAINERS = 1 << 5,
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // The primary root window.
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ROOT_CONTAINER = 1 << 6,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // A bitfield mask including LOCK_SCREEN_WALLPAPER,
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // LOCK_SCREEN_CONTAINERS, and LOCK_SCREEN_RELATED_CONTAINERS.
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static const int kAllLockScreenContainersMask;
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // A bitfield mask of all containers except the ROOT_CONTAINER.
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static const int kAllNonRootContainersMask;
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The AnimationSequence groups together multiple animations and invokes a
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // callback once all contained animations are completed successfully.
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Subclasses of AnimationSequence should call one of OnAnimationCompleted or
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // OnAnimationAborted once and behaviour is undefined if called multiple
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // times.
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // AnimationSequences will destroy themselves once EndSquence and one of
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // OnAnimationCompleted or OnAnimationAborted has been called.
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Typical usage:
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //  AnimationSequence* animation_sequence =
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      session_state_animator->BeginAnimationSequence(some_callback);
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //  animation_sequence->StartAnimation(
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      SessionStateAnimator::LAUNCHER,
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      SessionStateAnimator::ANIMATION_FADE_IN,
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      SessionStateAnimator::ANIMATION_SPEED_UNDOABLE);
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //  animation_sequence->StartAnimation(
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      SessionStateAnimator::LAUNCHER,
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      SessionStateAnimator::ANIMATION_FADE_IN,
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //      SessionStateAnimator::ANIMATION_SPEED_UNDOABLE);
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //  animation_sequence->EndSequence();
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //  // some_callback won't be called until here even if the animations
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //  // were completed before the EndSequence call.
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  class ASH_EXPORT AnimationSequence {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual ~AnimationSequence();
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Apply animation |type| to all containers included in |container_mask|
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // with specified |speed|.
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual void StartAnimation(int container_mask,
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                AnimationType type,
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                AnimationSpeed speed) = 0;
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Ends the animation sequence and enables the callback to be invoked
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // when the animation sequence has completed.  No more animations should be
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // started after EndSequence is called because the AnimationSequenceObserver
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // may have destroyed itself.
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // NOTE: Clients of AnimationSequence should not access it after EndSequence
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // has been called.
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual void EndSequence();
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   protected:
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // AnimationSequence should not be instantiated directly, only through
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // subclasses.
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    explicit AnimationSequence(base::Closure callback);
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Subclasses should call this when the contained animations completed
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // successfully.
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // NOTE: This should NOT be accessed after OnAnimationCompleted has been
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // called.
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual void OnAnimationCompleted();
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Subclasses should call this when the contained animations did NOT
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // complete successfully.
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // NOTE: This should NOT be accessed after OnAnimationAborted has been
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // called.
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual void OnAnimationAborted();
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   private:
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Destroys this and calls the callback if the contained animations
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // completed successfully.
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    void CleanupIfSequenceCompleted();
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Tracks whether the sequence has ended.
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool sequence_ended_;
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Track whether the contained animations have completed or not, both
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // successfully and unsuccessfully.
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool animation_completed_;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Flag to specify whether the callback should be invoked once the sequence
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // has completed.
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool invoke_callback_;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Callback to be called.
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    base::Closure callback_;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DISALLOW_COPY_AND_ASSIGN(AnimationSequence);
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  };
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionStateAnimator();
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SessionStateAnimator();
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Reports animation duration for |speed|.
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual base::TimeDelta GetDuration(AnimationSpeed speed);
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Apply animation |type| to all containers included in |container_mask| with
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // specified |speed|.
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void StartAnimation(int container_mask,
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                              AnimationType type,
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                              AnimationSpeed speed) = 0;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Apply animation |type| to all containers included in |container_mask| with
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // specified |speed| and call a |callback| at the end of the animation, if it
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is not null.
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void StartAnimationWithCallback(
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      int container_mask,
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      AnimationType type,
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      AnimationSpeed speed,
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Closure callback) = 0;
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Begins an animation sequence.  Use this when you need to be notified when
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // a group of animations are completed.  See AnimationSequence documentation
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // for more details.
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual AnimationSequence* BeginAnimationSequence(
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Closure callback) = 0;
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Retruns true if the background is hidden.
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool IsBackgroundHidden() const = 0;
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Shows the background immediately.
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowBackground() = 0;
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Hides the background immediately.
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void HideBackground() = 0;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SessionStateAnimator);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ASH_WM_SESSION_STATE_ANIMATOR_H_
225