| 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
|
|
|