Chromium Code Reviews| Index: ash/system/network/tray_network.cc |
| diff --git a/ash/system/network/tray_network.cc b/ash/system/network/tray_network.cc |
| index 86ee617ffed63baa9f0a86d824c17afafe9710db..9970bdd2c49a0a77793c15bf604ca9b2479c39a4 100644 |
| --- a/ash/system/network/tray_network.cc |
| +++ b/ash/system/network/tray_network.cc |
| @@ -197,11 +197,22 @@ class NetworkDefaultView : public TrayItemMore { |
| DISALLOW_COPY_AND_ASSIGN(NetworkDefaultView); |
| }; |
| -class NetworkDetailedView : public TrayDetailsView, |
| - public views::ButtonListener, |
| - public ViewClickListener { |
| +class NetworkDetailedView : public TrayDetailsView { |
| public: |
| - explicit NetworkDetailedView(user::LoginStatus login) |
| + NetworkDetailedView() {} |
| + |
| + virtual ~NetworkDetailedView() {} |
| + |
| + virtual TrayNetwork::DetailedViewType view_type() const = 0; |
|
stevenjb
2012/08/02 19:55:56
nit: I think this should be named GetViewType() si
mazda
2012/08/02 21:01:48
Done.
|
| + |
| + virtual void Update() = 0; |
| +}; |
| + |
| +class NetworkListDetailedView : public NetworkDetailedView, |
| + public views::ButtonListener, |
| + public ViewClickListener { |
| + public: |
| + NetworkListDetailedView(user::LoginStatus login) |
| : login_(login), |
| airplane_(NULL), |
| info_icon_(NULL), |
| @@ -220,7 +231,7 @@ class NetworkDetailedView : public TrayDetailsView, |
| Update(); |
| } |
| - virtual ~NetworkDetailedView() { |
| + virtual ~NetworkListDetailedView() { |
| if (info_bubble_) |
| info_bubble_->GetWidget()->CloseNow(); |
| } |
| @@ -247,7 +258,12 @@ class NetworkDetailedView : public TrayDetailsView, |
| Update(); |
| } |
| - void Update() { |
| + // Overridden from NetworkDetailedView: |
| + virtual TrayNetwork::DetailedViewType view_type() const OVERRIDE { |
| + return TrayNetwork::LIST_VIEW; |
| + } |
| + |
| + virtual void Update() OVERRIDE { |
| UpdateHeaderButtons(); |
| UpdateNetworkEntries(); |
| UpdateNetworkExtra(); |
| @@ -608,7 +624,44 @@ class NetworkDetailedView : public TrayDetailsView, |
| views::BubbleDelegateView* info_bubble_; |
| - DISALLOW_COPY_AND_ASSIGN(NetworkDetailedView); |
| + DISALLOW_COPY_AND_ASSIGN(NetworkListDetailedView); |
| +}; |
| + |
| +class NetworkWifiDetailedView : public NetworkDetailedView { |
| + public: |
| + explicit NetworkWifiDetailedView(bool wifi_enabled) { |
| + SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
| + kTrayPopupPaddingHorizontal, |
| + 10, |
| + kTrayPopupPaddingBetweenItems)); |
| + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| + views::ImageView* image = new views::ImageView; |
| + const int image_id = wifi_enabled ? |
| + IDR_AURA_UBER_TRAY_WIFI_ENABLED : IDR_AURA_UBER_TRAY_WIFI_DISABLED; |
| + image->SetImage(bundle.GetImageNamed(image_id).ToImageSkia()); |
| + AddChildView(image); |
| + |
| + const int string_id = wifi_enabled ? |
| + IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED: |
| + IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; |
| + views::Label* label = |
| + new views::Label(bundle.GetLocalizedString(string_id)); |
| + label->SetMultiLine(true); |
| + label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
| + AddChildView(label); |
| + } |
| + |
| + virtual ~NetworkWifiDetailedView() {} |
| + |
| + // Overridden from NetworkDetailedView: |
| + virtual TrayNetwork::DetailedViewType view_type() const OVERRIDE { |
| + return TrayNetwork::WIFI_VIEW; |
| + } |
| + |
| + virtual void Update() OVERRIDE {} |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(NetworkWifiDetailedView); |
| }; |
| class NetworkErrorView : public views::View, |
| @@ -712,7 +765,8 @@ TrayNetwork::TrayNetwork() |
| default_(NULL), |
| detailed_(NULL), |
| notification_(NULL), |
| - errors_(new tray::NetworkErrors()) { |
| + errors_(new tray::NetworkErrors()), |
| + request_wifi_view_(false) { |
| } |
| TrayNetwork::~TrayNetwork() { |
| @@ -732,7 +786,14 @@ views::View* TrayNetwork::CreateDefaultView(user::LoginStatus status) { |
| views::View* TrayNetwork::CreateDetailedView(user::LoginStatus status) { |
| CHECK(detailed_ == NULL); |
| - detailed_ = new tray::NetworkDetailedView(status); |
| + if (request_wifi_view_) { |
| + SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate(); |
| + // The Wi-Fi state is not toggled yet at this point. |
| + detailed_ = new tray::NetworkWifiDetailedView(!delegate->GetWifiEnabled()); |
| + request_wifi_view_ = false; |
| + } else { |
| + detailed_ = new tray::NetworkListDetailedView(status); |
| + } |
| return detailed_; |
| } |
| @@ -802,6 +863,13 @@ void TrayNetwork::ClearNetworkError(ErrorType error_type) { |
| ShowNotificationView(); |
| } |
| +void TrayNetwork::OnWillToggleWifi() { |
| + if (!detailed_ || detailed_->view_type() == WIFI_VIEW) { |
| + request_wifi_view_ = true; |
| + PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); |
| + } |
| +} |
| + |
| void TrayNetwork::LinkClicked(ErrorType error_type) { |
| tray::NetworkErrors::ErrorMap::const_iterator iter = |
| errors()->messages().find(error_type); |