| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 #include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | |
| 8 #include "base/stringprintf.h" | 7 #include "base/stringprintf.h" |
| 9 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 10 #include "base/values.h" | 9 #include "base/values.h" |
| 11 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| 12 #include "chrome/browser/chromeos/cros/cros_library.h" | 11 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 13 #include "chrome/browser/chromeos/input_method/input_method_manager.h" | 12 #include "chrome/browser/chromeos/input_method/input_method_manager.h" |
| 14 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 13 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
| 15 #include "chrome/browser/chromeos/login/language_switch_menu.h" | 14 #include "chrome/browser/chromeos/login/language_switch_menu.h" |
| 16 #include "chrome/browser/chromeos/login/webui_login_display.h" | 15 #include "chrome/browser/chromeos/login/webui_login_display.h" |
| 17 #include "chrome/browser/chromeos/status/input_method_menu.h" | 16 #include "chrome/browser/chromeos/status/input_method_menu.h" |
| 18 #include "chrome/browser/chromeos/status/network_dropdown_button.h" | |
| 19 #include "chrome/browser/chromeos/wm_ipc.h" | 17 #include "chrome/browser/chromeos/wm_ipc.h" |
| 18 #include "chrome/browser/ui/webui/chromeos/login/network_dropdown.h" |
| 19 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
| 20 #include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler
.h" | 20 #include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler
.h" |
| 21 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" | |
| 22 #include "content/browser/tab_contents/tab_contents.h" | 21 #include "content/browser/tab_contents/tab_contents.h" |
| 23 #include "content/browser/webui/web_ui.h" | 22 #include "content/browser/webui/web_ui.h" |
| 24 #include "grit/chromium_strings.h" | 23 #include "grit/chromium_strings.h" |
| 25 #include "grit/generated_resources.h" | 24 #include "grit/generated_resources.h" |
| 26 #include "ui/base/l10n/l10n_util.h" | 25 #include "ui/base/l10n/l10n_util.h" |
| 27 #include "ui/gfx/rect.h" | 26 #include "ui/gfx/rect.h" |
| 28 #include "views/layout/fill_layout.h" | 27 #include "views/layout/fill_layout.h" |
| 29 #include "views/widget/widget.h" | 28 #include "views/widget/widget.h" |
| 30 | 29 |
| 31 namespace { | 30 namespace { |
| 32 | 31 |
| 33 // Network screen id. | 32 // Network screen id. |
| 34 const char kNetworkScreen[] = "connect"; | 33 const char kNetworkScreen[] = "connect"; |
| 35 | 34 |
| 36 // JS API callbacks names. | 35 // JS API callbacks names. |
| 37 const char kJsApiNetworkOnExit[] = "networkOnExit"; | 36 const char kJsApiNetworkOnExit[] = "networkOnExit"; |
| 38 const char kJsApiNetworkOnLanguageChanged[] = "networkOnLanguageChanged"; | 37 const char kJsApiNetworkOnLanguageChanged[] = "networkOnLanguageChanged"; |
| 39 const char kJsApiNetworkOnInputMethodChanged[] = "networkOnInputMethodChanged"; | 38 const char kJsApiNetworkOnInputMethodChanged[] = "networkOnInputMethodChanged"; |
| 40 const char kJsApiNetworkControlPosition[] = "networkControlPosition"; | 39 const char kJsApiNetworkItemChosen[] = "networkItemChosen"; |
| 41 | |
| 42 // Width/height of the network control window. | |
| 43 const int kNetworkControlWidth = 250; | |
| 44 const int kNetworkControlHeight = 25; | |
| 45 | |
| 46 // Offsets for the network dropdown control menu. | |
| 47 const int kMenuHorizontalOffset = -3; | |
| 48 const int kMenuVerticalOffset = -1; | |
| 49 | |
| 50 // Initializes menu button default properties. | |
| 51 static void InitMenuButtonProperties(views::MenuButton* menu_button) { | |
| 52 menu_button->set_focusable(true); | |
| 53 menu_button->SetEnabledColor(SK_ColorBLACK); | |
| 54 menu_button->SetHighlightColor(SK_ColorBLACK); | |
| 55 menu_button->SetHoverColor(SK_ColorBLACK); | |
| 56 static_cast<views::TextButtonBorder*>(menu_button->border())-> | |
| 57 copy_normal_set_to_hot_set(); | |
| 58 menu_button->set_animate_on_state_change(false); | |
| 59 // Menu is positioned by bottom right corner of the MenuButton. | |
| 60 menu_button->set_menu_offset(kMenuHorizontalOffset, kMenuVerticalOffset); | |
| 61 } | |
| 62 | 40 |
| 63 } // namespace | 41 } // namespace |
| 64 | 42 |
| 65 namespace chromeos { | 43 namespace chromeos { |
| 66 | 44 |
| 67 // NetworkScreenHandler, public: ----------------------------------------------- | 45 // NetworkScreenHandler, public: ----------------------------------------------- |
| 68 | 46 |
| 69 NetworkScreenHandler::NetworkScreenHandler() | 47 NetworkScreenHandler::NetworkScreenHandler() |
| 70 : network_window_(NULL), | 48 : screen_(NULL), |
| 71 screen_(NULL), | |
| 72 is_continue_enabled_(false), | 49 is_continue_enabled_(false), |
| 73 show_on_init_(false) { | 50 show_on_init_(false) { |
| 74 } | 51 } |
| 75 | 52 |
| 76 NetworkScreenHandler::~NetworkScreenHandler() { | 53 NetworkScreenHandler::~NetworkScreenHandler() { |
| 77 ClearErrors(); | 54 ClearErrors(); |
| 78 CloseNetworkWindow(); | |
| 79 } | 55 } |
| 80 | 56 |
| 81 // NetworkScreenHandler, NetworkScreenActor implementation: -------------------- | 57 // NetworkScreenHandler, NetworkScreenActor implementation: -------------------- |
| 82 | 58 |
| 83 void NetworkScreenHandler::SetDelegate(NetworkScreenActor::Delegate* screen) { | 59 void NetworkScreenHandler::SetDelegate(NetworkScreenActor::Delegate* screen) { |
| 84 screen_ = screen; | 60 screen_ = screen; |
| 85 } | 61 } |
| 86 | 62 |
| 87 void NetworkScreenHandler::PrepareToShow() { | 63 void NetworkScreenHandler::PrepareToShow() { |
| 88 } | 64 } |
| 89 | 65 |
| 90 void NetworkScreenHandler::Show() { | 66 void NetworkScreenHandler::Show() { |
| 91 if (!page_is_ready()) { | 67 if (!page_is_ready()) { |
| 92 show_on_init_ = true; | 68 show_on_init_ = true; |
| 93 return; | 69 return; |
| 94 } | 70 } |
| 71 |
| 72 DCHECK(!dropdown_.get()); |
| 73 dropdown_.reset(new NetworkDropdown( |
| 74 web_ui_, WebUILoginDisplay::GetLoginWindow()->GetNativeWindow())); |
| 75 |
| 95 ShowScreen(kNetworkScreen, NULL); | 76 ShowScreen(kNetworkScreen, NULL); |
| 96 } | 77 } |
| 97 | 78 |
| 98 void NetworkScreenHandler::Hide() { | 79 void NetworkScreenHandler::Hide() { |
| 99 CloseNetworkWindow(); | 80 dropdown_.reset(); |
| 100 } | 81 } |
| 101 | 82 |
| 102 void NetworkScreenHandler::ShowError(const string16& message) { | 83 void NetworkScreenHandler::ShowError(const string16& message) { |
| 103 // scoped_ptr<Value> message_value(Value::CreateStringValue(message)); | 84 // scoped_ptr<Value> message_value(Value::CreateStringValue(message)); |
| 104 // web_ui_->CallJavascriptFunction("cr.ui.Oobe.showError", *message_value); | 85 // web_ui_->CallJavascriptFunction("cr.ui.Oobe.showError", *message_value); |
| 105 } | 86 } |
| 106 | 87 |
| 107 void NetworkScreenHandler::ClearErrors() { | 88 void NetworkScreenHandler::ClearErrors() { |
| 108 // web_ui_->CallJavascriptFunction("cr.ui.Oobe.clearErrors"); | 89 // web_ui_->CallJavascriptFunction("cr.ui.Oobe.clearErrors"); |
| 109 } | 90 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 EnableContinue(is_continue_enabled_); | 139 EnableContinue(is_continue_enabled_); |
| 159 if (show_on_init_) { | 140 if (show_on_init_) { |
| 160 show_on_init_ = false; | 141 show_on_init_ = false; |
| 161 Show(); | 142 Show(); |
| 162 } | 143 } |
| 163 } | 144 } |
| 164 | 145 |
| 165 // NetworkScreenHandler, WebUIMessageHandler implementation: ------------------- | 146 // NetworkScreenHandler, WebUIMessageHandler implementation: ------------------- |
| 166 | 147 |
| 167 void NetworkScreenHandler::RegisterMessages() { | 148 void NetworkScreenHandler::RegisterMessages() { |
| 168 web_ui_->RegisterMessageCallback(kJsApiNetworkControlPosition, | |
| 169 NewCallback(this, &NetworkScreenHandler::HandleNetworkControlPosition)); | |
| 170 web_ui_->RegisterMessageCallback(kJsApiNetworkOnExit, | 149 web_ui_->RegisterMessageCallback(kJsApiNetworkOnExit, |
| 171 NewCallback(this, &NetworkScreenHandler::HandleOnExit)); | 150 NewCallback(this, &NetworkScreenHandler::HandleOnExit)); |
| 172 web_ui_->RegisterMessageCallback(kJsApiNetworkOnLanguageChanged, | 151 web_ui_->RegisterMessageCallback(kJsApiNetworkOnLanguageChanged, |
| 173 NewCallback(this, &NetworkScreenHandler::HandleOnLanguageChanged)); | 152 NewCallback(this, &NetworkScreenHandler::HandleOnLanguageChanged)); |
| 174 web_ui_->RegisterMessageCallback(kJsApiNetworkOnInputMethodChanged, | 153 web_ui_->RegisterMessageCallback(kJsApiNetworkOnInputMethodChanged, |
| 175 NewCallback(this, &NetworkScreenHandler::HandleOnInputMethodChanged)); | 154 NewCallback(this, &NetworkScreenHandler::HandleOnInputMethodChanged)); |
| 155 web_ui_->RegisterMessageCallback(kJsApiNetworkItemChosen, |
| 156 NewCallback(this, &NetworkScreenHandler::HandleNetworkItemChosen)); |
| 157 |
| 176 } | 158 } |
| 177 | 159 |
| 178 // NetworkScreenHandler, private: ---------------------------------------------- | 160 // NetworkScreenHandler, private: ---------------------------------------------- |
| 179 | 161 |
| 180 void NetworkScreenHandler::HandleNetworkControlPosition(const ListValue* args) { | |
| 181 const size_t kParamCount = 2; | |
| 182 double x, y; | |
| 183 if (args->GetSize() != kParamCount || | |
| 184 !args->GetDouble(0, &x) || | |
| 185 !args->GetDouble(1, &y)) { | |
| 186 NOTREACHED(); | |
| 187 return; | |
| 188 } | |
| 189 network_control_pos_.SetPoint(static_cast<int>(x), static_cast<int>(y)); | |
| 190 CreateOrUpdateNetworkWindow(); | |
| 191 } | |
| 192 | |
| 193 void NetworkScreenHandler::HandleOnExit(const ListValue* args) { | 162 void NetworkScreenHandler::HandleOnExit(const ListValue* args) { |
| 194 ClearErrors(); | 163 ClearErrors(); |
| 195 screen_->OnContinuePressed(); | 164 screen_->OnContinuePressed(); |
| 196 } | 165 } |
| 197 | 166 |
| 198 void NetworkScreenHandler::HandleOnLanguageChanged(const ListValue* args) { | 167 void NetworkScreenHandler::HandleOnLanguageChanged(const ListValue* args) { |
| 199 DCHECK(args->GetSize() == 1); | 168 DCHECK(args->GetSize() == 1); |
| 200 std::string locale; | 169 std::string locale; |
| 201 if (!args->GetString(0, &locale)) | 170 if (!args->GetString(0, &locale)) |
| 202 NOTREACHED(); | 171 NOTREACHED(); |
| 203 | 172 |
| 204 // TODO(altimofeev): make language change async. | 173 // TODO(altimofeev): make language change async. |
| 205 LanguageSwitchMenu::SwitchLanguageAndEnableKeyboardLayouts(locale); | 174 LanguageSwitchMenu::SwitchLanguageAndEnableKeyboardLayouts(locale); |
| 206 | 175 |
| 207 DictionaryValue localized_strings; | 176 DictionaryValue localized_strings; |
| 208 static_cast<OobeUI*>(web_ui_)->GetLocalizedStrings(&localized_strings); | 177 static_cast<OobeUI*>(web_ui_)->GetLocalizedStrings(&localized_strings); |
| 209 web_ui_->CallJavascriptFunction("cr.ui.Oobe.reloadContent", | 178 web_ui_->CallJavascriptFunction("cr.ui.Oobe.reloadContent", |
| 210 localized_strings); | 179 localized_strings); |
| 211 } | 180 } |
| 212 | 181 |
| 213 void NetworkScreenHandler::HandleOnInputMethodChanged(const ListValue* args) { | 182 void NetworkScreenHandler::HandleOnInputMethodChanged(const ListValue* args) { |
| 214 DCHECK(args->GetSize() == 1); | 183 DCHECK(args->GetSize() == 1); |
| 215 std::string id; | 184 std::string id; |
| 216 if (!args->GetString(0, &id)) | 185 if (!args->GetString(0, &id)) |
| 217 NOTREACHED(); | 186 NOTREACHED(); |
| 218 input_method::InputMethodManager::GetInstance()->ChangeInputMethod(id); | 187 input_method::InputMethodManager::GetInstance()->ChangeInputMethod(id); |
| 219 } | 188 } |
| 220 | 189 |
| 190 void NetworkScreenHandler::HandleNetworkItemChosen( |
| 191 const base::ListValue* args) { |
| 192 DCHECK(args->GetSize() == 1); |
| 193 double id; |
| 194 if (!args->GetDouble(0, &id)) |
| 195 NOTREACHED(); |
| 196 DCHECK(dropdown_.get()); |
| 197 dropdown_->OnItemChosen(static_cast<int>(id)); |
| 198 } |
| 199 |
| 221 ListValue* NetworkScreenHandler::GetLanguageList() { | 200 ListValue* NetworkScreenHandler::GetLanguageList() { |
| 222 const std::string app_locale = g_browser_process->GetApplicationLocale(); | 201 const std::string app_locale = g_browser_process->GetApplicationLocale(); |
| 223 // GetSupportedInputMethods() never returns NULL. | 202 // GetSupportedInputMethods() never returns NULL. |
| 224 scoped_ptr<input_method::InputMethodDescriptors> descriptors( | 203 scoped_ptr<input_method::InputMethodDescriptors> descriptors( |
| 225 input_method::GetSupportedInputMethods()); | 204 input_method::GetSupportedInputMethods()); |
| 226 ListValue* languages_list = | 205 ListValue* languages_list = |
| 227 CrosLanguageOptionsHandler::GetLanguageList(*descriptors); | 206 CrosLanguageOptionsHandler::GetLanguageList(*descriptors); |
| 228 for (size_t i = 0; i < languages_list->GetSize(); ++i) { | 207 for (size_t i = 0; i < languages_list->GetSize(); ++i) { |
| 229 DictionaryValue* language_info = NULL; | 208 DictionaryValue* language_info = NULL; |
| 230 if (!languages_list->GetDictionary(i, &language_info)) | 209 if (!languages_list->GetDictionary(i, &language_info)) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 261 input_method->SetString("value", input_methods->at(i).id()); | 240 input_method->SetString("value", input_methods->at(i).id()); |
| 262 input_method->SetString("title", | 241 input_method->SetString("title", |
| 263 WideToUTF16(InputMethodMenu::GetTextForMenu(input_methods->at(i)))); | 242 WideToUTF16(InputMethodMenu::GetTextForMenu(input_methods->at(i)))); |
| 264 input_method->SetBoolean("selected", | 243 input_method->SetBoolean("selected", |
| 265 input_methods->at(i).id() == current_input_method_id); | 244 input_methods->at(i).id() == current_input_method_id); |
| 266 input_methods_list->Append(input_method); | 245 input_methods_list->Append(input_method); |
| 267 } | 246 } |
| 268 return input_methods_list; | 247 return input_methods_list; |
| 269 } | 248 } |
| 270 | 249 |
| 271 void NetworkScreenHandler::CreateOrUpdateNetworkWindow() { | |
| 272 views::Widget* login_window = WebUILoginDisplay::GetLoginWindow(); | |
| 273 gfx::Rect login_bounds = login_window->GetWindowScreenBounds(); | |
| 274 gfx::Rect bounds(login_bounds.x() + network_control_pos_.x(), | |
| 275 login_bounds.y() + network_control_pos_.y(), | |
| 276 kNetworkControlWidth, kNetworkControlHeight); | |
| 277 if (!network_window_) { | |
| 278 views::Widget::InitParams widget_params( | |
| 279 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); | |
| 280 widget_params.bounds = bounds; | |
| 281 widget_params.double_buffer = true; | |
| 282 widget_params.parent = login_window->GetNativeView(); | |
| 283 network_window_ = new views::Widget; | |
| 284 network_window_->Init(widget_params); | |
| 285 std::vector<int> params; | |
| 286 chromeos::WmIpc::instance()->SetWindowType( | |
| 287 network_window_->GetNativeView(), | |
| 288 chromeos::WM_IPC_WINDOW_CHROME_INFO_BUBBLE, | |
| 289 ¶ms); | |
| 290 NetworkDropdownButton* button = | |
| 291 new NetworkDropdownButton(false /* not a browser mode */, | |
| 292 login_window->GetNativeWindow(), | |
| 293 true /* show proxy settings in menu */); | |
| 294 InitMenuButtonProperties(button); | |
| 295 network_window_->SetContentsView(button); | |
| 296 network_window_->Show(); | |
| 297 } else { | |
| 298 network_window_->SetBounds(bounds); | |
| 299 } | |
| 300 } | |
| 301 | |
| 302 void NetworkScreenHandler::CloseNetworkWindow() { | |
| 303 if (network_window_) | |
| 304 network_window_->Close(); | |
| 305 network_window_ = NULL; | |
| 306 } | |
| 307 | |
| 308 } // namespace chromeos | 250 } // namespace chromeos |
| OLD | NEW |