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

Side by Side Diff: chrome/browser/chromeos/system/ash_system_tray_delegate.cc

Issue 9664056: ash uber tray: Add the detailed network popup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/chromeos/system/ash_system_tray_delegate.h" 5 #include "chrome/browser/chromeos/system/ash_system_tray_delegate.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h"
8 #include "ash/system/audio/audio_controller.h" 9 #include "ash/system/audio/audio_controller.h"
9 #include "ash/system/brightness/brightness_controller.h" 10 #include "ash/system/brightness/brightness_controller.h"
10 #include "ash/system/network/network_controller.h" 11 #include "ash/system/network/network_controller.h"
11 #include "ash/system/power/power_status_controller.h" 12 #include "ash/system/power/power_status_controller.h"
12 #include "ash/system/tray/system_tray.h" 13 #include "ash/system/tray/system_tray.h"
13 #include "ash/system/tray/system_tray_delegate.h" 14 #include "ash/system/tray/system_tray_delegate.h"
14 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/chromeos/audio/audio_handler.h" 17 #include "chrome/browser/chromeos/audio/audio_handler.h"
16 #include "chrome/browser/chromeos/cros/cros_library.h" 18 #include "chrome/browser/chromeos/cros/cros_library.h"
17 #include "chrome/browser/chromeos/cros/network_library.h" 19 #include "chrome/browser/chromeos/cros/network_library.h"
18 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" 20 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
19 #include "chrome/browser/chromeos/dbus/power_manager_client.h" 21 #include "chrome/browser/chromeos/dbus/power_manager_client.h"
22 #include "chrome/browser/chromeos/login/login_html_dialog.h"
23 #include "chrome/browser/chromeos/login/proxy_settings_dialog.h"
20 #include "chrome/browser/chromeos/login/user.h" 24 #include "chrome/browser/chromeos/login/user.h"
21 #include "chrome/browser/chromeos/login/user_manager.h" 25 #include "chrome/browser/chromeos/login/user_manager.h"
26 #include "chrome/browser/chromeos/status/network_menu.h"
22 #include "chrome/browser/chromeos/status/network_menu_icon.h" 27 #include "chrome/browser/chromeos/status/network_menu_icon.h"
23 #include "chrome/browser/ui/browser.h" 28 #include "chrome/browser/ui/browser.h"
24 #include "chrome/browser/ui/browser_list.h" 29 #include "chrome/browser/ui/browser_list.h"
25 #include "chrome/common/chrome_notification_types.h" 30 #include "chrome/common/chrome_notification_types.h"
26 #include "content/public/browser/notification_observer.h" 31 #include "content/public/browser/notification_observer.h"
27 #include "content/public/browser/notification_service.h" 32 #include "content/public/browser/notification_service.h"
33 #include "grit/generated_resources.h"
34 #include "ui/base/l10n/l10n_util.h"
28 35
29 namespace chromeos { 36 namespace chromeos {
30 37
31 namespace { 38 namespace {
32 39
40 ash::NetworkIconInfo CreateNetworkIconInfo(const Network* network,
41 NetworkMenuIcon* network_icon) {
42 ash::NetworkIconInfo info;
43 info.name = UTF8ToUTF16(network->name());
44 info.image = network_icon->GetBitmap(network, NetworkMenuIcon::SIZE_SMALL);
45 info.unique_id = network->unique_id();
46 return info;
47 }
48
33 class SystemTrayDelegate : public ash::SystemTrayDelegate, 49 class SystemTrayDelegate : public ash::SystemTrayDelegate,
34 public AudioHandler::VolumeObserver, 50 public AudioHandler::VolumeObserver,
35 public PowerManagerClient::Observer, 51 public PowerManagerClient::Observer,
36 public NetworkMenuIcon::Delegate, 52 public NetworkMenuIcon::Delegate,
53 public NetworkMenu::Delegate,
37 public NetworkLibrary::NetworkManagerObserver, 54 public NetworkLibrary::NetworkManagerObserver,
38 public NetworkLibrary::NetworkObserver, 55 public NetworkLibrary::NetworkObserver,
39 public NetworkLibrary::CellularDataPlanObserver, 56 public NetworkLibrary::CellularDataPlanObserver,
40 public content::NotificationObserver { 57 public content::NotificationObserver {
41 public: 58 public:
42 explicit SystemTrayDelegate(ash::SystemTray* tray) 59 explicit SystemTrayDelegate(ash::SystemTray* tray)
43 : tray_(tray), 60 : tray_(tray),
44 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST( 61 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST(
45 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))) { 62 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
63 network_icon_large_(ALLOW_THIS_IN_INITIALIZER_LIST(
64 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
65 network_menu_(ALLOW_THIS_IN_INITIALIZER_LIST(new NetworkMenu(this))) {
46 AudioHandler::GetInstance()->AddVolumeObserver(this); 66 AudioHandler::GetInstance()->AddVolumeObserver(this);
47 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); 67 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
48 DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate( 68 DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate(
49 PowerManagerClient::UPDATE_USER); 69 PowerManagerClient::UPDATE_USER);
50 70
51 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); 71 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
52 crosnet->AddNetworkManagerObserver(this); 72 crosnet->AddNetworkManagerObserver(this);
53 OnNetworkManagerChanged(crosnet); 73 OnNetworkManagerChanged(crosnet);
54 crosnet->AddCellularDataPlanObserver(this); 74 crosnet->AddCellularDataPlanObserver(this);
55 75
56 registrar_.Add(this, 76 registrar_.Add(this,
57 chrome::NOTIFICATION_LOGIN_USER_CHANGED, 77 chrome::NOTIFICATION_LOGIN_USER_CHANGED,
58 content::NotificationService::AllSources()); 78 content::NotificationService::AllSources());
79
80 network_icon_large_->SetResourceSize(NetworkMenuIcon::SIZE_LARGE);
59 } 81 }
60 82
61 virtual ~SystemTrayDelegate() { 83 virtual ~SystemTrayDelegate() {
62 AudioHandler* audiohandler = AudioHandler::GetInstance(); 84 AudioHandler* audiohandler = AudioHandler::GetInstance();
63 if (audiohandler) 85 if (audiohandler)
64 audiohandler->RemoveVolumeObserver(this); 86 audiohandler->RemoveVolumeObserver(this);
65 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); 87 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
66 } 88 }
67 89
68 // Overridden from ash::SystemTrayDelegate: 90 // Overridden from ash::SystemTrayDelegate:
(...skipping 14 matching lines...) Expand all
83 if (!manager->IsUserLoggedIn()) 105 if (!manager->IsUserLoggedIn())
84 return ash::user::LOGGED_IN_NONE; 106 return ash::user::LOGGED_IN_NONE;
85 if (manager->IsCurrentUserOwner()) 107 if (manager->IsCurrentUserOwner())
86 return ash::user::LOGGED_IN_OWNER; 108 return ash::user::LOGGED_IN_OWNER;
87 if (manager->IsLoggedInAsGuest()) 109 if (manager->IsLoggedInAsGuest())
88 return ash::user::LOGGED_IN_GUEST; 110 return ash::user::LOGGED_IN_GUEST;
89 return ash::user::LOGGED_IN_USER; 111 return ash::user::LOGGED_IN_USER;
90 } 112 }
91 113
92 virtual void ShowSettings() OVERRIDE { 114 virtual void ShowSettings() OVERRIDE {
93 BrowserList::GetLastActive()->OpenOptionsDialog(); 115 Browser* browser = BrowserList::GetLastActive();
116 if (browser)
117 browser->OpenOptionsDialog();
94 } 118 }
95 119
96 virtual void ShowDateSettings() OVERRIDE { 120 virtual void ShowDateSettings() OVERRIDE {
97 BrowserList::GetLastActive()->OpenAdvancedOptionsDialog(); 121 Browser* browser = BrowserList::GetLastActive();
122 if (browser)
123 browser->OpenAdvancedOptionsDialog();
124 }
125
126 virtual void ShowNetworkSettings() OVERRIDE {
127 Browser* browser = BrowserList::GetLastActive();
128 if (browser)
129 browser->OpenInternetOptionsDialog();
98 } 130 }
99 131
100 virtual void ShowHelp() OVERRIDE { 132 virtual void ShowHelp() OVERRIDE {
101 BrowserList::GetLastActive()->ShowHelpTab(); 133 Browser* browser = BrowserList::GetLastActive();
134 if (browser)
135 browser->ShowHelpTab();
102 } 136 }
103 137
104 virtual bool IsAudioMuted() const OVERRIDE { 138 virtual bool IsAudioMuted() const OVERRIDE {
105 return AudioHandler::GetInstance()->IsMuted(); 139 return AudioHandler::GetInstance()->IsMuted();
106 } 140 }
107 141
108 virtual void SetAudioMuted(bool muted) OVERRIDE { 142 virtual void SetAudioMuted(bool muted) OVERRIDE {
109 return AudioHandler::GetInstance()->SetMuted(muted); 143 return AudioHandler::GetInstance()->SetMuted(muted);
110 } 144 }
111 145
(...skipping 11 matching lines...) Expand all
123 157
124 virtual void SignOut() OVERRIDE { 158 virtual void SignOut() OVERRIDE {
125 BrowserList::AttemptUserExit(); 159 BrowserList::AttemptUserExit();
126 } 160 }
127 161
128 virtual void RequestLockScreen() OVERRIDE { 162 virtual void RequestLockScreen() OVERRIDE {
129 DBusThreadManager::Get()->GetPowerManagerClient()-> 163 DBusThreadManager::Get()->GetPowerManagerClient()->
130 NotifyScreenLockRequested(); 164 NotifyScreenLockRequested();
131 } 165 }
132 166
133 virtual ash::NetworkIconInfo GetMostRelevantNetworkIcon() OVERRIDE { 167 virtual ash::NetworkIconInfo GetMostRelevantNetworkIcon(bool large) OVERRIDE {
134 ash::NetworkIconInfo info; 168 ash::NetworkIconInfo info;
135 info.image = network_icon_->GetIconAndText(&info.description); 169 info.image = !large ? network_icon_->GetIconAndText(&info.description) :
170 network_icon_large_->GetIconAndText(&info.description);
136 return info; 171 return info;
137 } 172 }
138 173
174 virtual void GetAvailableNetworks(
175 std::vector<ash::NetworkIconInfo>* list) OVERRIDE {
176 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
177 crosnet->RequestNetworkScan();
178
179 // Ethernet.
180 if (crosnet->ethernet_enabled()) {
181 const EthernetNetwork* ethernet_network = crosnet->ethernet_network();
182 if (ethernet_network) {
183 ash::NetworkIconInfo info;
184 info.image = network_icon_->GetBitmap(ethernet_network,
185 NetworkMenuIcon::SIZE_SMALL);
186 if (!ethernet_network->name().empty())
187 info.name = UTF8ToUTF16(ethernet_network->name());
188 else
189 info.name =
190 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
191 info.unique_id = ethernet_network->unique_id();
192 list->push_back(info);
193 }
194 }
195
196 // Wifi.
197 if (crosnet->wifi_available() && crosnet->wifi_enabled()) {
198 const WifiNetworkVector& wifi = crosnet->wifi_networks();
199 for (size_t i = 0; i < wifi.size(); ++i)
200 list->push_back(CreateNetworkIconInfo(wifi[i], network_icon_.get()));
201 }
202
203 // Cellular.
204 if (crosnet->cellular_available() && crosnet->cellular_enabled()) {
205 const CellularNetworkVector& cell = crosnet->cellular_networks();
206 for (size_t i = 0; i < cell.size(); ++i)
207 list->push_back(CreateNetworkIconInfo(cell[i], network_icon_.get()));
208 }
209
210 // VPN (only if logged in).
211 if (GetUserLoginStatus() == ash::user::LOGGED_IN_NONE)
212 return;
213 if (crosnet->connected_network() || crosnet->virtual_network_connected()) {
214 const VirtualNetworkVector& vpns = crosnet->virtual_networks();
215 for (size_t i = 0; i < vpns.size(); ++i)
216 list->push_back(CreateNetworkIconInfo(vpns[i], network_icon_.get()));
217 }
218 }
219
220 virtual void ConnectToNetwork(const std::string& network_id) OVERRIDE {
221 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
222 Network* network = crosnet->FindNetworkByUniqueId(network_id);
223 if (network)
224 network_menu_->ConnectToNetwork(network);
225 }
226
227 virtual void ToggleAirplaneMode() OVERRIDE {
228 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
229 crosnet->EnableOfflineMode(!crosnet->offline_mode());
230 }
231
232 virtual void ChangeProxySettings() OVERRIDE {
233 CHECK(GetUserLoginStatus() == ash::user::LOGGED_IN_NONE);
234 if (!proxy_settings_dialog_.get()) {
Nikita (slow) 2012/03/13 15:36:33 #include "chrome/browser/chromeos/login/base_login
sadrul 2012/03/13 15:48:39 Nice! Done. Thanks!
235 ash::Shell* shell = ash::Shell::GetInstance();
236 proxy_settings_dialog_.reset(new ProxySettingsDialog(NULL, shell->
237 GetContainer(ash::internal::kShellWindowId_SettingBubbleContainer)));
238 }
239 proxy_settings_dialog_->Show();
240 }
241
139 private: 242 private:
140 void NotifyRefreshNetwork() { 243 void NotifyRefreshNetwork() {
141 ash::NetworkController* controller = 244 ash::NetworkController* controller =
142 ash::Shell::GetInstance()->network_controller(); 245 ash::Shell::GetInstance()->network_controller();
143 if (controller) { 246 if (controller) {
144 ash::NetworkIconInfo info; 247 ash::NetworkIconInfo info;
145 info.image = network_icon_->GetIconAndText(&info.description); 248 info.image = network_icon_->GetIconAndText(&info.description);
146 controller->OnNetworkRefresh(info); 249 controller->OnNetworkRefresh(info);
147 } 250 }
148 } 251 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 293
191 virtual void UnlockScreen() OVERRIDE { 294 virtual void UnlockScreen() OVERRIDE {
192 } 295 }
193 296
194 virtual void UnlockScreenFailed() OVERRIDE { 297 virtual void UnlockScreenFailed() OVERRIDE {
195 } 298 }
196 299
197 // TODO(sad): Override more from PowerManagerClient::Observer here (e.g. 300 // TODO(sad): Override more from PowerManagerClient::Observer here (e.g.
198 // PowerButtonStateChanged etc.). 301 // PowerButtonStateChanged etc.).
199 302
200 // Overridden from StatusMenuIcon::Delegate. 303 // Overridden from NetworkMenuIcon::Delegate.
201 virtual void NetworkMenuIconChanged() OVERRIDE { 304 virtual void NetworkMenuIconChanged() OVERRIDE {
202 NotifyRefreshNetwork(); 305 NotifyRefreshNetwork();
203 } 306 }
204 307
308 // Overridden from NetworkMenu::Delegate.
309 virtual views::MenuButton* GetMenuButton() OVERRIDE {
310 return NULL;
311 }
312
313 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE {
314 return NULL;
315 }
316
317 virtual void OpenButtonOptions() OVERRIDE {
318 }
319
320 virtual bool ShouldOpenButtonOptions() const OVERRIDE {
321 return false;
322 }
323
205 // Overridden from NetworkLibrary::NetworkManagerObserver. 324 // Overridden from NetworkLibrary::NetworkManagerObserver.
206 virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE { 325 virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE {
207 RefreshNetworkObserver(crosnet); 326 RefreshNetworkObserver(crosnet);
208 RefreshNetworkDeviceObserver(crosnet); 327 RefreshNetworkDeviceObserver(crosnet);
209 328
210 // TODO: ShowOptionalMobileDataPromoNotification? 329 // TODO: ShowOptionalMobileDataPromoNotification?
211 330
212 NotifyRefreshNetwork(); 331 NotifyRefreshNetwork();
213 } 332 }
214 333
(...skipping 17 matching lines...) Expand all
232 tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); 351 tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus());
233 break; 352 break;
234 } 353 }
235 default: 354 default:
236 NOTREACHED(); 355 NOTREACHED();
237 } 356 }
238 } 357 }
239 358
240 ash::SystemTray* tray_; 359 ash::SystemTray* tray_;
241 scoped_ptr<NetworkMenuIcon> network_icon_; 360 scoped_ptr<NetworkMenuIcon> network_icon_;
361 scoped_ptr<NetworkMenuIcon> network_icon_large_;
362 scoped_ptr<NetworkMenu> network_menu_;
242 content::NotificationRegistrar registrar_; 363 content::NotificationRegistrar registrar_;
243 std::string cellular_device_path_; 364 std::string cellular_device_path_;
244 std::string active_network_path_; 365 std::string active_network_path_;
366 scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_;
245 367
246 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); 368 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate);
247 }; 369 };
248 370
249 } // namespace 371 } // namespace
250 372
251 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) { 373 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) {
252 return new chromeos::SystemTrayDelegate(tray); 374 return new chromeos::SystemTrayDelegate(tray);
253 } 375 }
254 376
255 } // namespace chromeos 377 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698