OLD | NEW |
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 "ash/system/chromeos/network/tray_network.h" | 5 #include "ash/system/chromeos/network/tray_network.h" |
6 | 6 |
7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/system/chromeos/network/network_icon_animation.h" | |
10 #include "ash/system/chromeos/network/network_list_detailed_view.h" | 9 #include "ash/system/chromeos/network/network_list_detailed_view.h" |
11 #include "ash/system/chromeos/network/network_list_detailed_view_base.h" | 10 #include "ash/system/chromeos/network/network_list_detailed_view_base.h" |
12 #include "ash/system/chromeos/network/network_state_list_detailed_view.h" | 11 #include "ash/system/chromeos/network/network_state_list_detailed_view.h" |
13 #include "ash/system/chromeos/network/tray_network_state_observer.h" | 12 #include "ash/system/chromeos/network/tray_network_state_observer.h" |
14 #include "ash/system/tray/system_tray.h" | 13 #include "ash/system/tray/system_tray.h" |
15 #include "ash/system/tray/system_tray_delegate.h" | 14 #include "ash/system/tray/system_tray_delegate.h" |
16 #include "ash/system/tray/system_tray_notifier.h" | 15 #include "ash/system/tray/system_tray_notifier.h" |
17 #include "ash/system/tray/tray_constants.h" | 16 #include "ash/system/tray/tray_constants.h" |
18 #include "ash/system/tray/tray_item_more.h" | 17 #include "ash/system/tray/tray_item_more.h" |
19 #include "ash/system/tray/tray_item_view.h" | 18 #include "ash/system/tray/tray_item_view.h" |
20 #include "ash/system/tray/tray_notification_view.h" | 19 #include "ash/system/tray/tray_notification_view.h" |
21 #include "base/command_line.h" | 20 #include "base/command_line.h" |
22 #include "base/utf_string_conversions.h" | |
23 #include "chromeos/network/network_configuration_handler.h" | |
24 #include "chromeos/network/network_state.h" | |
25 #include "chromeos/network/network_state_handler.h" | 21 #include "chromeos/network/network_state_handler.h" |
26 #include "grit/ash_resources.h" | 22 #include "grit/ash_resources.h" |
27 #include "grit/ash_strings.h" | 23 #include "grit/ash_strings.h" |
28 #include "third_party/cros_system_api/dbus/service_constants.h" | 24 #include "third_party/cros_system_api/dbus/service_constants.h" |
29 #include "ui/base/accessibility/accessible_view_state.h" | 25 #include "ui/base/accessibility/accessible_view_state.h" |
30 #include "ui/base/l10n/l10n_util.h" | 26 #include "ui/base/l10n/l10n_util.h" |
31 #include "ui/base/resource/resource_bundle.h" | 27 #include "ui/base/resource/resource_bundle.h" |
32 #include "ui/views/controls/link.h" | 28 #include "ui/views/controls/link.h" |
33 #include "ui/views/controls/link_listener.h" | 29 #include "ui/views/controls/link_listener.h" |
34 #include "ui/views/layout/box_layout.h" | 30 #include "ui/views/layout/box_layout.h" |
(...skipping 22 matching lines...) Expand all Loading... |
57 return 0; | 53 return 0; |
58 } | 54 } |
59 | 55 |
60 bool UseNewNetworkHandlers() { | 56 bool UseNewNetworkHandlers() { |
61 return CommandLine::ForCurrentProcess()->HasSwitch( | 57 return CommandLine::ForCurrentProcess()->HasSwitch( |
62 ash::switches::kAshEnableNewNetworkStatusArea); | 58 ash::switches::kAshEnableNewNetworkStatusArea); |
63 } | 59 } |
64 | 60 |
65 } // namespace | 61 } // namespace |
66 | 62 |
67 using chromeos::NetworkState; | |
68 using chromeos::NetworkStateHandler; | |
69 | |
70 namespace ash { | 63 namespace ash { |
71 namespace internal { | 64 namespace internal { |
72 | 65 |
73 namespace tray { | 66 namespace tray { |
74 | 67 |
| 68 enum ColorTheme { |
| 69 LIGHT, |
| 70 DARK, |
| 71 }; |
| 72 |
75 class NetworkMessages { | 73 class NetworkMessages { |
76 public: | 74 public: |
77 struct Message { | 75 struct Message { |
78 Message() : delegate(NULL) {} | 76 Message() : delegate(NULL) {} |
79 Message(NetworkTrayDelegate* in_delegate, | 77 Message(NetworkTrayDelegate* in_delegate, |
80 TrayNetwork::NetworkType network_type, | 78 TrayNetwork::NetworkType network_type, |
81 const string16& in_title, | 79 const string16& in_title, |
82 const string16& in_message, | 80 const string16& in_message, |
83 const std::vector<string16>& in_links) : | 81 const std::vector<string16>& in_links) : |
84 delegate(in_delegate), | 82 delegate(in_delegate), |
85 network_type_(network_type), | 83 network_type_(network_type), |
86 title(in_title), | 84 title(in_title), |
87 message(in_message), | 85 message(in_message), |
88 links(in_links) {} | 86 links(in_links) {} |
89 NetworkTrayDelegate* delegate; | 87 NetworkTrayDelegate* delegate; |
90 TrayNetwork::NetworkType network_type_; | 88 TrayNetwork::NetworkType network_type_; |
91 string16 title; | 89 string16 title; |
92 string16 message; | 90 string16 message; |
93 std::vector<string16> links; | 91 std::vector<string16> links; |
94 }; | 92 }; |
95 typedef std::map<TrayNetwork::MessageType, Message> MessageMap; | 93 typedef std::map<TrayNetwork::MessageType, Message> MessageMap; |
96 | 94 |
97 MessageMap& messages() { return messages_; } | 95 MessageMap& messages() { return messages_; } |
98 const MessageMap& messages() const { return messages_; } | 96 const MessageMap& messages() const { return messages_; } |
99 | 97 |
100 private: | 98 private: |
101 MessageMap messages_; | 99 MessageMap messages_; |
102 }; | 100 }; |
103 | 101 |
104 class NetworkTrayView : public TrayItemView, | 102 class NetworkTrayView : public TrayItemView { |
105 public network_icon::AnimationObserver { | |
106 public: | 103 public: |
107 explicit NetworkTrayView(TrayNetwork* network_tray) | 104 NetworkTrayView(SystemTrayItem* owner, ColorTheme size) |
108 : TrayItemView(network_tray), | 105 : TrayItemView(owner), color_theme_(size) { |
109 network_tray_(network_tray) { | |
110 SetLayoutManager( | 106 SetLayoutManager( |
111 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); | 107 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); |
112 | 108 |
113 image_view_ = new views::ImageView; | 109 image_view_ = color_theme_ == DARK ? |
| 110 new FixedSizedImageView(0, kTrayPopupItemHeight) : |
| 111 new views::ImageView; |
114 AddChildView(image_view_); | 112 AddChildView(image_view_); |
115 | 113 |
116 NetworkIconInfo info; | 114 NetworkIconInfo info; |
117 if (UseNewNetworkHandlers()) { | 115 Shell::GetInstance()->system_tray_delegate()-> |
118 UpdateNetworkStateHandlerIcon(); | 116 GetMostRelevantNetworkIcon(&info, false); |
119 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); | 117 Update(info); |
120 } else { | |
121 Shell::GetInstance()->system_tray_delegate()-> | |
122 GetMostRelevantNetworkIcon(&info, false); | |
123 UpdateIcon(info.tray_icon_visible, info.image); | |
124 } | |
125 } | 118 } |
126 | 119 |
127 virtual ~NetworkTrayView() { | 120 virtual ~NetworkTrayView() {} |
128 if (UseNewNetworkHandlers()) | |
129 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); | |
130 } | |
131 | 121 |
132 void Update(const NetworkIconInfo& info) { | 122 void Update(const NetworkIconInfo& info) { |
133 if (UseNewNetworkHandlers()) | 123 image_view_->SetImage(info.image); |
134 return; | 124 SetVisible(info.tray_icon_visible); |
135 UpdateIcon(info.tray_icon_visible, info.image); | 125 SchedulePaint(); |
136 UpdateConnectionStatus(info.name, info.connected); | 126 UpdateConnectionStatus(info.name, info.connected); |
137 } | 127 } |
138 | 128 |
139 void UpdateNetworkStateHandlerIcon() { | |
140 DCHECK(UseNewNetworkHandlers()); | |
141 NetworkStateHandler* handler = NetworkStateHandler::Get(); | |
142 gfx::ImageSkia image; | |
143 string16 name; | |
144 network_tray_->GetNetworkStateHandlerImageAndLabel( | |
145 network_icon::ICON_TYPE_TRAY, &image, &name); | |
146 bool show_in_tray = !image.isNull(); | |
147 UpdateIcon(show_in_tray, image); | |
148 const NetworkState* connected_network = handler->ConnectedNetworkByType( | |
149 NetworkStateHandler::kMatchTypeNonVirtual); | |
150 if (connected_network) | |
151 UpdateConnectionStatus(UTF8ToUTF16(connected_network->name()), true); | |
152 else | |
153 UpdateConnectionStatus(string16(), false); | |
154 } | |
155 | |
156 // views::View override. | 129 // views::View override. |
157 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE { | 130 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE { |
158 state->name = connection_status_string_; | 131 state->name = connection_status_string_; |
159 state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; | 132 state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; |
160 } | 133 } |
161 | 134 |
162 // network_icon::AnimationObserver | |
163 virtual void NetworkIconChanged() OVERRIDE { | |
164 if (UseNewNetworkHandlers()) | |
165 UpdateNetworkStateHandlerIcon(); | |
166 } | |
167 | |
168 private: | 135 private: |
169 // Updates connection status and notifies accessibility event when necessary. | 136 // Updates connection status and notifies accessibility event when necessary. |
170 void UpdateConnectionStatus(const string16& network_name, bool connected) { | 137 void UpdateConnectionStatus(const string16& network_name, bool connected) { |
171 string16 new_connection_status_string; | 138 string16 new_connection_status_string; |
172 if (connected) { | 139 if (connected) { |
173 new_connection_status_string = l10n_util::GetStringFUTF16( | 140 new_connection_status_string = l10n_util::GetStringFUTF16( |
174 IDS_ASH_STATUS_TRAY_NETWORK_CONNECTED, network_name); | 141 IDS_ASH_STATUS_TRAY_NETWORK_CONNECTED, network_name); |
175 } | 142 } |
176 if (new_connection_status_string != connection_status_string_) { | 143 if (new_connection_status_string != connection_status_string_) { |
177 connection_status_string_ = new_connection_status_string; | 144 connection_status_string_ = new_connection_status_string; |
178 if(!connection_status_string_.empty()) { | 145 if(!connection_status_string_.empty()) { |
179 GetWidget()->NotifyAccessibilityEvent( | 146 GetWidget()->NotifyAccessibilityEvent( |
180 this, ui::AccessibilityTypes::EVENT_ALERT, true); | 147 this, ui::AccessibilityTypes::EVENT_ALERT, true); |
181 } | 148 } |
182 } | 149 } |
183 } | 150 } |
184 | 151 |
185 void UpdateIcon(bool tray_icon_visible, const gfx::ImageSkia& image) { | |
186 image_view_->SetImage(image); | |
187 SetVisible(tray_icon_visible); | |
188 SchedulePaint(); | |
189 } | |
190 | |
191 TrayNetwork* network_tray_; | |
192 views::ImageView* image_view_; | 152 views::ImageView* image_view_; |
| 153 ColorTheme color_theme_; |
193 string16 connection_status_string_; | 154 string16 connection_status_string_; |
194 | 155 |
195 DISALLOW_COPY_AND_ASSIGN(NetworkTrayView); | 156 DISALLOW_COPY_AND_ASSIGN(NetworkTrayView); |
196 }; | 157 }; |
197 | 158 |
198 class NetworkDefaultView : public TrayItemMore, | 159 class NetworkDefaultView : public TrayItemMore { |
199 public network_icon::AnimationObserver { | |
200 public: | 160 public: |
201 NetworkDefaultView(TrayNetwork* network_tray, bool show_more) | 161 NetworkDefaultView(SystemTrayItem* owner, bool show_more) |
202 : TrayItemMore(network_tray, show_more), | 162 : TrayItemMore(owner, show_more) { |
203 network_tray_(network_tray) { | |
204 Update(); | |
205 if (UseNewNetworkHandlers()) | |
206 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); | |
207 } | |
208 | |
209 virtual ~NetworkDefaultView() { | |
210 if (UseNewNetworkHandlers()) | |
211 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); | |
212 } | |
213 | |
214 void Update() { | |
215 if (UseNewNetworkHandlers()) { | |
216 gfx::ImageSkia image; | |
217 string16 label; | |
218 network_tray_->GetNetworkStateHandlerImageAndLabel( | |
219 network_icon::ICON_TYPE_DEFAULT_VIEW, &image, &label); | |
220 SetImage(&image); | |
221 SetLabel(label); | |
222 SetAccessibleName(label); | |
223 } else { | |
224 NetworkIconInfo info; | |
225 Shell::GetInstance()->system_tray_delegate()-> | |
226 GetMostRelevantNetworkIcon(&info, true); | |
227 SetImage(&info.image); | |
228 SetLabel(info.description); | |
229 SetAccessibleName(info.description); | |
230 } | |
231 } | |
232 | |
233 // network_icon::AnimationObserver | |
234 virtual void NetworkIconChanged() OVERRIDE { | |
235 Update(); | 163 Update(); |
236 } | 164 } |
237 | 165 |
| 166 virtual ~NetworkDefaultView() {} |
| 167 |
| 168 void Update() { |
| 169 NetworkIconInfo info; |
| 170 Shell::GetInstance()->system_tray_delegate()-> |
| 171 GetMostRelevantNetworkIcon(&info, true); |
| 172 SetImage(&info.image); |
| 173 SetLabel(info.description); |
| 174 SetAccessibleName(info.description); |
| 175 } |
| 176 |
238 private: | 177 private: |
239 TrayNetwork* network_tray_; | |
240 | |
241 DISALLOW_COPY_AND_ASSIGN(NetworkDefaultView); | 178 DISALLOW_COPY_AND_ASSIGN(NetworkDefaultView); |
242 }; | 179 }; |
243 | 180 |
244 class NetworkWifiDetailedView : public NetworkDetailedView { | 181 class NetworkWifiDetailedView : public NetworkDetailedView { |
245 public: | 182 public: |
246 NetworkWifiDetailedView(SystemTrayItem* owner, bool wifi_enabled) | 183 NetworkWifiDetailedView(SystemTrayItem* owner, bool wifi_enabled) |
247 : NetworkDetailedView(owner) { | 184 : NetworkDetailedView(owner) { |
248 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, | 185 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
249 kTrayPopupPaddingHorizontal, | 186 kTrayPopupPaddingHorizontal, |
250 10, | 187 10, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 const chromeos::NetworkState* network) OVERRIDE { | 224 const chromeos::NetworkState* network) OVERRIDE { |
288 } | 225 } |
289 | 226 |
290 private: | 227 private: |
291 DISALLOW_COPY_AND_ASSIGN(NetworkWifiDetailedView); | 228 DISALLOW_COPY_AND_ASSIGN(NetworkWifiDetailedView); |
292 }; | 229 }; |
293 | 230 |
294 class NetworkMessageView : public views::View, | 231 class NetworkMessageView : public views::View, |
295 public views::LinkListener { | 232 public views::LinkListener { |
296 public: | 233 public: |
297 NetworkMessageView(TrayNetwork* tray_network, | 234 NetworkMessageView(TrayNetwork* owner, |
298 TrayNetwork::MessageType message_type, | 235 TrayNetwork::MessageType message_type, |
299 const NetworkMessages::Message& network_msg) | 236 const NetworkMessages::Message& network_msg) |
300 : tray_network_(tray_network), | 237 : owner_(owner), |
301 message_type_(message_type), | 238 message_type_(message_type), |
302 network_type_(network_msg.network_type_) { | 239 network_type_(network_msg.network_type_) { |
303 SetLayoutManager( | 240 SetLayoutManager( |
304 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); | 241 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); |
305 | 242 |
306 if (!network_msg.title.empty()) { | 243 if (!network_msg.title.empty()) { |
307 views::Label* title = new views::Label(network_msg.title); | 244 views::Label* title = new views::Label(network_msg.title); |
308 title->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 245 title->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
309 title->SetFont(title->font().DeriveFont(0, gfx::Font::BOLD)); | 246 title->SetFont(title->font().DeriveFont(0, gfx::Font::BOLD)); |
310 AddChildView(title); | 247 AddChildView(title); |
(...skipping 18 matching lines...) Expand all Loading... |
329 AddChildView(link); | 266 AddChildView(link); |
330 } | 267 } |
331 } | 268 } |
332 } | 269 } |
333 | 270 |
334 virtual ~NetworkMessageView() { | 271 virtual ~NetworkMessageView() { |
335 } | 272 } |
336 | 273 |
337 // Overridden from views::LinkListener. | 274 // Overridden from views::LinkListener. |
338 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE { | 275 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE { |
339 tray_network_->LinkClicked(message_type_, source->id()); | 276 owner_->LinkClicked(message_type_, source->id()); |
340 } | 277 } |
341 | 278 |
342 TrayNetwork::MessageType message_type() const { return message_type_; } | 279 TrayNetwork::MessageType message_type() const { return message_type_; } |
343 TrayNetwork::NetworkType network_type() const { return network_type_; } | 280 TrayNetwork::NetworkType network_type() const { return network_type_; } |
344 | 281 |
345 private: | 282 private: |
346 TrayNetwork* tray_network_; | 283 TrayNetwork* owner_; |
347 TrayNetwork::MessageType message_type_; | 284 TrayNetwork::MessageType message_type_; |
348 TrayNetwork::NetworkType network_type_; | 285 TrayNetwork::NetworkType network_type_; |
349 | 286 |
350 DISALLOW_COPY_AND_ASSIGN(NetworkMessageView); | 287 DISALLOW_COPY_AND_ASSIGN(NetworkMessageView); |
351 }; | 288 }; |
352 | 289 |
353 class NetworkNotificationView : public TrayNotificationView { | 290 class NetworkNotificationView : public TrayNotificationView { |
354 public: | 291 public: |
355 explicit NetworkNotificationView(TrayNetwork* tray_network) | 292 explicit NetworkNotificationView(TrayNetwork* owner) |
356 : TrayNotificationView(tray_network, 0), | 293 : TrayNotificationView(owner, 0) { |
357 tray_network_(tray_network) { | |
358 CreateMessageView(); | 294 CreateMessageView(); |
359 InitView(network_message_view_); | 295 InitView(network_message_view_); |
360 SetIconImage(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 296 SetIconImage(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
361 GetMessageIcon(network_message_view_->message_type(), | 297 GetMessageIcon(network_message_view_->message_type(), |
362 network_message_view_->network_type()))); | 298 network_message_view_->network_type()))); |
363 } | 299 } |
364 | 300 |
365 // Overridden from TrayNotificationView. | 301 // Overridden from TrayNotificationView. |
366 virtual void OnClose() OVERRIDE { | 302 virtual void OnClose() OVERRIDE { |
367 tray_network_->ClearNetworkMessage(network_message_view_->message_type()); | 303 tray_network()->ClearNetworkMessage(network_message_view_->message_type()); |
368 } | 304 } |
369 | 305 |
370 virtual void OnClickAction() OVERRIDE { | 306 virtual void OnClickAction() OVERRIDE { |
371 if (network_message_view_->message_type() != | 307 if (network_message_view_->message_type() != |
372 TrayNetwork::MESSAGE_DATA_PROMO) | 308 TrayNetwork::MESSAGE_DATA_PROMO) |
373 tray_network_->PopupDetailedView(0, true); | 309 owner()->PopupDetailedView(0, true); |
374 } | 310 } |
375 | 311 |
376 void Update() { | 312 void Update() { |
377 CreateMessageView(); | 313 CreateMessageView(); |
378 UpdateViewAndImage(network_message_view_, | 314 UpdateViewAndImage(network_message_view_, |
379 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 315 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
380 GetMessageIcon(network_message_view_->message_type(), | 316 GetMessageIcon(network_message_view_->message_type(), |
381 network_message_view_->network_type()))); | 317 network_message_view_->network_type()))); |
382 } | 318 } |
383 | 319 |
384 private: | 320 private: |
| 321 TrayNetwork* tray_network() { |
| 322 return static_cast<TrayNetwork*>(owner()); |
| 323 } |
| 324 |
385 void CreateMessageView() { | 325 void CreateMessageView() { |
386 // Display the first (highest priority) message. | 326 // Display the first (highest priority) message. |
387 CHECK(!tray_network_->messages()->messages().empty()); | 327 CHECK(!tray_network()->messages()->messages().empty()); |
388 NetworkMessages::MessageMap::const_iterator iter = | 328 NetworkMessages::MessageMap::const_iterator iter = |
389 tray_network_->messages()->messages().begin(); | 329 tray_network()->messages()->messages().begin(); |
390 network_message_view_ = | 330 network_message_view_ = |
391 new NetworkMessageView(tray_network_, iter->first, iter->second); | 331 new NetworkMessageView(tray_network(), iter->first, iter->second); |
392 } | 332 } |
393 | 333 |
394 TrayNetwork* tray_network_; | |
395 tray::NetworkMessageView* network_message_view_; | 334 tray::NetworkMessageView* network_message_view_; |
396 | 335 |
397 DISALLOW_COPY_AND_ASSIGN(NetworkNotificationView); | 336 DISALLOW_COPY_AND_ASSIGN(NetworkNotificationView); |
398 }; | 337 }; |
399 | 338 |
400 } // namespace tray | 339 } // namespace tray |
401 | 340 |
402 TrayNetwork::TrayNetwork(SystemTray* system_tray) | 341 TrayNetwork::TrayNetwork(SystemTray* system_tray) |
403 : SystemTrayItem(system_tray), | 342 : SystemTrayItem(system_tray), |
404 tray_(NULL), | 343 tray_(NULL), |
405 default_(NULL), | 344 default_(NULL), |
406 detailed_(NULL), | 345 detailed_(NULL), |
407 notification_(NULL), | 346 notification_(NULL), |
408 messages_(new tray::NetworkMessages()), | 347 messages_(new tray::NetworkMessages()), |
409 request_wifi_view_(false), | 348 request_wifi_view_(false) { |
410 uninitialized_msg_(0) { | |
411 if (UseNewNetworkHandlers()) | 349 if (UseNewNetworkHandlers()) |
412 network_state_observer_.reset(new TrayNetworkStateObserver(this)); | 350 network_state_observer_.reset(new TrayNetworkStateObserver(this)); |
413 Shell::GetInstance()->system_tray_notifier()->AddNetworkObserver(this); | 351 Shell::GetInstance()->system_tray_notifier()->AddNetworkObserver(this); |
414 } | 352 } |
415 | 353 |
416 TrayNetwork::~TrayNetwork() { | 354 TrayNetwork::~TrayNetwork() { |
417 Shell::GetInstance()->system_tray_notifier()->RemoveNetworkObserver(this); | 355 Shell::GetInstance()->system_tray_notifier()->RemoveNetworkObserver(this); |
418 } | 356 } |
419 | 357 |
420 views::View* TrayNetwork::CreateTrayView(user::LoginStatus status) { | 358 views::View* TrayNetwork::CreateTrayView(user::LoginStatus status) { |
421 CHECK(tray_ == NULL); | 359 CHECK(tray_ == NULL); |
422 tray_ = new tray::NetworkTrayView(this); | 360 tray_ = new tray::NetworkTrayView(this, tray::LIGHT); |
423 return tray_; | 361 return tray_; |
424 } | 362 } |
425 | 363 |
426 views::View* TrayNetwork::CreateDefaultView(user::LoginStatus status) { | 364 views::View* TrayNetwork::CreateDefaultView(user::LoginStatus status) { |
427 CHECK(default_ == NULL); | 365 CHECK(default_ == NULL); |
428 CHECK(tray_ != NULL); | 366 default_ = |
429 default_ = new tray::NetworkDefaultView( | 367 new tray::NetworkDefaultView(this, status != user::LOGGED_IN_LOCKED); |
430 this, status != user::LOGGED_IN_LOCKED); | |
431 return default_; | 368 return default_; |
432 } | 369 } |
433 | 370 |
434 views::View* TrayNetwork::CreateDetailedView(user::LoginStatus status) { | 371 views::View* TrayNetwork::CreateDetailedView(user::LoginStatus status) { |
435 CHECK(detailed_ == NULL); | 372 CHECK(detailed_ == NULL); |
436 // Clear any notifications when showing the detailed view. | 373 // Clear any notifications when showing the detailed view. |
437 messages_->messages().clear(); | 374 messages_->messages().clear(); |
438 HideNotificationView(); | 375 HideNotificationView(); |
439 if (request_wifi_view_) { | 376 if (request_wifi_view_) { |
440 SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate(); | 377 SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate(); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 void TrayNetwork::OnWillToggleWifi() { | 460 void TrayNetwork::OnWillToggleWifi() { |
524 if (UseNewNetworkHandlers()) | 461 if (UseNewNetworkHandlers()) |
525 return; // Handled in TrayNetworkStateObserver::NetworkManagerChanged() | 462 return; // Handled in TrayNetworkStateObserver::NetworkManagerChanged() |
526 if (!detailed_ || | 463 if (!detailed_ || |
527 detailed_->GetViewType() == tray::NetworkDetailedView::WIFI_VIEW) { | 464 detailed_->GetViewType() == tray::NetworkDetailedView::WIFI_VIEW) { |
528 request_wifi_view_ = true; | 465 request_wifi_view_ = true; |
529 PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); | 466 PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); |
530 } | 467 } |
531 } | 468 } |
532 | 469 |
533 void TrayNetwork::TrayNetworkUpdated() { | |
534 if (tray_ && UseNewNetworkHandlers()) | |
535 tray_->UpdateNetworkStateHandlerIcon(); | |
536 if (default_) | |
537 default_->Update(); | |
538 } | |
539 | |
540 void TrayNetwork::NetworkServiceChanged(const chromeos::NetworkState* network) { | |
541 if (!network->IsConnectingState()) | |
542 connecting_networks_.erase(network->path()); | |
543 } | |
544 | |
545 void TrayNetwork::ConnectToNetwork(const std::string& service_path) { | |
546 DCHECK(UseNewNetworkHandlers()); | |
547 const NetworkState* network = | |
548 NetworkStateHandler::Get()->GetNetworkState(service_path); | |
549 if (!network) | |
550 return; | |
551 if (!network->IsConnectedState()) { | |
552 chromeos::NetworkConfigurationHandler::Get()->Connect( | |
553 service_path, | |
554 base::Bind(&base::DoNothing), | |
555 chromeos::network_handler::ErrorCallback()); | |
556 connecting_networks_.insert(service_path); | |
557 } else { | |
558 // This will show the settings UI for a connected network. | |
559 // TODO(stevenjb): Change the API to explicitly show network settings. | |
560 Shell::GetInstance()->system_tray_delegate()->ConnectToNetwork( | |
561 service_path); | |
562 } | |
563 } | |
564 | |
565 bool TrayNetwork::HasConnectingNetwork(const std::string& service_path) { | |
566 return connecting_networks_.count(service_path) > 0; | |
567 } | |
568 | |
569 void TrayNetwork::GetNetworkStateHandlerImageAndLabel( | |
570 network_icon::IconType icon_type, | |
571 gfx::ImageSkia* image, | |
572 string16* label) { | |
573 NetworkStateHandler* handler = NetworkStateHandler::Get(); | |
574 const NetworkState* network = handler->ConnectedNetworkByType( | |
575 NetworkStateHandler::kMatchTypeNonVirtual); | |
576 if (network && network->type() == flimflam::kTypeEthernet && | |
577 icon_type == network_icon::ICON_TYPE_TRAY) { | |
578 *image = gfx::ImageSkia(); // Don't show ethernet in the tray. | |
579 return; | |
580 } | |
581 const NetworkState* connecting_network = handler->ConnectingNetworkByType( | |
582 NetworkStateHandler::kMatchTypeWireless); | |
583 // If we are connecting to a network, and there is either no connected | |
584 // network, or the connection was user requested, use the connecting | |
585 // network. | |
586 if (connecting_network && | |
587 (!network || | |
588 HasConnectingNetwork(connecting_network->path()))) { | |
589 network = connecting_network; | |
590 } | |
591 if (!network) { | |
592 // If no connecting network, check for cellular initializing. | |
593 int uninitialized_msg = GetUninitializedMsg(); | |
594 if (uninitialized_msg != 0) { | |
595 *image = network_icon::GetImageForConnectingNetwork( | |
596 icon_type, flimflam::kTypeCellular); | |
597 if (label) | |
598 *label = l10n_util::GetStringUTF16(uninitialized_msg); | |
599 } else { | |
600 // Otherwise show the disconnected wifi icon. | |
601 *image = network_icon::GetImageForDisconnectedNetwork( | |
602 icon_type, flimflam::kTypeWifi); | |
603 if (label) { | |
604 *label = l10n_util::GetStringUTF16( | |
605 IDS_ASH_STATUS_TRAY_NETWORK_NOT_CONNECTED); | |
606 } | |
607 } | |
608 return; | |
609 } | |
610 // Get icon and label for connected or connecting network. | |
611 *image = network_icon::GetImageForNetwork(network, icon_type); | |
612 if (label) | |
613 *label = network_icon::GetLabelForNetwork(network, icon_type); | |
614 } | |
615 | |
616 int TrayNetwork::GetUninitializedMsg() { | |
617 NetworkStateHandler* handler = NetworkStateHandler::Get(); | |
618 if (handler->TechnologyUninitialized( | |
619 NetworkStateHandler::kMatchTypeMobile)) { | |
620 uninitialized_msg_ = IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR; | |
621 uninitialized_state_time_ = base::Time::Now(); | |
622 return uninitialized_msg_; | |
623 } else if (handler->GetScanningByType( | |
624 NetworkStateHandler::kMatchTypeMobile)) { | |
625 uninitialized_msg_ = IDS_ASH_STATUS_TRAY_CELLULAR_SCANNING; | |
626 uninitialized_state_time_ = base::Time::Now(); | |
627 return uninitialized_msg_; | |
628 } | |
629 // There can be a delay between leaving the Initializing state and when | |
630 // a Cellular device shows up, so keep showing the initializing | |
631 // animation for a bit to avoid flashing the disconnect icon. | |
632 const int kInitializingDelaySeconds = 1; | |
633 base::TimeDelta dtime = base::Time::Now() - uninitialized_state_time_; | |
634 if (dtime.InSeconds() < kInitializingDelaySeconds) | |
635 return uninitialized_msg_; | |
636 return 0; | |
637 } | |
638 | |
639 void TrayNetwork::LinkClicked(MessageType message_type, int link_id) { | 470 void TrayNetwork::LinkClicked(MessageType message_type, int link_id) { |
640 tray::NetworkMessages::MessageMap::const_iterator iter = | 471 tray::NetworkMessages::MessageMap::const_iterator iter = |
641 messages()->messages().find(message_type); | 472 messages()->messages().find(message_type); |
642 if (iter != messages()->messages().end() && iter->second.delegate) | 473 if (iter != messages()->messages().end() && iter->second.delegate) |
643 iter->second.delegate->NotificationLinkClicked(link_id); | 474 iter->second.delegate->NotificationLinkClicked(link_id); |
644 } | 475 } |
645 | 476 |
646 } // namespace internal | 477 } // namespace internal |
647 } // namespace ash | 478 } // namespace ash |
OLD | NEW |