• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
6 
7 #include "ash/shell.h"
8 #include "ash/system/tray/system_tray.h"
9 #include "base/bind.h"
10 #include "base/memory/singleton.h"
11 #include "base/observer_list.h"
12 #include "chrome/browser/chromeos/login/helper.h"
13 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
14 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
15 #include "ui/gfx/rect.h"
16 #include "ui/gfx/size.h"
17 
18 namespace chromeos {
19 
20 namespace {
21 
22 class UserAddingScreenImpl : public UserAddingScreen {
23  public:
24   virtual void Start() OVERRIDE;
25   virtual void Cancel() OVERRIDE;
26   virtual bool IsRunning() OVERRIDE;
27 
28   virtual void AddObserver(Observer* observer) OVERRIDE;
29   virtual void RemoveObserver(Observer* observer) OVERRIDE;
30 
31   static UserAddingScreenImpl* GetInstance();
32  private:
33   friend struct DefaultSingletonTraits<UserAddingScreenImpl>;
34 
35   void OnDisplayHostCompletion();
36 
37   UserAddingScreenImpl();
38   virtual ~UserAddingScreenImpl();
39 
40   ObserverList<Observer> observers_;
41   LoginDisplayHost* display_host_;
42 };
43 
Start()44 void UserAddingScreenImpl::Start() {
45   CHECK(!IsRunning());
46   gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size()));
47   display_host_ = new chromeos::LoginDisplayHostImpl(screen_bounds);
48   display_host_->StartUserAdding(
49       base::Bind(&UserAddingScreenImpl::OnDisplayHostCompletion,
50                  base::Unretained(this)));
51   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingStarted());
52 }
53 
Cancel()54 void UserAddingScreenImpl::Cancel() {
55   CHECK(IsRunning());
56 
57   // Make sure that system tray is enabled after this flow.
58   ash::Shell::GetInstance()->GetPrimarySystemTray()->SetEnabled(true);
59   display_host_->Finalize();
60 
61   // Reset wallpaper if cancel adding user from multiple user sign in page.
62   if (UserManager::Get()->IsUserLoggedIn()) {
63     WallpaperManager::Get()->SetUserWallpaperDelayed(
64         UserManager::Get()->GetActiveUser()->email());
65   }
66 }
67 
IsRunning()68 bool UserAddingScreenImpl::IsRunning() {
69   return display_host_ != NULL;
70 }
71 
AddObserver(Observer * observer)72 void UserAddingScreenImpl::AddObserver(Observer* observer) {
73   observers_.AddObserver(observer);
74 }
75 
RemoveObserver(Observer * observer)76 void UserAddingScreenImpl::RemoveObserver(Observer* observer) {
77   observers_.RemoveObserver(observer);
78 }
79 
OnDisplayHostCompletion()80 void UserAddingScreenImpl::OnDisplayHostCompletion() {
81   CHECK(IsRunning());
82   display_host_ = NULL;
83   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingFinished());
84 }
85 
86 // static
GetInstance()87 UserAddingScreenImpl* UserAddingScreenImpl::GetInstance() {
88   return Singleton<UserAddingScreenImpl>::get();
89 }
90 
UserAddingScreenImpl()91 UserAddingScreenImpl::UserAddingScreenImpl()
92   : display_host_(NULL) {
93 }
94 
~UserAddingScreenImpl()95 UserAddingScreenImpl::~UserAddingScreenImpl() {
96 }
97 
98 }  // anonymous namespace
99 
UserAddingScreen()100 UserAddingScreen::UserAddingScreen() {}
~UserAddingScreen()101 UserAddingScreen::~UserAddingScreen() {}
102 
Get()103 UserAddingScreen* UserAddingScreen::Get() {
104   return UserAddingScreenImpl::GetInstance();
105 }
106 
107 }  // namespace chromeos
108 
109