Index: chrome/browser/chromeos/status/network_menu_button.cc |
=================================================================== |
--- chrome/browser/chromeos/status/network_menu_button.cc (revision 64888) |
+++ chrome/browser/chromeos/status/network_menu_button.cc (working copy) |
@@ -35,16 +35,12 @@ |
ALLOW_THIS_IN_INITIALIZER_LIST(animation_connecting_(this)) { |
animation_connecting_.SetThrobDuration(kThrobDuration); |
animation_connecting_.SetTweenType(Tween::EASE_IN_OUT); |
- OnNetworkManagerChanged(CrosLibrary::Get()->GetNetworkLibrary()); |
- CrosLibrary::Get()->GetNetworkLibrary()->AddNetworkManagerObserver(this); |
- CrosLibrary::Get()->GetNetworkLibrary()->AddCellularDataPlanObserver(this); |
+ NetworkChanged(CrosLibrary::Get()->GetNetworkLibrary()); |
+ CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(this); |
} |
NetworkMenuButton::~NetworkMenuButton() { |
- NetworkLibrary* netlib = CrosLibrary::Get()->GetNetworkLibrary(); |
- netlib->RemoveNetworkManagerObserver(this); |
- netlib->RemoveObserverForAllNetworks(this); |
- netlib->RemoveCellularDataPlanObserver(this); |
+ CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -77,27 +73,11 @@ |
} |
//////////////////////////////////////////////////////////////////////////////// |
-// NetworkMenuButton, NetworkLibrary::NetworkManagerObserver implementation: |
+// NetworkMenuButton, NetworkLibrary::Observer implementation: |
-void NetworkMenuButton::OnNetworkManagerChanged(NetworkLibrary* cros) { |
+void NetworkMenuButton::NetworkChanged(NetworkLibrary* cros) { |
ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
if (CrosLibrary::Get()->EnsureLoaded()) { |
- // Add an observer for the active network, if any |
- const Network* network = cros->active_network(); |
- if (active_network_.empty() || network == NULL || |
- active_network_ != network->service_path()) { |
- if (!active_network_.empty()) { |
- cros->RemoveNetworkObserver(active_network_, this); |
- } |
- if (network != NULL) { |
- cros->AddNetworkObserver(network->service_path(), this); |
- } |
- } |
- if (network) |
- active_network_ = network->service_path(); |
- else |
- active_network_ = ""; |
- |
if (cros->wifi_connecting() || cros->cellular_connecting()) { |
// Start the connecting animation if not running. |
if (!animation_connecting_.is_animating()) { |
@@ -118,35 +98,68 @@ |
} else { |
// Stop connecting animation since we are not connecting. |
animation_connecting_.Stop(); |
- if (!cros->Connected()) { |
+ |
+ // Always show the higher priority connection first. Ethernet then wifi. |
+ if (cros->ethernet_connected()) { |
+ SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_WIRED)); |
+ SetTooltipText( |
+ l10n_util::GetStringF( |
+ IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, |
+ l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET))); |
+ } else if (cros->wifi_connected()) { |
+ SetIcon(IconForNetworkStrength( |
+ cros->wifi_network()->strength(), false)); |
+ SetTooltipText(l10n_util::GetStringF( |
+ IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, |
+ UTF8ToWide(cros->wifi_network()->name()))); |
+ } else if (cros->cellular_connected()) { |
+ const CellularNetwork* cellular = cros->cellular_network(); |
+ if (cellular->data_left() == CellularNetwork::DATA_NONE) { |
+ // If no data, then we show 0 bars. |
+ SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); |
+ } else { |
+ SetIcon(IconForNetworkStrength(cellular)); |
+ } |
+ SetTooltipText(l10n_util::GetStringF( |
+ IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, |
+ UTF8ToWide(cellular->name()))); |
+ } else { |
SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); |
SetTooltipText(l10n_util::GetString( |
IDS_STATUSBAR_NETWORK_NO_NETWORK_TOOLTIP)); |
- } else { |
- SetNetworkIcon(network); |
} |
} |
- SetNetworkBadge(cros, network); |
- } else { |
- SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); |
- SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_WARNING)); |
- SetTooltipText(l10n_util::GetString( |
- IDS_STATUSBAR_NETWORK_NO_NETWORK_TOOLTIP)); |
- } |
- SchedulePaint(); |
- UpdateMenu(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// NetworkMenuButton, NetworkLibrary::NetworkObserver implementation: |
-void NetworkMenuButton::OnNetworkChanged(NetworkLibrary* cros, |
- const Network* network) { |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- if (CrosLibrary::Get()->EnsureLoaded()) { |
- // Always show the active network connection, if any. |
- SetNetworkIcon(network); |
- SetNetworkBadge(cros, network); |
+ // Figure out whether or not to show a badge. |
+ int id = -1; |
+ if (cros->Connecting()) { |
+ if (cros->cellular_connecting()) { |
+ id = IDR_STATUSBAR_NETWORK_3G; |
+ } |
+ } else if (cros->Connected()) { |
+ if (!cros->ethernet_connected() && !cros->wifi_connected() && |
+ cros->cellular_connected()) { |
+ switch (cros->cellular_network()->data_left()) { |
+ case CellularNetwork::DATA_NONE: |
+ case CellularNetwork::DATA_VERY_LOW: |
+ id = IDR_STATUSBAR_NETWORK_3G_ERROR; |
+ break; |
+ case CellularNetwork::DATA_LOW: |
+ id = IDR_STATUSBAR_NETWORK_3G_WARN; |
+ break; |
+ case CellularNetwork::DATA_NORMAL: |
+ id = IDR_STATUSBAR_NETWORK_3G; |
+ break; |
+ } |
+ } |
+ } else { |
+ id = IDR_STATUSBAR_NETWORK_DISCONNECTED; |
+ } |
+ if (id != -1) { |
+ SetBadge(*rb.GetBitmapNamed(id)); |
+ } else { |
+ SetBadge(SkBitmap()); |
+ } |
} else { |
SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); |
SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_WARNING)); |
@@ -158,9 +171,9 @@ |
UpdateMenu(); |
} |
-void NetworkMenuButton::OnCellularDataPlanChanged(NetworkLibrary* cros) { |
- // Call OnNetworkManagerChanged which will update the icon. |
- OnNetworkManagerChanged(cros); |
+void NetworkMenuButton::CellularDataPlanChanged(NetworkLibrary* cros) { |
+ // Call NetworkChanged which will update the icon. |
+ NetworkChanged(cros); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -182,54 +195,4 @@ |
return host_->ShouldOpenButtonOptions(this); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// NetworkMenuButton, private methods |
- |
-void NetworkMenuButton::SetNetworkIcon(const Network* network) { |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- if (network && network->is_active()) { |
- if (network->type() == TYPE_ETHERNET) { |
- SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_WIRED)); |
- SetTooltipText( |
- l10n_util::GetStringF( |
- IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, |
- l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET))); |
- } else if (network->type() == TYPE_WIFI) { |
- const WifiNetwork* wifi = static_cast<const WifiNetwork*>(network); |
- SetIcon(IconForNetworkStrength(wifi->strength(), false)); |
- SetTooltipText(l10n_util::GetStringF( |
- IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, |
- UTF8ToWide(wifi->name()))); |
- } else if (network->type() == TYPE_CELLULAR) { |
- const CellularNetwork* cellular = |
- static_cast<const CellularNetwork*>(network); |
- if (cellular->data_left() == CellularNetwork::DATA_NONE) { |
- // If no data, then we show 0 bars. |
- SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); |
- } else { |
- SetIcon(IconForNetworkStrength(cellular)); |
- } |
- SetTooltipText(l10n_util::GetStringF( |
- IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, |
- UTF8ToWide(cellular->name()))); |
- } |
- } |
-} |
- |
-void NetworkMenuButton::SetNetworkBadge(NetworkLibrary* cros, |
- const Network* network) { |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- // Figure out whether or not to show a badge. |
- if (network && network->type() == TYPE_CELLULAR && |
- (network->is_active() || network->connecting())) { |
- const CellularNetwork* cellular |
- = static_cast<const CellularNetwork*>(network); |
- SetBadge(BadgeForNetworkTechnology(cellular)); |
- } else if (!cros->Connected() && !cros->Connecting()) { |
- SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED)); |
- } else { |
- SetBadge(SkBitmap()); |
- } |
-} |
- |
} // namespace chromeos |