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/network/tray_network.h" | 5 #include "ash/system/network/tray_network.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/shell_window_ids.h" | 8 #include "ash/shell_window_ids.h" |
9 #include "ash/system/tray/system_tray.h" | 9 #include "ash/system/tray/system_tray.h" |
10 #include "ash/system/tray/system_tray_delegate.h" | 10 #include "ash/system/tray/system_tray_delegate.h" |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 GetMostRelevantNetworkIcon(&info, true); | 190 GetMostRelevantNetworkIcon(&info, true); |
191 SetImage(&info.image); | 191 SetImage(&info.image); |
192 SetLabel(info.description); | 192 SetLabel(info.description); |
193 SetAccessibleName(info.description); | 193 SetAccessibleName(info.description); |
194 } | 194 } |
195 | 195 |
196 private: | 196 private: |
197 DISALLOW_COPY_AND_ASSIGN(NetworkDefaultView); | 197 DISALLOW_COPY_AND_ASSIGN(NetworkDefaultView); |
198 }; | 198 }; |
199 | 199 |
200 class NetworkDetailedView : public TrayDetailsView, | 200 class NetworkDetailedView : public TrayDetailsView { |
201 public views::ButtonListener, | |
202 public ViewClickListener { | |
203 public: | 201 public: |
204 explicit NetworkDetailedView(user::LoginStatus login) | 202 NetworkDetailedView() {} |
| 203 |
| 204 virtual ~NetworkDetailedView() {} |
| 205 |
| 206 virtual TrayNetwork::DetailedViewType GetViewType() const = 0; |
| 207 |
| 208 virtual void Update() = 0; |
| 209 }; |
| 210 |
| 211 class NetworkListDetailedView : public NetworkDetailedView, |
| 212 public views::ButtonListener, |
| 213 public ViewClickListener { |
| 214 public: |
| 215 NetworkListDetailedView(user::LoginStatus login) |
205 : login_(login), | 216 : login_(login), |
206 airplane_(NULL), | 217 airplane_(NULL), |
207 info_icon_(NULL), | 218 info_icon_(NULL), |
208 button_wifi_(NULL), | 219 button_wifi_(NULL), |
209 button_mobile_(NULL), | 220 button_mobile_(NULL), |
210 view_mobile_account_(NULL), | 221 view_mobile_account_(NULL), |
211 setup_mobile_account_(NULL), | 222 setup_mobile_account_(NULL), |
212 other_wifi_(NULL), | 223 other_wifi_(NULL), |
213 other_mobile_(NULL), | 224 other_mobile_(NULL), |
214 settings_(NULL), | 225 settings_(NULL), |
215 proxy_settings_(NULL), | 226 proxy_settings_(NULL), |
216 info_bubble_(NULL) { | 227 info_bubble_(NULL) { |
217 SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate(); | 228 SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate(); |
218 delegate->RequestNetworkScan(); | 229 delegate->RequestNetworkScan(); |
219 CreateItems(); | 230 CreateItems(); |
220 Update(); | 231 Update(); |
221 } | 232 } |
222 | 233 |
223 virtual ~NetworkDetailedView() { | 234 virtual ~NetworkListDetailedView() { |
224 if (info_bubble_) | 235 if (info_bubble_) |
225 info_bubble_->GetWidget()->CloseNow(); | 236 info_bubble_->GetWidget()->CloseNow(); |
226 } | 237 } |
227 | 238 |
228 void CreateItems() { | 239 void CreateItems() { |
229 RemoveAllChildViews(true); | 240 RemoveAllChildViews(true); |
230 | 241 |
231 airplane_ = NULL; | 242 airplane_ = NULL; |
232 info_icon_ = NULL; | 243 info_icon_ = NULL; |
233 button_wifi_ = NULL; | 244 button_wifi_ = NULL; |
234 button_mobile_ = NULL; | 245 button_mobile_ = NULL; |
235 view_mobile_account_ = NULL; | 246 view_mobile_account_ = NULL; |
236 setup_mobile_account_ = NULL; | 247 setup_mobile_account_ = NULL; |
237 other_wifi_ = NULL; | 248 other_wifi_ = NULL; |
238 other_mobile_ = NULL; | 249 other_mobile_ = NULL; |
239 settings_ = NULL; | 250 settings_ = NULL; |
240 proxy_settings_ = NULL; | 251 proxy_settings_ = NULL; |
241 | 252 |
242 AppendNetworkEntries(); | 253 AppendNetworkEntries(); |
243 AppendNetworkExtra(); | 254 AppendNetworkExtra(); |
244 AppendHeaderEntry(); | 255 AppendHeaderEntry(); |
245 AppendHeaderButtons(); | 256 AppendHeaderButtons(); |
246 | 257 |
247 Update(); | 258 Update(); |
248 } | 259 } |
249 | 260 |
250 void Update() { | 261 // Overridden from NetworkDetailedView: |
| 262 virtual TrayNetwork::DetailedViewType GetViewType() const OVERRIDE { |
| 263 return TrayNetwork::LIST_VIEW; |
| 264 } |
| 265 |
| 266 virtual void Update() OVERRIDE { |
251 UpdateHeaderButtons(); | 267 UpdateHeaderButtons(); |
252 UpdateNetworkEntries(); | 268 UpdateNetworkEntries(); |
253 UpdateNetworkExtra(); | 269 UpdateNetworkExtra(); |
254 | 270 |
255 Layout(); | 271 Layout(); |
256 } | 272 } |
257 | 273 |
258 private: | 274 private: |
259 void AppendHeaderEntry() { | 275 void AppendHeaderEntry() { |
260 CreateSpecialRow(IDS_ASH_STATUS_TRAY_NETWORK, this); | 276 CreateSpecialRow(IDS_ASH_STATUS_TRAY_NETWORK, this); |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 TrayPopupHeaderButton* button_mobile_; | 620 TrayPopupHeaderButton* button_mobile_; |
605 views::View* view_mobile_account_; | 621 views::View* view_mobile_account_; |
606 views::View* setup_mobile_account_; | 622 views::View* setup_mobile_account_; |
607 TrayPopupTextButton* other_wifi_; | 623 TrayPopupTextButton* other_wifi_; |
608 TrayPopupTextButton* other_mobile_; | 624 TrayPopupTextButton* other_mobile_; |
609 TrayPopupTextButton* settings_; | 625 TrayPopupTextButton* settings_; |
610 TrayPopupTextButton* proxy_settings_; | 626 TrayPopupTextButton* proxy_settings_; |
611 | 627 |
612 views::BubbleDelegateView* info_bubble_; | 628 views::BubbleDelegateView* info_bubble_; |
613 | 629 |
614 DISALLOW_COPY_AND_ASSIGN(NetworkDetailedView); | 630 DISALLOW_COPY_AND_ASSIGN(NetworkListDetailedView); |
| 631 }; |
| 632 |
| 633 class NetworkWifiDetailedView : public NetworkDetailedView { |
| 634 public: |
| 635 explicit NetworkWifiDetailedView(bool wifi_enabled) { |
| 636 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
| 637 kTrayPopupPaddingHorizontal, |
| 638 10, |
| 639 kTrayPopupPaddingBetweenItems)); |
| 640 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 641 views::ImageView* image = new views::ImageView; |
| 642 const int image_id = wifi_enabled ? |
| 643 IDR_AURA_UBER_TRAY_WIFI_ENABLED : IDR_AURA_UBER_TRAY_WIFI_DISABLED; |
| 644 image->SetImage(bundle.GetImageNamed(image_id).ToImageSkia()); |
| 645 AddChildView(image); |
| 646 |
| 647 const int string_id = wifi_enabled ? |
| 648 IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED: |
| 649 IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; |
| 650 views::Label* label = |
| 651 new views::Label(bundle.GetLocalizedString(string_id)); |
| 652 label->SetMultiLine(true); |
| 653 label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
| 654 AddChildView(label); |
| 655 } |
| 656 |
| 657 virtual ~NetworkWifiDetailedView() {} |
| 658 |
| 659 // Overridden from NetworkDetailedView: |
| 660 virtual TrayNetwork::DetailedViewType GetViewType() const OVERRIDE { |
| 661 return TrayNetwork::WIFI_VIEW; |
| 662 } |
| 663 |
| 664 virtual void Update() OVERRIDE {} |
| 665 |
| 666 private: |
| 667 DISALLOW_COPY_AND_ASSIGN(NetworkWifiDetailedView); |
615 }; | 668 }; |
616 | 669 |
617 class NetworkErrorView : public views::View, | 670 class NetworkErrorView : public views::View, |
618 public views::LinkListener { | 671 public views::LinkListener { |
619 public: | 672 public: |
620 NetworkErrorView(TrayNetwork* tray, | 673 NetworkErrorView(TrayNetwork* tray, |
621 TrayNetwork::ErrorType error_type, | 674 TrayNetwork::ErrorType error_type, |
622 const NetworkErrors::Message& error) | 675 const NetworkErrors::Message& error) |
623 : tray_(tray), | 676 : tray_(tray), |
624 error_type_(error_type) { | 677 error_type_(error_type) { |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 DISALLOW_COPY_AND_ASSIGN(NetworkNotificationView); | 761 DISALLOW_COPY_AND_ASSIGN(NetworkNotificationView); |
709 }; | 762 }; |
710 | 763 |
711 } // namespace tray | 764 } // namespace tray |
712 | 765 |
713 TrayNetwork::TrayNetwork() | 766 TrayNetwork::TrayNetwork() |
714 : tray_(NULL), | 767 : tray_(NULL), |
715 default_(NULL), | 768 default_(NULL), |
716 detailed_(NULL), | 769 detailed_(NULL), |
717 notification_(NULL), | 770 notification_(NULL), |
718 errors_(new tray::NetworkErrors()) { | 771 errors_(new tray::NetworkErrors()), |
| 772 request_wifi_view_(false) { |
719 } | 773 } |
720 | 774 |
721 TrayNetwork::~TrayNetwork() { | 775 TrayNetwork::~TrayNetwork() { |
722 } | 776 } |
723 | 777 |
724 views::View* TrayNetwork::CreateTrayView(user::LoginStatus status) { | 778 views::View* TrayNetwork::CreateTrayView(user::LoginStatus status) { |
725 CHECK(tray_ == NULL); | 779 CHECK(tray_ == NULL); |
726 tray_ = new tray::NetworkTrayView(tray::LIGHT, true /*tray_icon*/); | 780 tray_ = new tray::NetworkTrayView(tray::LIGHT, true /*tray_icon*/); |
727 return tray_; | 781 return tray_; |
728 } | 782 } |
729 | 783 |
730 views::View* TrayNetwork::CreateDefaultView(user::LoginStatus status) { | 784 views::View* TrayNetwork::CreateDefaultView(user::LoginStatus status) { |
731 CHECK(default_ == NULL); | 785 CHECK(default_ == NULL); |
732 default_ = new tray::NetworkDefaultView(this); | 786 default_ = new tray::NetworkDefaultView(this); |
733 return default_; | 787 return default_; |
734 } | 788 } |
735 | 789 |
736 views::View* TrayNetwork::CreateDetailedView(user::LoginStatus status) { | 790 views::View* TrayNetwork::CreateDetailedView(user::LoginStatus status) { |
737 CHECK(detailed_ == NULL); | 791 CHECK(detailed_ == NULL); |
738 detailed_ = new tray::NetworkDetailedView(status); | 792 if (request_wifi_view_) { |
| 793 SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate(); |
| 794 // The Wi-Fi state is not toggled yet at this point. |
| 795 detailed_ = new tray::NetworkWifiDetailedView(!delegate->GetWifiEnabled()); |
| 796 request_wifi_view_ = false; |
| 797 } else { |
| 798 detailed_ = new tray::NetworkListDetailedView(status); |
| 799 } |
739 return detailed_; | 800 return detailed_; |
740 } | 801 } |
741 | 802 |
742 views::View* TrayNetwork::CreateNotificationView(user::LoginStatus status) { | 803 views::View* TrayNetwork::CreateNotificationView(user::LoginStatus status) { |
743 CHECK(notification_ == NULL); | 804 CHECK(notification_ == NULL); |
744 if (errors_->messages().empty()) | 805 if (errors_->messages().empty()) |
745 return NULL; // Error has already been cleared. | 806 return NULL; // Error has already been cleared. |
746 notification_ = new tray::NetworkNotificationView(this); | 807 notification_ = new tray::NetworkNotificationView(this); |
747 return notification_; | 808 return notification_; |
748 } | 809 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 if (notification_) | 859 if (notification_) |
799 HideNotificationView(); | 860 HideNotificationView(); |
800 return; | 861 return; |
801 } | 862 } |
802 if (notification_) | 863 if (notification_) |
803 notification_->Update(); | 864 notification_->Update(); |
804 else | 865 else |
805 ShowNotificationView(); | 866 ShowNotificationView(); |
806 } | 867 } |
807 | 868 |
| 869 void TrayNetwork::OnWillToggleWifi() { |
| 870 if (!detailed_ || detailed_->GetViewType() == WIFI_VIEW) { |
| 871 request_wifi_view_ = true; |
| 872 PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); |
| 873 } |
| 874 } |
| 875 |
808 void TrayNetwork::LinkClicked(ErrorType error_type) { | 876 void TrayNetwork::LinkClicked(ErrorType error_type) { |
809 tray::NetworkErrors::ErrorMap::const_iterator iter = | 877 tray::NetworkErrors::ErrorMap::const_iterator iter = |
810 errors()->messages().find(error_type); | 878 errors()->messages().find(error_type); |
811 if (iter != errors()->messages().end() && iter->second.delegate) | 879 if (iter != errors()->messages().end() && iter->second.delegate) |
812 iter->second.delegate->NotificationLinkClicked(); | 880 iter->second.delegate->NotificationLinkClicked(); |
813 } | 881 } |
814 | 882 |
815 } // namespace internal | 883 } // namespace internal |
816 } // namespace ash | 884 } // namespace ash |
OLD | NEW |