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 b127de17288794a9157b430814cbb67327f5c00b..661cb47b4646374246d07eba1983587f2282f63f 100644 |
--- a/ash/system/chromeos/network/network_state_list_detailed_view.cc |
+++ b/ash/system/chromeos/network/network_state_list_detailed_view.cc |
@@ -39,6 +39,7 @@ |
#include "ui/views/layout/fill_layout.h" |
#include "ui/views/widget/widget.h" |
+using chromeos::DeviceState; |
using chromeos::NetworkState; |
using chromeos::NetworkStateHandler; |
@@ -230,7 +231,7 @@ void NetworkStateListDetailedView::ButtonPressed(views::Button* sender, |
ash::SystemTrayDelegate* delegate = |
ash::Shell::GetInstance()->system_tray_delegate(); |
if (sender == button_wifi_) { |
- bool enabled = handler->TechnologyEnabled(flimflam::kTypeWifi); |
+ bool enabled = handler->IsTechnologyEnabled(flimflam::kTypeWifi); |
handler->SetTechnologyEnabled( |
flimflam::kTypeWifi, !enabled, |
chromeos::network_handler::ErrorCallback()); |
@@ -239,12 +240,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_) { |
@@ -400,15 +396,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); |
@@ -416,6 +408,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(); |
@@ -564,7 +581,7 @@ bool NetworkStateListDetailedView::UpdateNetworkListEntries( |
// Cellular initializing |
int status_message_id = network_icon::GetCellularUninitializedMsg(); |
if (!status_message_id && |
- handler->TechnologyEnabled(NetworkStateHandler::kMatchTypeMobile) && |
+ handler->IsTechnologyEnabled(NetworkStateHandler::kMatchTypeMobile) && |
!handler->FirstNetworkByType(NetworkStateHandler::kMatchTypeMobile)) { |
status_message_id = IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS; |
} |
@@ -580,7 +597,7 @@ bool NetworkStateListDetailedView::UpdateNetworkListEntries( |
// "Wifi Enabled / Disabled" |
if (network_list_.empty()) { |
- int message_id = handler->TechnologyEnabled(flimflam::kTypeWifi) ? |
+ int message_id = handler->IsTechnologyEnabled(flimflam::kTypeWifi) ? |
IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED : |
IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; |
base::string16 text = rb.GetLocalizedString(message_id); |
@@ -667,22 +684,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()); |
@@ -690,7 +719,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); |
} |
@@ -817,6 +846,33 @@ void NetworkStateListDetailedView::CallRequestScan() { |
base::TimeDelta::FromSeconds(kRequestScanDelaySeconds)); |
} |
+void NetworkStateListDetailedView::ToggleMobile() { |
+ NetworkStateHandler* handler = NetworkStateHandler::Get(); |
+ bool enabled = |
+ handler->IsTechnologyEnabled(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 deprecated. crbug.com/222540. |
+ ash::Shell::GetInstance()->system_tray_delegate()->ToggleMobile(); |
+ } else { |
+ handler->SetTechnologyEnabled( |
+ NetworkStateHandler::kMatchTypeMobile, true, |
+ chromeos::network_handler::ErrorCallback()); |
+ } |
+ } |
+} |
+ |
} // namespace tray |
} // namespace internal |
} // namespace ash |