Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #ifndef CHROME_BROWSER_UI_ASH_MULTI_USER_MULTI_USER_WINDOW_MANAGER_CHROMEOS_H_ | 5 #ifndef CHROME_BROWSER_UI_ASH_MULTI_USER_MULTI_USER_WINDOW_MANAGER_CHROMEOS_H_ |
| 6 #define CHROME_BROWSER_UI_ASH_MULTI_USER_MULTI_USER_WINDOW_MANAGER_CHROMEOS_H_ | 6 #define CHROME_BROWSER_UI_ASH_MULTI_USER_MULTI_USER_WINDOW_MANAGER_CHROMEOS_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 | 105 |
| 106 // Disable any animations for unit tests. | 106 // Disable any animations for unit tests. |
| 107 void SetAnimationsForTest(bool disable); | 107 void SetAnimationsForTest(bool disable); |
| 108 | 108 |
| 109 // Returns true when a user switch animation is running. For unit tests. | 109 // Returns true when a user switch animation is running. For unit tests. |
| 110 bool IsAnimationRunningForTest(); | 110 bool IsAnimationRunningForTest(); |
| 111 | 111 |
| 112 // Returns the current user for unit tests. | 112 // Returns the current user for unit tests. |
| 113 const std::string& GetCurrentUserForTest(); | 113 const std::string& GetCurrentUserForTest(); |
| 114 | 114 |
| 115 // Returns the user id for which the wallpaper is currently shown. | |
| 116 // If a wallpaper is transitioning from A to B it will be returned as | |
| 117 // "A->B". | |
| 118 const std::string& GetWallaperUserIdForTest() { return wallpaper_user_id_; } | |
| 119 | |
| 115 private: | 120 private: |
| 116 friend class ::MultiUserNotificationBlockerChromeOSTest; | 121 friend class ::MultiUserNotificationBlockerChromeOSTest; |
| 117 friend class ash::test::MultiUserWindowManagerChromeOSTest; | 122 friend class ash::test::MultiUserWindowManagerChromeOSTest; |
| 118 | 123 |
| 119 class WindowEntry { | 124 class WindowEntry { |
| 120 public: | 125 public: |
| 121 explicit WindowEntry(const std::string& user_id) | 126 explicit WindowEntry(const std::string& user_id) |
| 122 : owner_(user_id), | 127 : owner_(user_id), |
| 123 show_for_user_(user_id), | 128 show_for_user_(user_id), |
| 124 show_(true) {} | 129 show_(true) {} |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 152 // True if the window should be visible for the user which shows the window. | 157 // True if the window should be visible for the user which shows the window. |
| 153 bool show_; | 158 bool show_; |
| 154 | 159 |
| 155 DISALLOW_COPY_AND_ASSIGN(WindowEntry); | 160 DISALLOW_COPY_AND_ASSIGN(WindowEntry); |
| 156 }; | 161 }; |
| 157 | 162 |
| 158 typedef std::map<aura::Window*, WindowEntry*> WindowToEntryMap; | 163 typedef std::map<aura::Window*, WindowEntry*> WindowToEntryMap; |
| 159 typedef std::map<std::string, AppObserver*> UserIDToAppWindowObserver; | 164 typedef std::map<std::string, AppObserver*> UserIDToAppWindowObserver; |
| 160 typedef std::map<aura::Window*, bool> TransientWindowToVisibility; | 165 typedef std::map<aura::Window*, bool> TransientWindowToVisibility; |
| 161 | 166 |
| 162 // The animation step for the user change animation. First the old user gets | 167 // The animation step for the user change animation. |
| 163 // hidden and then the new one gets presented. | |
| 164 enum AnimationStep { | 168 enum AnimationStep { |
| 165 HIDE_OLD_USER, | 169 ANIMATION_STEP_HIDE_OLD_USER, // Hiding the old user (and shelf). |
| 166 SHOW_NEW_USER | 170 ANIMATION_STEP_SHOW_NEW_USER, // Show the shelf of the new user. |
| 171 ANIMATION_STEP_FINALIZE, // All animations are done - final cleanup. | |
| 172 ANIMATION_STEP_ENDED // The animation has ended. | |
| 173 }; | |
|
oshima
2014/04/03 19:21:41
I like this design.
| |
| 174 | |
| 175 // The window configuration of screen covering windows before an animation. | |
| 176 enum TransitioningScreenCover { | |
| 177 NO_USER_COVERS_SCREEN, // No window covers the entire screen. | |
| 178 OLD_USER_COVERS_SCREEN, // The current user has at least one window | |
| 179 // covering the entire screen. | |
| 180 NEW_USER_COVERS_SCREEN, // The user which becomes active has at least one | |
| 181 // window covering the entire screen. | |
| 182 BOTH_USERS_COVER_SCREEN // Both users have at least one window each | |
| 183 // covering the entire screen. | |
| 167 }; | 184 }; |
| 168 | 185 |
| 169 // Show a window for a user without switching the user. | 186 // Show a window for a user without switching the user. |
| 170 // Returns true when the window moved to a new desktop. | 187 // Returns true when the window moved to a new desktop. |
| 171 bool ShowWindowForUserIntern(aura::Window* window, | 188 bool ShowWindowForUserIntern(aura::Window* window, |
| 172 const std::string& user_id); | 189 const std::string& user_id); |
| 173 | 190 |
| 174 // Start the user change animation required for |animation_step|. | |
| 175 // Note that a call with SHOW_NEW_USER will finalize the animation and kill | |
| 176 // the timer (if there is one). | |
| 177 void TransitionUser(AnimationStep animtion_step); | |
| 178 | |
| 179 // Start the user wallpaper animations. | |
| 180 void TransitionWallpaper(AnimationStep animtion_step); | |
| 181 | |
| 182 // Start the user shelf animations. | |
| 183 void TransitionUserShelf(AnimationStep animtion_step); | |
| 184 | |
| 185 // Add a browser window to the system so that the owner can be remembered. | 191 // Add a browser window to the system so that the owner can be remembered. |
| 186 void AddBrowserWindow(Browser* browser); | 192 void AddBrowserWindow(Browser* browser); |
| 187 | 193 |
| 188 // Show / hide the given window. Note: By not doing this within the functions, | 194 // Show / hide the given window. Note: By not doing this within the functions, |
| 189 // this allows to either switching to different ways to show/hide and / or to | 195 // this allows to either switching to different ways to show/hide and / or to |
| 190 // distinguish state changes performed by this class vs. state changes | 196 // distinguish state changes performed by this class vs. state changes |
| 191 // performed by the others. Note furthermore that system modal dialogs will | 197 // performed by the others. Note furthermore that system modal dialogs will |
| 192 // not get hidden. We will switch instead to the owners desktop. | 198 // not get hidden. We will switch instead to the owners desktop. |
| 193 // The |animation_time_in_ms| is the time the animation should take. Set to 0 | 199 // The |animation_time_in_ms| is the time the animation should take. Set to 0 |
| 194 // if it should get set instantly. | 200 // if it should get set instantly. |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 214 | 220 |
| 215 // A window and its children were removed from its parent and can be | 221 // A window and its children were removed from its parent and can be |
| 216 // unregistered. | 222 // unregistered. |
| 217 void RemoveTransientOwnerRecursive(aura::Window* window); | 223 void RemoveTransientOwnerRecursive(aura::Window* window); |
| 218 | 224 |
| 219 // Animate a |window| to be |visible| in |animation_time_in_ms|. | 225 // Animate a |window| to be |visible| in |animation_time_in_ms|. |
| 220 void SetWindowVisible(aura::Window* window, | 226 void SetWindowVisible(aura::Window* window, |
| 221 bool visible, | 227 bool visible, |
| 222 int aimation_time_in_ms); | 228 int aimation_time_in_ms); |
| 223 | 229 |
| 230 // Start a transition animation for the current user to the new |user_id|. | |
| 231 // Any ongoing transition animations get automatically finished first. | |
| 232 void StartUserTransitionAnimation(const std::string& user_id); | |
| 233 | |
| 234 // Advances the user switch animation to the next step. It reads the current | |
| 235 // step from |animation_step_| and increments it thereafter. When | |
| 236 // |ANIMATION_STEP_FINALIZE| gets executed, the animation is finished and the | |
| 237 // timer (if one exists) will get destroyed. | |
| 238 void AdvanceUserTransitionAnimation(); | |
| 239 | |
| 240 // Execute the user wallpaper animations for |animation_step|. | |
| 241 void TransitionWallpaper(AnimationStep animtion_step); | |
| 242 | |
| 243 // Execute the user shelf animations for |animation_step|. | |
| 244 void TransitionUserShelf(AnimationStep animtion_step); | |
| 245 | |
| 246 // Execute the window animations for |animation_step|. | |
| 247 void TransitionWindows(AnimationStep animation_step); | |
| 248 | |
| 249 // Check if a window is maximized / fullscreen / covering the entire screen. | |
| 250 // TODO(skuhne): We might want to do this on a per screen basis. | |
| 251 TransitioningScreenCover GetScreenCover(); | |
| 252 | |
| 253 // Check if a window is covering the entire work area of the screen it is on. | |
| 254 bool CoversScreen(aura::Window* window); | |
| 255 | |
| 224 // A lookup to see to which user the given window belongs to, where and if it | 256 // A lookup to see to which user the given window belongs to, where and if it |
| 225 // should get shown. | 257 // should get shown. |
| 226 WindowToEntryMap window_to_entry_; | 258 WindowToEntryMap window_to_entry_; |
| 227 | 259 |
| 228 // A list of all known users and their app window observers. | 260 // A list of all known users and their app window observers. |
| 229 UserIDToAppWindowObserver user_id_to_app_observer_; | 261 UserIDToAppWindowObserver user_id_to_app_observer_; |
| 230 | 262 |
| 231 // An observer list to be notified upon window owner changes. | 263 // An observer list to be notified upon window owner changes. |
| 232 ObserverList<Observer> observers_; | 264 ObserverList<Observer> observers_; |
| 233 | 265 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 250 bool suppress_visibility_changes_; | 282 bool suppress_visibility_changes_; |
| 251 | 283 |
| 252 // Caching the current multi profile mode since the detection which mode is | 284 // Caching the current multi profile mode since the detection which mode is |
| 253 // used is quite expensive. | 285 // used is quite expensive. |
| 254 static MultiProfileMode multi_user_mode_; | 286 static MultiProfileMode multi_user_mode_; |
| 255 | 287 |
| 256 // A timer which watches to executes the second part of a "user changed" | 288 // A timer which watches to executes the second part of a "user changed" |
| 257 // animation. Note that this timer exists only during such an animation. | 289 // animation. Note that this timer exists only during such an animation. |
| 258 scoped_ptr<base::Timer> user_changed_animation_timer_; | 290 scoped_ptr<base::Timer> user_changed_animation_timer_; |
| 259 | 291 |
| 292 // The screen cover status before the animation has started. | |
| 293 TransitioningScreenCover screen_cover_; | |
| 294 | |
| 295 // The next animation step for AdvanceUserTransitionAnimation(). | |
| 296 AnimationStep animation_step_; | |
| 297 | |
| 260 // If true, all animations will be suppressed. | 298 // If true, all animations will be suppressed. |
| 261 bool animations_disabled_; | 299 bool animations_disabled_; |
| 262 | 300 |
| 301 // For unit tests: Check which wallpaper was set. | |
| 302 std::string wallpaper_user_id_; | |
| 303 | |
| 263 DISALLOW_COPY_AND_ASSIGN(MultiUserWindowManagerChromeOS); | 304 DISALLOW_COPY_AND_ASSIGN(MultiUserWindowManagerChromeOS); |
| 264 }; | 305 }; |
| 265 | 306 |
| 266 } // namespace chrome | 307 } // namespace chrome |
| 267 | 308 |
| 268 #endif // CHROME_BROWSER_UI_ASH_MULTI_USER_MULTI_USER_WINDOW_MANAGER_CHROMEOS_H _ | 309 #endif // CHROME_BROWSER_UI_ASH_MULTI_USER_MULTI_USER_WINDOW_MANAGER_CHROMEOS_H _ |
| OLD | NEW |