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

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 "ash/system/user/update_controller.h" 15 #include "ash/system/user/update_controller.h"
15 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/utf_string_conversions.h"
16 #include "chrome/browser/chromeos/audio/audio_handler.h" 18 #include "chrome/browser/chromeos/audio/audio_handler.h"
17 #include "chrome/browser/chromeos/cros/cros_library.h" 19 #include "chrome/browser/chromeos/cros/cros_library.h"
18 #include "chrome/browser/chromeos/cros/network_library.h" 20 #include "chrome/browser/chromeos/cros/network_library.h"
19 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" 21 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
20 #include "chrome/browser/chromeos/dbus/power_manager_client.h" 22 #include "chrome/browser/chromeos/dbus/power_manager_client.h"
23 #include "chrome/browser/chromeos/login/base_login_display_host.h"
24 #include "chrome/browser/chromeos/login/login_display_host.h"
21 #include "chrome/browser/chromeos/login/user.h" 25 #include "chrome/browser/chromeos/login/user.h"
22 #include "chrome/browser/chromeos/login/user_manager.h" 26 #include "chrome/browser/chromeos/login/user_manager.h"
27 #include "chrome/browser/chromeos/status/network_menu.h"
23 #include "chrome/browser/chromeos/status/network_menu_icon.h" 28 #include "chrome/browser/chromeos/status/network_menu_icon.h"
29 #include "chrome/browser/profiles/profile_manager.h"
24 #include "chrome/browser/ui/browser.h" 30 #include "chrome/browser/ui/browser.h"
25 #include "chrome/browser/ui/browser_list.h" 31 #include "chrome/browser/ui/browser_list.h"
26 #include "chrome/browser/upgrade_detector.h" 32 #include "chrome/browser/upgrade_detector.h"
27 #include "chrome/common/chrome_notification_types.h" 33 #include "chrome/common/chrome_notification_types.h"
28 #include "content/public/browser/notification_observer.h" 34 #include "content/public/browser/notification_observer.h"
29 #include "content/public/browser/notification_service.h" 35 #include "content/public/browser/notification_service.h"
36 #include "grit/generated_resources.h"
37 #include "ui/base/l10n/l10n_util.h"
30 38
31 namespace chromeos { 39 namespace chromeos {
32 40
33 namespace { 41 namespace {
34 42
43 ash::NetworkIconInfo CreateNetworkIconInfo(const Network* network,
44 NetworkMenuIcon* network_icon) {
45 ash::NetworkIconInfo info;
46 info.name = UTF8ToUTF16(network->name());
47 info.image = network_icon->GetBitmap(network, NetworkMenuIcon::SIZE_SMALL);
48 info.unique_id = network->unique_id();
49 return info;
50 }
51
35 class SystemTrayDelegate : public ash::SystemTrayDelegate, 52 class SystemTrayDelegate : public ash::SystemTrayDelegate,
36 public AudioHandler::VolumeObserver, 53 public AudioHandler::VolumeObserver,
37 public PowerManagerClient::Observer, 54 public PowerManagerClient::Observer,
38 public NetworkMenuIcon::Delegate, 55 public NetworkMenuIcon::Delegate,
56 public NetworkMenu::Delegate,
39 public NetworkLibrary::NetworkManagerObserver, 57 public NetworkLibrary::NetworkManagerObserver,
40 public NetworkLibrary::NetworkObserver, 58 public NetworkLibrary::NetworkObserver,
41 public NetworkLibrary::CellularDataPlanObserver, 59 public NetworkLibrary::CellularDataPlanObserver,
42 public content::NotificationObserver { 60 public content::NotificationObserver {
43 public: 61 public:
44 explicit SystemTrayDelegate(ash::SystemTray* tray) 62 explicit SystemTrayDelegate(ash::SystemTray* tray)
45 : tray_(tray), 63 : tray_(tray),
46 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST( 64 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST(
47 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))) { 65 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
66 network_icon_large_(ALLOW_THIS_IN_INITIALIZER_LIST(
67 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
68 network_menu_(ALLOW_THIS_IN_INITIALIZER_LIST(new NetworkMenu(this))) {
48 AudioHandler::GetInstance()->AddVolumeObserver(this); 69 AudioHandler::GetInstance()->AddVolumeObserver(this);
49 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); 70 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
50 DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate( 71 DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate(
51 PowerManagerClient::UPDATE_USER); 72 PowerManagerClient::UPDATE_USER);
52 73
53 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); 74 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
54 crosnet->AddNetworkManagerObserver(this); 75 crosnet->AddNetworkManagerObserver(this);
55 OnNetworkManagerChanged(crosnet); 76 OnNetworkManagerChanged(crosnet);
56 crosnet->AddCellularDataPlanObserver(this); 77 crosnet->AddCellularDataPlanObserver(this);
57 78
58 registrar_.Add(this, 79 registrar_.Add(this,
59 chrome::NOTIFICATION_LOGIN_USER_CHANGED, 80 chrome::NOTIFICATION_LOGIN_USER_CHANGED,
60 content::NotificationService::AllSources()); 81 content::NotificationService::AllSources());
61 registrar_.Add(this, 82 registrar_.Add(this,
62 chrome::NOTIFICATION_UPGRADE_RECOMMENDED, 83 chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
63 content::NotificationService::AllSources()); 84 content::NotificationService::AllSources());
85
86 network_icon_large_->SetResourceSize(NetworkMenuIcon::SIZE_LARGE);
64 } 87 }
65 88
66 virtual ~SystemTrayDelegate() { 89 virtual ~SystemTrayDelegate() {
67 AudioHandler* audiohandler = AudioHandler::GetInstance(); 90 AudioHandler* audiohandler = AudioHandler::GetInstance();
68 if (audiohandler) 91 if (audiohandler)
69 audiohandler->RemoveVolumeObserver(this); 92 audiohandler->RemoveVolumeObserver(this);
70 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); 93 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
71 } 94 }
72 95
73 // Overridden from ash::SystemTrayDelegate: 96 // Overridden from ash::SystemTrayDelegate:
(...skipping 23 matching lines...) Expand all
97 virtual bool SystemShouldUpgrade() const OVERRIDE { 120 virtual bool SystemShouldUpgrade() const OVERRIDE {
98 return UpgradeDetector::GetInstance()->notify_upgrade(); 121 return UpgradeDetector::GetInstance()->notify_upgrade();
99 } 122 }
100 123
101 virtual int GetSystemUpdateIconResource() const OVERRIDE { 124 virtual int GetSystemUpdateIconResource() const OVERRIDE {
102 return UpgradeDetector::GetInstance()->GetIconResourceID( 125 return UpgradeDetector::GetInstance()->GetIconResourceID(
103 UpgradeDetector::UPGRADE_ICON_TYPE_MENU_ICON); 126 UpgradeDetector::UPGRADE_ICON_TYPE_MENU_ICON);
104 } 127 }
105 128
106 virtual void ShowSettings() OVERRIDE { 129 virtual void ShowSettings() OVERRIDE {
107 BrowserList::GetLastActive()->OpenOptionsDialog(); 130 GetAppropriateBrowser()->OpenOptionsDialog();
108 } 131 }
109 132
110 virtual void ShowDateSettings() OVERRIDE { 133 virtual void ShowDateSettings() OVERRIDE {
111 BrowserList::GetLastActive()->OpenAdvancedOptionsDialog(); 134 GetAppropriateBrowser()->OpenAdvancedOptionsDialog();
135 }
136
137 virtual void ShowNetworkSettings() OVERRIDE {
138 GetAppropriateBrowser()->OpenInternetOptionsDialog();
112 } 139 }
113 140
114 virtual void ShowHelp() OVERRIDE { 141 virtual void ShowHelp() OVERRIDE {
115 BrowserList::GetLastActive()->ShowHelpTab(); 142 GetAppropriateBrowser()->ShowHelpTab();
116 } 143 }
117 144
118 virtual bool IsAudioMuted() const OVERRIDE { 145 virtual bool IsAudioMuted() const OVERRIDE {
119 return AudioHandler::GetInstance()->IsMuted(); 146 return AudioHandler::GetInstance()->IsMuted();
120 } 147 }
121 148
122 virtual void SetAudioMuted(bool muted) OVERRIDE { 149 virtual void SetAudioMuted(bool muted) OVERRIDE {
123 return AudioHandler::GetInstance()->SetMuted(muted); 150 return AudioHandler::GetInstance()->SetMuted(muted);
124 } 151 }
125 152
(...skipping 11 matching lines...) Expand all
137 164
138 virtual void SignOut() OVERRIDE { 165 virtual void SignOut() OVERRIDE {
139 BrowserList::AttemptUserExit(); 166 BrowserList::AttemptUserExit();
140 } 167 }
141 168
142 virtual void RequestLockScreen() OVERRIDE { 169 virtual void RequestLockScreen() OVERRIDE {
143 DBusThreadManager::Get()->GetPowerManagerClient()-> 170 DBusThreadManager::Get()->GetPowerManagerClient()->
144 NotifyScreenLockRequested(); 171 NotifyScreenLockRequested();
145 } 172 }
146 173
147 virtual ash::NetworkIconInfo GetMostRelevantNetworkIcon() OVERRIDE { 174 virtual ash::NetworkIconInfo GetMostRelevantNetworkIcon(bool large) OVERRIDE {
148 ash::NetworkIconInfo info; 175 ash::NetworkIconInfo info;
149 info.image = network_icon_->GetIconAndText(&info.description); 176 info.image = !large ? network_icon_->GetIconAndText(&info.description) :
177 network_icon_large_->GetIconAndText(&info.description);
150 return info; 178 return info;
151 } 179 }
152 180
181 virtual void GetAvailableNetworks(
182 std::vector<ash::NetworkIconInfo>* list) OVERRIDE {
183 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
184 crosnet->RequestNetworkScan();
185
186 // Ethernet.
187 if (crosnet->ethernet_enabled()) {
Nikita (slow) 2012/03/14 16:48:45 Please add crosnet->ethernet_available().
sadrul 2012/03/14 18:37:46 Done.
188 const EthernetNetwork* ethernet_network = crosnet->ethernet_network();
189 if (ethernet_network) {
190 ash::NetworkIconInfo info;
191 info.image = network_icon_->GetBitmap(ethernet_network,
192 NetworkMenuIcon::SIZE_SMALL);
193 if (!ethernet_network->name().empty())
194 info.name = UTF8ToUTF16(ethernet_network->name());
195 else
196 info.name =
197 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
198 info.unique_id = ethernet_network->unique_id();
199 list->push_back(info);
200 }
201 }
202
203 // Wifi.
204 if (crosnet->wifi_available() && crosnet->wifi_enabled()) {
205 const WifiNetworkVector& wifi = crosnet->wifi_networks();
206 for (size_t i = 0; i < wifi.size(); ++i)
207 list->push_back(CreateNetworkIconInfo(wifi[i], network_icon_.get()));
208 }
209
210 // Cellular.
211 if (crosnet->cellular_available() && crosnet->cellular_enabled()) {
212 const CellularNetworkVector& cell = crosnet->cellular_networks();
213 for (size_t i = 0; i < cell.size(); ++i)
214 list->push_back(CreateNetworkIconInfo(cell[i], network_icon_.get()));
Nikita (slow) 2012/03/14 16:48:45 We have special cases for cellular: 1. If cellular
sadrul 2012/03/14 18:37:46 Done.
215 }
216
217 // VPN (only if logged in).
218 if (GetUserLoginStatus() == ash::user::LOGGED_IN_NONE)
219 return;
220 if (crosnet->connected_network() || crosnet->virtual_network_connected()) {
221 const VirtualNetworkVector& vpns = crosnet->virtual_networks();
222 for (size_t i = 0; i < vpns.size(); ++i)
223 list->push_back(CreateNetworkIconInfo(vpns[i], network_icon_.get()));
224 }
225 }
226
227 virtual void ConnectToNetwork(const std::string& network_id) OVERRIDE {
228 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
229 Network* network = crosnet->FindNetworkByUniqueId(network_id);
230 if (network)
231 network_menu_->ConnectToNetwork(network);
232 }
233
234 virtual void ToggleAirplaneMode() OVERRIDE {
235 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
236 crosnet->EnableOfflineMode(!crosnet->offline_mode());
237 }
238
239 virtual void ChangeProxySettings() OVERRIDE {
240 CHECK(GetUserLoginStatus() == ash::user::LOGGED_IN_NONE);
241 BaseLoginDisplayHost::default_host()->OpenProxySettings();
242 }
243
153 private: 244 private:
245 // Returns the last active browser. If there is no such browser, creates a new
246 // browser window with an empty tab and returns it.
247 Browser* GetAppropriateBrowser() {
248 Browser* browser = BrowserList::GetLastActive();
249 if (!browser)
250 browser = Browser::NewEmptyWindow(ProfileManager::GetDefaultProfile());
251 return browser;
252 }
253
154 void NotifyRefreshNetwork() { 254 void NotifyRefreshNetwork() {
155 ash::NetworkController* controller = 255 ash::NetworkController* controller =
156 ash::Shell::GetInstance()->network_controller(); 256 ash::Shell::GetInstance()->network_controller();
157 if (controller) { 257 if (controller) {
158 ash::NetworkIconInfo info; 258 ash::NetworkIconInfo info;
159 info.image = network_icon_->GetIconAndText(&info.description); 259 info.image = network_icon_->GetIconAndText(&info.description);
160 controller->OnNetworkRefresh(info); 260 controller->OnNetworkRefresh(info);
161 } 261 }
162 } 262 }
163 263
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 304
205 virtual void UnlockScreen() OVERRIDE { 305 virtual void UnlockScreen() OVERRIDE {
206 } 306 }
207 307
208 virtual void UnlockScreenFailed() OVERRIDE { 308 virtual void UnlockScreenFailed() OVERRIDE {
209 } 309 }
210 310
211 // TODO(sad): Override more from PowerManagerClient::Observer here (e.g. 311 // TODO(sad): Override more from PowerManagerClient::Observer here (e.g.
212 // PowerButtonStateChanged etc.). 312 // PowerButtonStateChanged etc.).
213 313
214 // Overridden from StatusMenuIcon::Delegate. 314 // Overridden from NetworkMenuIcon::Delegate.
215 virtual void NetworkMenuIconChanged() OVERRIDE { 315 virtual void NetworkMenuIconChanged() OVERRIDE {
216 NotifyRefreshNetwork(); 316 NotifyRefreshNetwork();
217 } 317 }
218 318
319 // Overridden from NetworkMenu::Delegate.
320 virtual views::MenuButton* GetMenuButton() OVERRIDE {
321 return NULL;
322 }
323
324 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE {
325 return ash::Shell::GetInstance()->GetContainer(
326 GetUserLoginStatus() == ash::user::LOGGED_IN_NONE ?
327 ash::internal::kShellWindowId_LockSystemModalContainer :
Nikita (slow) 2012/03/14 16:48:45 nit: 4 spaces alignment.
sadrul 2012/03/14 18:37:46 Done.
328 ash::internal::kShellWindowId_SystemModalContainer);
329 }
330
331 virtual void OpenButtonOptions() OVERRIDE {
332 }
333
334 virtual bool ShouldOpenButtonOptions() const OVERRIDE {
335 return false;
336 }
337
219 // Overridden from NetworkLibrary::NetworkManagerObserver. 338 // Overridden from NetworkLibrary::NetworkManagerObserver.
220 virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE { 339 virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE {
221 RefreshNetworkObserver(crosnet); 340 RefreshNetworkObserver(crosnet);
222 RefreshNetworkDeviceObserver(crosnet); 341 RefreshNetworkDeviceObserver(crosnet);
223 342
224 // TODO: ShowOptionalMobileDataPromoNotification? 343 // TODO: ShowOptionalMobileDataPromoNotification?
225 344
226 NotifyRefreshNetwork(); 345 NotifyRefreshNetwork();
227 } 346 }
228 347
(...skipping 24 matching lines...) Expand all
253 controller->OnUpdateRecommended(); 372 controller->OnUpdateRecommended();
254 break; 373 break;
255 } 374 }
256 default: 375 default:
257 NOTREACHED(); 376 NOTREACHED();
258 } 377 }
259 } 378 }
260 379
261 ash::SystemTray* tray_; 380 ash::SystemTray* tray_;
262 scoped_ptr<NetworkMenuIcon> network_icon_; 381 scoped_ptr<NetworkMenuIcon> network_icon_;
382 scoped_ptr<NetworkMenuIcon> network_icon_large_;
383 scoped_ptr<NetworkMenu> network_menu_;
263 content::NotificationRegistrar registrar_; 384 content::NotificationRegistrar registrar_;
264 std::string cellular_device_path_; 385 std::string cellular_device_path_;
265 std::string active_network_path_; 386 std::string active_network_path_;
387 scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_;
266 388
267 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); 389 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate);
268 }; 390 };
269 391
270 } // namespace 392 } // namespace
271 393
272 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) { 394 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) {
273 return new chromeos::SystemTrayDelegate(tray); 395 return new chromeos::SystemTrayDelegate(tray);
274 } 396 }
275 397
276 } // namespace chromeos 398 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698