Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc

Issue 7520037: [cros] Network dropdown button in WebUI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove debug Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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 &params);
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
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/network_screen_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698