Index: chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h |
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h |
index 644d5ca3f8b52ee1d0e45fce495ba75e402935de..793e715097ea7f7c8446207b7c56076104b5fc8a 100644 |
--- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h |
+++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h |
@@ -112,6 +112,11 @@ class MultiUserWindowManagerChromeOS |
// Returns the current user for unit tests. |
const std::string& GetCurrentUserForTest(); |
+ // Returns the user id for which the wallpaper is currently shown. |
+ // If a wallpaper is transitioning from A to B it will be returned as |
+ // "A->B". |
+ const std::string& GetWallaperUserIdForTest() { return wallpaper_user_id_; } |
+ |
private: |
friend class ::MultiUserNotificationBlockerChromeOSTest; |
friend class ash::test::MultiUserWindowManagerChromeOSTest; |
@@ -159,11 +164,23 @@ class MultiUserWindowManagerChromeOS |
typedef std::map<std::string, AppObserver*> UserIDToAppWindowObserver; |
typedef std::map<aura::Window*, bool> TransientWindowToVisibility; |
- // The animation step for the user change animation. First the old user gets |
- // hidden and then the new one gets presented. |
+ // The animation step for the user change animation. |
enum AnimationStep { |
- HIDE_OLD_USER, |
- SHOW_NEW_USER |
+ ANIMATION_STEP_HIDE_OLD_USER, // Hiding the old user (and shelf). |
+ ANIMATION_STEP_SHOW_NEW_USER, // Show the shelf of the new user. |
+ ANIMATION_STEP_FINALIZE, // All animations are done - final cleanup. |
+ ANIMATION_STEP_ENDED // The animation has ended. |
+ }; |
oshima
2014/04/03 19:21:41
I like this design.
|
+ |
+ // The window configuration of screen covering windows before an animation. |
+ enum TransitioningScreenCover { |
+ NO_USER_COVERS_SCREEN, // No window covers the entire screen. |
+ OLD_USER_COVERS_SCREEN, // The current user has at least one window |
+ // covering the entire screen. |
+ NEW_USER_COVERS_SCREEN, // The user which becomes active has at least one |
+ // window covering the entire screen. |
+ BOTH_USERS_COVER_SCREEN // Both users have at least one window each |
+ // covering the entire screen. |
}; |
// Show a window for a user without switching the user. |
@@ -171,17 +188,6 @@ class MultiUserWindowManagerChromeOS |
bool ShowWindowForUserIntern(aura::Window* window, |
const std::string& user_id); |
- // Start the user change animation required for |animation_step|. |
- // Note that a call with SHOW_NEW_USER will finalize the animation and kill |
- // the timer (if there is one). |
- void TransitionUser(AnimationStep animtion_step); |
- |
- // Start the user wallpaper animations. |
- void TransitionWallpaper(AnimationStep animtion_step); |
- |
- // Start the user shelf animations. |
- void TransitionUserShelf(AnimationStep animtion_step); |
- |
// Add a browser window to the system so that the owner can be remembered. |
void AddBrowserWindow(Browser* browser); |
@@ -221,6 +227,32 @@ class MultiUserWindowManagerChromeOS |
bool visible, |
int aimation_time_in_ms); |
+ // Start a transition animation for the current user to the new |user_id|. |
+ // Any ongoing transition animations get automatically finished first. |
+ void StartUserTransitionAnimation(const std::string& user_id); |
+ |
+ // Advances the user switch animation to the next step. It reads the current |
+ // step from |animation_step_| and increments it thereafter. When |
+ // |ANIMATION_STEP_FINALIZE| gets executed, the animation is finished and the |
+ // timer (if one exists) will get destroyed. |
+ void AdvanceUserTransitionAnimation(); |
+ |
+ // Execute the user wallpaper animations for |animation_step|. |
+ void TransitionWallpaper(AnimationStep animtion_step); |
+ |
+ // Execute the user shelf animations for |animation_step|. |
+ void TransitionUserShelf(AnimationStep animtion_step); |
+ |
+ // Execute the window animations for |animation_step|. |
+ void TransitionWindows(AnimationStep animation_step); |
+ |
+ // Check if a window is maximized / fullscreen / covering the entire screen. |
+ // TODO(skuhne): We might want to do this on a per screen basis. |
+ TransitioningScreenCover GetScreenCover(); |
+ |
+ // Check if a window is covering the entire work area of the screen it is on. |
+ bool CoversScreen(aura::Window* window); |
+ |
// A lookup to see to which user the given window belongs to, where and if it |
// should get shown. |
WindowToEntryMap window_to_entry_; |
@@ -257,9 +289,18 @@ class MultiUserWindowManagerChromeOS |
// animation. Note that this timer exists only during such an animation. |
scoped_ptr<base::Timer> user_changed_animation_timer_; |
+ // The screen cover status before the animation has started. |
+ TransitioningScreenCover screen_cover_; |
+ |
+ // The next animation step for AdvanceUserTransitionAnimation(). |
+ AnimationStep animation_step_; |
+ |
// If true, all animations will be suppressed. |
bool animations_disabled_; |
+ // For unit tests: Check which wallpaper was set. |
+ std::string wallpaper_user_id_; |
+ |
DISALLOW_COPY_AND_ASSIGN(MultiUserWindowManagerChromeOS); |
}; |