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 |