Index: ash/system/chromeos/network/network_state_list_detailed_view.cc |
diff --git a/ash/system/chromeos/network/network_state_list_detailed_view.cc b/ash/system/chromeos/network/network_state_list_detailed_view.cc |
index 4eb231b113ee809d0722f0f13f4f7a1388c93f9d..3668b64ead4e386edd006d0e4d3c04090e574bf4 100644 |
--- a/ash/system/chromeos/network/network_state_list_detailed_view.cc |
+++ b/ash/system/chromeos/network/network_state_list_detailed_view.cc |
@@ -37,6 +37,7 @@ |
#include "ui/views/layout/fill_layout.h" |
#include "ui/views/widget/widget.h" |
+using chromeos::DeviceState; |
using chromeos::NetworkState; |
using chromeos::NetworkStateHandler; |
@@ -235,12 +236,7 @@ void NetworkStateListDetailedView::ButtonPressed(views::Button* sender, |
flimflam::kTypeWifi, true, |
chromeos::network_handler::ErrorCallback()); |
} else if (sender == button_mobile_) { |
- // TODO: This needs to be fixed to use |
- // NetworkStateHandler::SetTechnologyEnabled instead. Currently |
- // ToggleMobile has code to handle the locked SIM case, which cannot |
- // be moved here yet due to dependencies on src/chrome/* - see, |
- // crbug.com/222540. |
- delegate->ToggleMobile(); |
+ ToggleMobile(); |
} else if (sender == settings_) { |
delegate->ShowNetworkSettings(); |
} else if (sender == proxy_settings_) { |
@@ -396,15 +392,11 @@ void NetworkStateListDetailedView::CreateNetworkExtra() { |
void NetworkStateListDetailedView::UpdateHeaderButtons() { |
NetworkStateHandler* handler = NetworkStateHandler::Get(); |
- if (button_wifi_) { |
- button_wifi_->SetToggled( |
- !handler->TechnologyEnabled(flimflam::kTypeWifi)); |
- } |
+ if (button_wifi_) |
+ UpdateTechnologyButton(button_wifi_, flimflam::kTypeWifi); |
if (button_mobile_) { |
- button_mobile_->SetToggled(!handler->TechnologyEnabled( |
- NetworkStateHandler::kMatchTypeMobile)); |
- button_mobile_->SetVisible(handler->TechnologyAvailable( |
- NetworkStateHandler::kMatchTypeMobile)); |
+ UpdateTechnologyButton( |
+ button_mobile_, NetworkStateHandler::kMatchTypeMobile); |
} |
if (proxy_settings_) |
proxy_settings_->SetEnabled(handler->DefaultNetwork() != NULL); |
@@ -412,6 +404,31 @@ void NetworkStateListDetailedView::UpdateHeaderButtons() { |
static_cast<views::View*>(footer())->Layout(); |
} |
+void NetworkStateListDetailedView::UpdateTechnologyButton( |
+ TrayPopupHeaderButton* button, |
+ const std::string& technology) { |
+ NetworkStateHandler::TechnologyState state = |
+ NetworkStateHandler::Get()->GetTechnologyState(technology); |
+ if (state == NetworkStateHandler::TECHNOLOGY_UNAVAILABLE) { |
+ button->SetVisible(false); |
+ return; |
+ } |
+ button->SetVisible(true); |
+ if (state == NetworkStateHandler::TECHNOLOGY_AVAILABLE) { |
+ button->SetEnabled(true); |
+ button->SetToggled(true); |
+ } else if (state == NetworkStateHandler::TECHNOLOGY_ENABLED) { |
+ button->SetEnabled(true); |
+ button->SetToggled(false); |
+ } else if (state == NetworkStateHandler::TECHNOLOGY_ENABLING) { |
+ button->SetEnabled(false); |
+ button->SetToggled(false); |
+ } else { // Initializing |
+ button->SetEnabled(false); |
+ button->SetToggled(true); |
+ } |
+} |
+ |
void NetworkStateListDetailedView::UpdateNetworks( |
const NetworkStateList& networks) { |
network_list_.clear(); |
@@ -488,7 +505,9 @@ void NetworkStateListDetailedView::UpdateNetworkList() { |
} |
bool NetworkStateListDetailedView::CreateOrUpdateInfoLabel( |
- int index, const string16& text, views::Label** label) { |
+ int index, |
+ const string16& text, |
+ views::Label** label) { |
if (*label == NULL) { |
*label = CreateMenuInfoLabel(text); |
scroll_content()->AddChildViewAt(*label, index); |
@@ -663,22 +682,34 @@ void NetworkStateListDetailedView::UpdateNetworkExtra() { |
NetworkStateHandler* handler = NetworkStateHandler::Get(); |
if (other_wifi_) { |
DCHECK(turn_on_wifi_); |
- if (!handler->TechnologyAvailable(flimflam::kTypeWifi)) { |
+ NetworkStateHandler::TechnologyState state = |
+ handler->GetTechnologyState(flimflam::kTypeWifi); |
+ if (state == NetworkStateHandler::TECHNOLOGY_UNAVAILABLE) { |
turn_on_wifi_->SetVisible(false); |
other_wifi_->SetVisible(false); |
- } else if (!handler->TechnologyEnabled(flimflam::kTypeWifi)) { |
- turn_on_wifi_->SetVisible(true); |
- other_wifi_->SetVisible(false); |
} else { |
- turn_on_wifi_->SetVisible(false); |
- other_wifi_->SetVisible(true); |
+ if (state == NetworkStateHandler::TECHNOLOGY_AVAILABLE) { |
+ turn_on_wifi_->SetVisible(true); |
+ turn_on_wifi_->SetEnabled(true); |
+ other_wifi_->SetVisible(false); |
+ } else if (state == NetworkStateHandler::TECHNOLOGY_ENABLED) { |
+ turn_on_wifi_->SetVisible(false); |
+ other_wifi_->SetVisible(true); |
+ } else { |
+ // Initializing or Enabling |
+ turn_on_wifi_->SetVisible(true); |
+ turn_on_wifi_->SetEnabled(false); |
+ other_wifi_->SetVisible(false); |
+ } |
} |
layout_parent = other_wifi_->parent(); |
} |
if (other_mobile_) { |
bool show_other_mobile = false; |
- if (handler->TechnologyAvailable(NetworkStateHandler::kMatchTypeMobile)) { |
+ NetworkStateHandler::TechnologyState state = |
+ handler->GetTechnologyState(NetworkStateHandler::kMatchTypeMobile); |
+ if (state != NetworkStateHandler::TECHNOLOGY_UNAVAILABLE) { |
const chromeos::DeviceState* device = |
handler->GetDeviceStateByType(NetworkStateHandler::kMatchTypeMobile); |
show_other_mobile = (device && device->support_network_scan()); |
@@ -686,7 +717,7 @@ void NetworkStateListDetailedView::UpdateNetworkExtra() { |
if (show_other_mobile) { |
other_mobile_->SetVisible(true); |
other_mobile_->SetEnabled( |
- handler->TechnologyEnabled(NetworkStateHandler::kMatchTypeMobile)); |
+ state == NetworkStateHandler::TECHNOLOGY_ENABLED); |
} else { |
other_mobile_->SetVisible(false); |
} |
@@ -803,6 +834,32 @@ void NetworkStateListDetailedView::ConnectToNetwork( |
} |
} |
+void NetworkStateListDetailedView::ToggleMobile() { |
+ NetworkStateHandler* handler = NetworkStateHandler::Get(); |
+ bool enabled = |
+ handler->TechnologyEnabled(NetworkStateHandler::kMatchTypeMobile); |
+ if (enabled) { |
+ handler->SetTechnologyEnabled( |
+ NetworkStateHandler::kMatchTypeMobile, false, |
+ chromeos::network_handler::ErrorCallback()); |
+ } else { |
+ const DeviceState* mobile = |
+ handler->GetDeviceStateByType(NetworkStateHandler::kMatchTypeMobile); |
+ if (!mobile) { |
+ LOG(ERROR) << "Mobile device not found."; |
+ return; |
+ } |
+ if (!mobile->sim_lock_type().empty() || mobile->IsSimAbsent()) { |
+ // TODO(stevenjb): Rename ToggleMobile() to ShowMobileSimDialog() |
+ // when NetworkListDetailedView is dperecated. crbug.com/222540. |
Greg Spencer (Chromium)
2013/04/11 21:35:12
dperecated --> deprecated
stevenjb
2013/04/15 18:49:33
Done.
|
+ ash::Shell::GetInstance()->system_tray_delegate()->ToggleMobile(); |
+ } else { |
+ handler->SetTechnologyEnabled( |
+ NetworkStateHandler::kMatchTypeMobile, true, |
+ chromeos::network_handler::ErrorCallback()); |
+ } |
+ } |
+} |
} // namespace tray |
} // namespace internal |