| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 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 <vector> | |
| 6 | |
| 7 #include "chrome/browser/browser_process.h" | |
| 8 #include "chrome/browser/chromeos/login/enrollment/views_enterprise_enrollment_s
creen_actor.h" | |
| 9 #include "chrome/browser/chromeos/login/views_eula_screen_actor.h" | |
| 10 #include "chrome/browser/chromeos/login/views_network_screen_actor.h" | |
| 11 #include "chrome/browser/chromeos/login/views_oobe_display.h" | |
| 12 #include "chrome/browser/chromeos/login/views_update_screen_actor.h" | |
| 13 #include "chrome/browser/chromeos/login/views_user_image_screen_actor.h" | |
| 14 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" | |
| 15 #include "chrome/browser/chromeos/login/wizard_controller.h" | |
| 16 #include "chrome/common/chrome_notification_types.h" | |
| 17 #include "content/public/browser/notification_service.h" | |
| 18 #include "views/view.h" | |
| 19 #include "views/widget/widget.h" | |
| 20 | |
| 21 #if defined(TOOLKIT_USES_GTK) | |
| 22 #include "chrome/browser/chromeos/wm_ipc.h" | |
| 23 #endif | |
| 24 | |
| 25 namespace chromeos { | |
| 26 | |
| 27 namespace { | |
| 28 | |
| 29 // RootView of the Widget WizardController creates. Contains the contents of the | |
| 30 // WizardController. | |
| 31 class ContentView : public views::View { | |
| 32 public: | |
| 33 ContentView() | |
| 34 : accel_toggle_accessibility_( | |
| 35 chromeos::WizardAccessibilityHelper::GetAccelerator()) { | |
| 36 #if defined(OFFICIAL_BUILD) | |
| 37 accel_cancel_update_ = views::Accelerator(ui::VKEY_ESCAPE, | |
| 38 true, true, true); | |
| 39 #else | |
| 40 accel_cancel_update_ = views::Accelerator(ui::VKEY_ESCAPE, | |
| 41 false, false, false); | |
| 42 accel_login_screen_ = views::Accelerator(ui::VKEY_L, | |
| 43 false, true, true); | |
| 44 accel_network_screen_ = views::Accelerator(ui::VKEY_N, | |
| 45 false, true, true); | |
| 46 accel_update_screen_ = views::Accelerator(ui::VKEY_U, | |
| 47 false, true, true); | |
| 48 accel_image_screen_ = views::Accelerator(ui::VKEY_I, | |
| 49 false, true, true); | |
| 50 accel_eula_screen_ = views::Accelerator(ui::VKEY_E, | |
| 51 false, true, true); | |
| 52 accel_register_screen_ = views::Accelerator(ui::VKEY_R, | |
| 53 false, true, true); | |
| 54 accel_enterprise_enrollment_screen_ = | |
| 55 views::Accelerator(ui::VKEY_P, false, true, true); | |
| 56 AddAccelerator(accel_login_screen_); | |
| 57 AddAccelerator(accel_network_screen_); | |
| 58 AddAccelerator(accel_update_screen_); | |
| 59 AddAccelerator(accel_image_screen_); | |
| 60 AddAccelerator(accel_eula_screen_); | |
| 61 AddAccelerator(accel_register_screen_); | |
| 62 AddAccelerator(accel_enterprise_enrollment_screen_); | |
| 63 #endif | |
| 64 AddAccelerator(accel_toggle_accessibility_); | |
| 65 AddAccelerator(accel_cancel_update_); | |
| 66 } | |
| 67 | |
| 68 ~ContentView() { | |
| 69 content::NotificationService::current()->Notify( | |
| 70 chrome::NOTIFICATION_WIZARD_CONTENT_VIEW_DESTROYED, | |
| 71 content::NotificationService::AllSources(), | |
| 72 content::NotificationService::NoDetails()); | |
| 73 } | |
| 74 | |
| 75 bool AcceleratorPressed(const views::Accelerator& accel) { | |
| 76 WizardController* controller = WizardController::default_controller(); | |
| 77 if (!controller) | |
| 78 return false; | |
| 79 | |
| 80 if (accel == accel_toggle_accessibility_) { | |
| 81 chromeos::WizardAccessibilityHelper::GetInstance()->ToggleAccessibility(); | |
| 82 } else if (accel == accel_cancel_update_) { | |
| 83 controller->CancelOOBEUpdate(); | |
| 84 #if !defined(OFFICIAL_BUILD) | |
| 85 } else if (accel == accel_login_screen_) { | |
| 86 controller->ShowLoginScreen(); | |
| 87 } else if (accel == accel_network_screen_) { | |
| 88 controller->ShowNetworkScreen(); | |
| 89 } else if (accel == accel_update_screen_) { | |
| 90 controller->ShowUpdateScreen(); | |
| 91 } else if (accel == accel_image_screen_) { | |
| 92 controller->ShowUserImageScreen(); | |
| 93 } else if (accel == accel_eula_screen_) { | |
| 94 controller->ShowEulaScreen(); | |
| 95 } else if (accel == accel_register_screen_) { | |
| 96 controller->ShowRegistrationScreen(); | |
| 97 } else if (accel == accel_enterprise_enrollment_screen_) { | |
| 98 controller->ShowEnterpriseEnrollmentScreen(); | |
| 99 #endif | |
| 100 } else { | |
| 101 return false; | |
| 102 } | |
| 103 | |
| 104 return true; | |
| 105 } | |
| 106 | |
| 107 virtual void Layout() { | |
| 108 for (int i = 0; i < child_count(); ++i) { | |
| 109 views::View* cur = child_at(i); | |
| 110 if (cur->IsVisible()) | |
| 111 cur->SetBounds(0, 0, width(), height()); | |
| 112 } | |
| 113 } | |
| 114 | |
| 115 private: | |
| 116 #if !defined(OFFICIAL_BUILD) | |
| 117 views::Accelerator accel_login_screen_; | |
| 118 views::Accelerator accel_network_screen_; | |
| 119 views::Accelerator accel_update_screen_; | |
| 120 views::Accelerator accel_image_screen_; | |
| 121 views::Accelerator accel_eula_screen_; | |
| 122 views::Accelerator accel_register_screen_; | |
| 123 views::Accelerator accel_enterprise_enrollment_screen_; | |
| 124 #endif | |
| 125 views::Accelerator accel_toggle_accessibility_; | |
| 126 views::Accelerator accel_cancel_update_; | |
| 127 | |
| 128 DISALLOW_COPY_AND_ASSIGN(ContentView); | |
| 129 }; | |
| 130 | |
| 131 } // namespace | |
| 132 | |
| 133 ViewsOobeDisplay::ViewsOobeDisplay(const gfx::Rect& screen_bounds) | |
| 134 : widget_(NULL), | |
| 135 contents_(new ContentView()), | |
| 136 screen_bounds_(screen_bounds), | |
| 137 initial_show_(true), | |
| 138 screen_observer_(NULL) { | |
| 139 } | |
| 140 | |
| 141 ViewsOobeDisplay::~ViewsOobeDisplay() { | |
| 142 if (widget_) { | |
| 143 widget_->Close(); | |
| 144 widget_ = NULL; | |
| 145 } | |
| 146 } | |
| 147 | |
| 148 void ViewsOobeDisplay::ShowScreen(WizardScreen* screen) { | |
| 149 bool force_widget_show = false; | |
| 150 views::Widget* window = NULL; | |
| 151 | |
| 152 gfx::Rect current_bounds; | |
| 153 if (widget_) | |
| 154 current_bounds = widget_->GetClientAreaScreenBounds(); | |
| 155 | |
| 156 // Calls SetScreenSize() method. | |
| 157 screen->PrepareToShow(); | |
| 158 | |
| 159 gfx::Rect new_bounds = GetWizardScreenBounds(screen_size_.width(), | |
| 160 screen_size_.height()); | |
| 161 if (new_bounds != current_bounds) { | |
| 162 if (widget_) | |
| 163 widget_->Close(); | |
| 164 force_widget_show = true; | |
| 165 window = CreateScreenWindow(new_bounds, initial_show_); | |
| 166 } | |
| 167 screen->Show(); | |
| 168 contents_->Layout(); | |
| 169 contents_->SchedulePaint(); | |
| 170 #if defined(TOOLKIT_USES_GTK) | |
| 171 if (force_widget_show) { | |
| 172 // This keeps the window from flashing at startup. | |
| 173 GdkWindow* gdk_window = window->GetNativeView()->window; | |
| 174 gdk_window_set_back_pixmap(gdk_window, NULL, false); | |
| 175 if (widget_) | |
| 176 widget_->Show(); | |
| 177 } | |
| 178 #endif | |
| 179 } | |
| 180 | |
| 181 void ViewsOobeDisplay::HideScreen(WizardScreen* screen) { | |
| 182 initial_show_ = false; | |
| 183 screen->Hide(); | |
| 184 contents_->Layout(); | |
| 185 contents_->SchedulePaint(); | |
| 186 } | |
| 187 | |
| 188 UpdateScreenActor* ViewsOobeDisplay::GetUpdateScreenActor() { | |
| 189 if (update_screen_actor_ == NULL) | |
| 190 update_screen_actor_.reset(new ViewsUpdateScreenActor(this)); | |
| 191 return update_screen_actor_.get(); | |
| 192 } | |
| 193 | |
| 194 NetworkScreenActor* ViewsOobeDisplay::GetNetworkScreenActor() { | |
| 195 if (network_screen_actor_ == NULL) | |
| 196 network_screen_actor_.reset(new ViewsNetworkScreenActor(this)); | |
| 197 return network_screen_actor_.get(); | |
| 198 } | |
| 199 | |
| 200 EulaScreenActor* ViewsOobeDisplay::GetEulaScreenActor() { | |
| 201 if (eula_screen_actor_ == NULL) | |
| 202 eula_screen_actor_.reset(new ViewsEulaScreenActor(this)); | |
| 203 return eula_screen_actor_.get(); | |
| 204 } | |
| 205 | |
| 206 EnterpriseEnrollmentScreenActor* ViewsOobeDisplay:: | |
| 207 GetEnterpriseEnrollmentScreenActor() { | |
| 208 if (enterprise_enrollment_screen_actor_ == NULL) { | |
| 209 enterprise_enrollment_screen_actor_.reset( | |
| 210 new ViewsEnterpriseEnrollmentScreenActor(this)); | |
| 211 } | |
| 212 return enterprise_enrollment_screen_actor_.get(); | |
| 213 } | |
| 214 | |
| 215 UserImageScreenActor* ViewsOobeDisplay::GetUserImageScreenActor() { | |
| 216 if (user_image_screen_actor_ == NULL) | |
| 217 user_image_screen_actor_.reset(new ViewsUserImageScreenActor(this)); | |
| 218 return user_image_screen_actor_.get(); | |
| 219 } | |
| 220 | |
| 221 ViewScreenDelegate* ViewsOobeDisplay::GetRegistrationScreenActor() { | |
| 222 return this; | |
| 223 } | |
| 224 | |
| 225 ViewScreenDelegate* ViewsOobeDisplay::GetHTMLPageScreenActor() { | |
| 226 return this; | |
| 227 } | |
| 228 | |
| 229 views::Widget* ViewsOobeDisplay::CreateScreenWindow( | |
| 230 const gfx::Rect& bounds, bool initial_show) { | |
| 231 widget_ = new views::Widget; | |
| 232 views::Widget::InitParams widget_params( | |
| 233 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); | |
| 234 // Window transparency makes background flicker through controls that | |
| 235 // are constantly updating its contents (like image view with video | |
| 236 // stream). Hence enabling double buffer. | |
| 237 widget_params.double_buffer = true; | |
| 238 widget_params.transparent = true; | |
| 239 widget_params.bounds = bounds; | |
| 240 widget_->Init(widget_params); | |
| 241 std::vector<int> params; | |
| 242 // For initial show WM would animate background window. | |
| 243 // Otherwise it stays unchanged. | |
| 244 params.push_back(initial_show); | |
| 245 | |
| 246 #if defined(TOOLKIT_USES_GTK) | |
| 247 chromeos::WmIpc::instance()->SetWindowType( | |
| 248 widget_->GetNativeView(), | |
| 249 chromeos::WM_IPC_WINDOW_LOGIN_GUEST, | |
| 250 ¶ms); | |
| 251 #endif | |
| 252 | |
| 253 widget_->SetContentsView(contents_); | |
| 254 return widget_; | |
| 255 } | |
| 256 | |
| 257 gfx::Rect ViewsOobeDisplay::GetWizardScreenBounds(int screen_width, | |
| 258 int screen_height) const { | |
| 259 int offset_x = (screen_bounds_.width() - screen_width) / 2; | |
| 260 int offset_y = (screen_bounds_.height() - screen_height) / 2; | |
| 261 int window_x = screen_bounds_.x() + offset_x; | |
| 262 int window_y = screen_bounds_.y() + offset_y; | |
| 263 return gfx::Rect(window_x, window_y, screen_width, screen_height); | |
| 264 } | |
| 265 | |
| 266 views::View* ViewsOobeDisplay::GetWizardView() { | |
| 267 return contents_; | |
| 268 } | |
| 269 | |
| 270 chromeos::ScreenObserver* ViewsOobeDisplay::GetObserver() { | |
| 271 return screen_observer_; | |
| 272 } | |
| 273 | |
| 274 void ViewsOobeDisplay::SetScreenSize(const gfx::Size &screen_size) { | |
| 275 screen_size_ = screen_size; | |
| 276 } | |
| 277 | |
| 278 void ViewsOobeDisplay::SetScreenObserver(ScreenObserver* screen_observer) { | |
| 279 screen_observer_ = screen_observer; | |
| 280 } | |
| 281 | |
| 282 } // namespace chromeos | |
| OLD | NEW |