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

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

Issue 9704029: Reland r126700: 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
« no previous file with comments | « ash/system/tray/system_tray_delegate.h ('k') | chrome/browser/ui/browser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/date_format_observer.h" 12 #include "ash/system/power/date_format_observer.h"
12 #include "ash/system/power/power_status_controller.h" 13 #include "ash/system/power/power_status_controller.h"
13 #include "ash/system/tray/system_tray.h" 14 #include "ash/system/tray/system_tray.h"
14 #include "ash/system/tray/system_tray_delegate.h" 15 #include "ash/system/tray/system_tray_delegate.h"
15 #include "ash/system/user/update_controller.h" 16 #include "ash/system/user/update_controller.h"
16 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/chromeos/audio/audio_handler.h" 19 #include "chrome/browser/chromeos/audio/audio_handler.h"
18 #include "chrome/browser/chromeos/cros/cros_library.h" 20 #include "chrome/browser/chromeos/cros/cros_library.h"
19 #include "chrome/browser/chromeos/cros/network_library.h" 21 #include "chrome/browser/chromeos/cros/network_library.h"
20 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" 22 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
21 #include "chrome/browser/chromeos/dbus/power_manager_client.h" 23 #include "chrome/browser/chromeos/dbus/power_manager_client.h"
24 #include "chrome/browser/chromeos/login/base_login_display_host.h"
25 #include "chrome/browser/chromeos/login/login_display_host.h"
22 #include "chrome/browser/chromeos/login/user.h" 26 #include "chrome/browser/chromeos/login/user.h"
23 #include "chrome/browser/chromeos/login/user_manager.h" 27 #include "chrome/browser/chromeos/login/user_manager.h"
28 #include "chrome/browser/chromeos/status/network_menu.h"
24 #include "chrome/browser/chromeos/status/network_menu_icon.h" 29 #include "chrome/browser/chromeos/status/network_menu_icon.h"
25 #include "chrome/browser/prefs/pref_service.h" 30 #include "chrome/browser/prefs/pref_service.h"
26 #include "chrome/browser/profiles/profile_manager.h" 31 #include "chrome/browser/profiles/profile_manager.h"
27 #include "chrome/browser/ui/browser.h" 32 #include "chrome/browser/ui/browser.h"
28 #include "chrome/browser/ui/browser_list.h" 33 #include "chrome/browser/ui/browser_list.h"
29 #include "chrome/browser/upgrade_detector.h" 34 #include "chrome/browser/upgrade_detector.h"
30 #include "chrome/common/pref_names.h" 35 #include "chrome/common/pref_names.h"
31 #include "chrome/common/chrome_notification_types.h" 36 #include "chrome/common/chrome_notification_types.h"
32 #include "content/public/browser/notification_observer.h" 37 #include "content/public/browser/notification_observer.h"
33 #include "content/public/browser/notification_service.h" 38 #include "content/public/browser/notification_service.h"
39 #include "grit/generated_resources.h"
40 #include "ui/base/l10n/l10n_util.h"
34 41
35 namespace chromeos { 42 namespace chromeos {
36 43
37 namespace { 44 namespace {
38 45
46 ash::NetworkIconInfo CreateNetworkIconInfo(const Network* network,
47 NetworkMenuIcon* network_icon) {
48 ash::NetworkIconInfo info;
49 info.name = UTF8ToUTF16(network->name());
50 info.image = network_icon->GetBitmap(network, NetworkMenuIcon::SIZE_SMALL);
51 info.unique_id = network->unique_id();
52 return info;
53 }
54
39 class SystemTrayDelegate : public ash::SystemTrayDelegate, 55 class SystemTrayDelegate : public ash::SystemTrayDelegate,
40 public AudioHandler::VolumeObserver, 56 public AudioHandler::VolumeObserver,
41 public PowerManagerClient::Observer, 57 public PowerManagerClient::Observer,
42 public NetworkMenuIcon::Delegate, 58 public NetworkMenuIcon::Delegate,
59 public NetworkMenu::Delegate,
43 public NetworkLibrary::NetworkManagerObserver, 60 public NetworkLibrary::NetworkManagerObserver,
44 public NetworkLibrary::NetworkObserver, 61 public NetworkLibrary::NetworkObserver,
45 public NetworkLibrary::CellularDataPlanObserver, 62 public NetworkLibrary::CellularDataPlanObserver,
46 public content::NotificationObserver { 63 public content::NotificationObserver {
47 public: 64 public:
48 explicit SystemTrayDelegate(ash::SystemTray* tray) 65 explicit SystemTrayDelegate(ash::SystemTray* tray)
49 : tray_(tray), 66 : tray_(tray),
50 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST( 67 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST(
51 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))) { 68 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
69 network_icon_large_(ALLOW_THIS_IN_INITIALIZER_LIST(
70 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
71 network_menu_(ALLOW_THIS_IN_INITIALIZER_LIST(new NetworkMenu(this))) {
52 AudioHandler::GetInstance()->AddVolumeObserver(this); 72 AudioHandler::GetInstance()->AddVolumeObserver(this);
53 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); 73 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
54 DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate( 74 DBusThreadManager::Get()->GetPowerManagerClient()->RequestStatusUpdate(
55 PowerManagerClient::UPDATE_USER); 75 PowerManagerClient::UPDATE_USER);
56 76
57 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); 77 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
58 crosnet->AddNetworkManagerObserver(this); 78 crosnet->AddNetworkManagerObserver(this);
59 OnNetworkManagerChanged(crosnet); 79 OnNetworkManagerChanged(crosnet);
60 crosnet->AddCellularDataPlanObserver(this); 80 crosnet->AddCellularDataPlanObserver(this);
61 81
62 registrar_.Add(this, 82 registrar_.Add(this,
63 chrome::NOTIFICATION_LOGIN_USER_CHANGED, 83 chrome::NOTIFICATION_LOGIN_USER_CHANGED,
64 content::NotificationService::AllSources()); 84 content::NotificationService::AllSources());
65 registrar_.Add(this, 85 registrar_.Add(this,
66 chrome::NOTIFICATION_UPGRADE_RECOMMENDED, 86 chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
67 content::NotificationService::AllSources()); 87 content::NotificationService::AllSources());
68 88
69 InitializePrefChangeRegistrar(); 89 InitializePrefChangeRegistrar();
90
91 network_icon_large_->SetResourceSize(NetworkMenuIcon::SIZE_LARGE);
70 } 92 }
71 93
72 virtual ~SystemTrayDelegate() { 94 virtual ~SystemTrayDelegate() {
73 AudioHandler* audiohandler = AudioHandler::GetInstance(); 95 AudioHandler* audiohandler = AudioHandler::GetInstance();
74 if (audiohandler) 96 if (audiohandler)
75 audiohandler->RemoveVolumeObserver(this); 97 audiohandler->RemoveVolumeObserver(this);
76 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); 98 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
77 } 99 }
78 100
79 // Overridden from ash::SystemTrayDelegate: 101 // Overridden from ash::SystemTrayDelegate:
(...skipping 29 matching lines...) Expand all
109 UpgradeDetector::UPGRADE_ICON_TYPE_MENU_ICON); 131 UpgradeDetector::UPGRADE_ICON_TYPE_MENU_ICON);
110 } 132 }
111 133
112 virtual base::HourClockType GetHourClockType() const OVERRIDE { 134 virtual base::HourClockType GetHourClockType() const OVERRIDE {
113 Profile* profile = ProfileManager::GetDefaultProfile(); 135 Profile* profile = ProfileManager::GetDefaultProfile();
114 return !profile || profile->GetPrefs()->GetBoolean(prefs::kUse24HourClock) ? 136 return !profile || profile->GetPrefs()->GetBoolean(prefs::kUse24HourClock) ?
115 base::k24HourClock : base::k12HourClock; 137 base::k24HourClock : base::k12HourClock;
116 } 138 }
117 139
118 virtual void ShowSettings() OVERRIDE { 140 virtual void ShowSettings() OVERRIDE {
119 BrowserList::GetLastActive()->OpenOptionsDialog(); 141 GetAppropriateBrowser()->OpenOptionsDialog();
120 } 142 }
121 143
122 virtual void ShowDateSettings() OVERRIDE { 144 virtual void ShowDateSettings() OVERRIDE {
123 BrowserList::GetLastActive()->OpenAdvancedOptionsDialog(); 145 GetAppropriateBrowser()->OpenAdvancedOptionsDialog();
146 }
147
148 virtual void ShowNetworkSettings() OVERRIDE {
149 GetAppropriateBrowser()->OpenInternetOptionsDialog();
124 } 150 }
125 151
126 virtual void ShowHelp() OVERRIDE { 152 virtual void ShowHelp() OVERRIDE {
127 BrowserList::GetLastActive()->ShowHelpTab(); 153 GetAppropriateBrowser()->ShowHelpTab();
128 } 154 }
129 155
130 virtual bool IsAudioMuted() const OVERRIDE { 156 virtual bool IsAudioMuted() const OVERRIDE {
131 return AudioHandler::GetInstance()->IsMuted(); 157 return AudioHandler::GetInstance()->IsMuted();
132 } 158 }
133 159
134 virtual void SetAudioMuted(bool muted) OVERRIDE { 160 virtual void SetAudioMuted(bool muted) OVERRIDE {
135 return AudioHandler::GetInstance()->SetMuted(muted); 161 return AudioHandler::GetInstance()->SetMuted(muted);
136 } 162 }
137 163
(...skipping 11 matching lines...) Expand all
149 175
150 virtual void SignOut() OVERRIDE { 176 virtual void SignOut() OVERRIDE {
151 BrowserList::AttemptUserExit(); 177 BrowserList::AttemptUserExit();
152 } 178 }
153 179
154 virtual void RequestLockScreen() OVERRIDE { 180 virtual void RequestLockScreen() OVERRIDE {
155 DBusThreadManager::Get()->GetPowerManagerClient()-> 181 DBusThreadManager::Get()->GetPowerManagerClient()->
156 NotifyScreenLockRequested(); 182 NotifyScreenLockRequested();
157 } 183 }
158 184
159 virtual ash::NetworkIconInfo GetMostRelevantNetworkIcon() OVERRIDE { 185 virtual ash::NetworkIconInfo GetMostRelevantNetworkIcon(bool large) OVERRIDE {
160 ash::NetworkIconInfo info; 186 ash::NetworkIconInfo info;
161 info.image = network_icon_->GetIconAndText(&info.description); 187 info.image = !large ? network_icon_->GetIconAndText(&info.description) :
188 network_icon_large_->GetIconAndText(&info.description);
162 return info; 189 return info;
163 } 190 }
164 191
192 virtual void GetAvailableNetworks(
193 std::vector<ash::NetworkIconInfo>* list) OVERRIDE {
194 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
195
196 // Ethernet.
197 if (crosnet->ethernet_available() && crosnet->ethernet_enabled()) {
198 const EthernetNetwork* ethernet_network = crosnet->ethernet_network();
199 if (ethernet_network) {
200 ash::NetworkIconInfo info;
201 info.image = network_icon_->GetBitmap(ethernet_network,
202 NetworkMenuIcon::SIZE_SMALL);
203 if (!ethernet_network->name().empty())
204 info.name = UTF8ToUTF16(ethernet_network->name());
205 else
206 info.name =
207 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
208 info.unique_id = ethernet_network->unique_id();
209 list->push_back(info);
210 }
211 }
212
213 // Wifi.
214 if (crosnet->wifi_available() && crosnet->wifi_enabled()) {
215 const WifiNetworkVector& wifi = crosnet->wifi_networks();
216 for (size_t i = 0; i < wifi.size(); ++i)
217 list->push_back(CreateNetworkIconInfo(wifi[i], network_icon_.get()));
218 }
219
220 // Cellular.
221 if (crosnet->cellular_available() && crosnet->cellular_enabled()) {
222 // TODO(sad): There are different cases for cellular networks, e.g.
223 // de-activated networks, active networks that support data plan info,
224 // networks with top-up URLs etc. All of these need to be handled
225 // properly.
226 const CellularNetworkVector& cell = crosnet->cellular_networks();
227 for (size_t i = 0; i < cell.size(); ++i)
228 list->push_back(CreateNetworkIconInfo(cell[i], network_icon_.get()));
229 }
230
231 // VPN (only if logged in).
232 if (GetUserLoginStatus() == ash::user::LOGGED_IN_NONE)
233 return;
234 if (crosnet->connected_network() || crosnet->virtual_network_connected()) {
235 const VirtualNetworkVector& vpns = crosnet->virtual_networks();
236 for (size_t i = 0; i < vpns.size(); ++i)
237 list->push_back(CreateNetworkIconInfo(vpns[i], network_icon_.get()));
238 }
239 }
240
241 virtual void ConnectToNetwork(const std::string& network_id) OVERRIDE {
242 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
243 Network* network = crosnet->FindNetworkByUniqueId(network_id);
244 if (network)
245 network_menu_->ConnectToNetwork(network);
246 }
247
248 virtual void ToggleAirplaneMode() OVERRIDE {
249 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
250 crosnet->EnableOfflineMode(!crosnet->offline_mode());
251 }
252
253 virtual void ChangeProxySettings() OVERRIDE {
254 CHECK(GetUserLoginStatus() == ash::user::LOGGED_IN_NONE);
255 BaseLoginDisplayHost::default_host()->OpenProxySettings();
256 }
257
165 private: 258 private:
259 // Returns the last active browser. If there is no such browser, creates a new
260 // browser window with an empty tab and returns it.
261 Browser* GetAppropriateBrowser() {
262 Browser* browser = BrowserList::GetLastActive();
263 if (!browser)
264 browser = Browser::NewEmptyWindow(ProfileManager::GetDefaultProfile());
265 return browser;
266 }
267
166 void InitializePrefChangeRegistrar() { 268 void InitializePrefChangeRegistrar() {
167 Profile* profile = ProfileManager::GetDefaultProfile(); 269 Profile* profile = ProfileManager::GetDefaultProfile();
168 pref_registrar_.reset(new PrefChangeRegistrar); 270 pref_registrar_.reset(new PrefChangeRegistrar);
169 pref_registrar_->Init(profile->GetPrefs()); 271 pref_registrar_->Init(profile->GetPrefs());
170 pref_registrar_->Add(prefs::kUse24HourClock, this); 272 pref_registrar_->Add(prefs::kUse24HourClock, this);
171 } 273 }
172 274
173 void NotifyRefreshNetwork() { 275 void NotifyRefreshNetwork() {
174 ash::NetworkController* controller = 276 ash::NetworkController* controller =
175 ash::Shell::GetInstance()->network_controller(); 277 ash::Shell::GetInstance()->network_controller();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 325
224 virtual void UnlockScreen() OVERRIDE { 326 virtual void UnlockScreen() OVERRIDE {
225 } 327 }
226 328
227 virtual void UnlockScreenFailed() OVERRIDE { 329 virtual void UnlockScreenFailed() OVERRIDE {
228 } 330 }
229 331
230 // TODO(sad): Override more from PowerManagerClient::Observer here (e.g. 332 // TODO(sad): Override more from PowerManagerClient::Observer here (e.g.
231 // PowerButtonStateChanged etc.). 333 // PowerButtonStateChanged etc.).
232 334
233 // Overridden from StatusMenuIcon::Delegate. 335 // Overridden from NetworkMenuIcon::Delegate.
234 virtual void NetworkMenuIconChanged() OVERRIDE { 336 virtual void NetworkMenuIconChanged() OVERRIDE {
235 NotifyRefreshNetwork(); 337 NotifyRefreshNetwork();
236 } 338 }
237 339
340 // Overridden from NetworkMenu::Delegate.
341 virtual views::MenuButton* GetMenuButton() OVERRIDE {
342 return NULL;
343 }
344
345 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE {
346 return ash::Shell::GetInstance()->GetContainer(
347 GetUserLoginStatus() == ash::user::LOGGED_IN_NONE ?
348 ash::internal::kShellWindowId_LockSystemModalContainer :
349 ash::internal::kShellWindowId_SystemModalContainer);
350 }
351
352 virtual void OpenButtonOptions() OVERRIDE {
353 }
354
355 virtual bool ShouldOpenButtonOptions() const OVERRIDE {
356 return false;
357 }
358
238 // Overridden from NetworkLibrary::NetworkManagerObserver. 359 // Overridden from NetworkLibrary::NetworkManagerObserver.
239 virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE { 360 virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE {
240 RefreshNetworkObserver(crosnet); 361 RefreshNetworkObserver(crosnet);
241 RefreshNetworkDeviceObserver(crosnet); 362 RefreshNetworkDeviceObserver(crosnet);
242 363
243 // TODO: ShowOptionalMobileDataPromoNotification? 364 // TODO: ShowOptionalMobileDataPromoNotification?
244 365
245 NotifyRefreshNetwork(); 366 NotifyRefreshNetwork();
246 } 367 }
247 368
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 observer->OnDateFormatChanged(); 405 observer->OnDateFormatChanged();
285 break; 406 break;
286 } 407 }
287 default: 408 default:
288 NOTREACHED(); 409 NOTREACHED();
289 } 410 }
290 } 411 }
291 412
292 ash::SystemTray* tray_; 413 ash::SystemTray* tray_;
293 scoped_ptr<NetworkMenuIcon> network_icon_; 414 scoped_ptr<NetworkMenuIcon> network_icon_;
415 scoped_ptr<NetworkMenuIcon> network_icon_large_;
416 scoped_ptr<NetworkMenu> network_menu_;
294 content::NotificationRegistrar registrar_; 417 content::NotificationRegistrar registrar_;
295 scoped_ptr<PrefChangeRegistrar> pref_registrar_; 418 scoped_ptr<PrefChangeRegistrar> pref_registrar_;
296 std::string cellular_device_path_; 419 std::string cellular_device_path_;
297 std::string active_network_path_; 420 std::string active_network_path_;
421 scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_;
298 422
299 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); 423 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate);
300 }; 424 };
301 425
302 } // namespace 426 } // namespace
303 427
304 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) { 428 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) {
305 return new chromeos::SystemTrayDelegate(tray); 429 return new chromeos::SystemTrayDelegate(tray);
306 } 430 }
307 431
308 } // namespace chromeos 432 } // namespace chromeos
OLDNEW
« no previous file with comments | « ash/system/tray/system_tray_delegate.h ('k') | chrome/browser/ui/browser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698