diff options
author | nkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-05 12:15:48 +0000 |
---|---|---|
committer | nkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-05 12:15:48 +0000 |
commit | 676e352fca95008ac2c36b976ba59485cb27d1b1 (patch) | |
tree | 11ab9cc0c6775e84fac21de8ec4329ec3357a483 | |
parent | f4944353d0156fcf18844d180b2f5a72611a337b (diff) | |
download | chromium_src-676e352fca95008ac2c36b976ba59485cb27d1b1.zip chromium_src-676e352fca95008ac2c36b976ba59485cb27d1b1.tar.gz chromium_src-676e352fca95008ac2c36b976ba59485cb27d1b1.tar.bz2 |
Provide notification on network connecting.
Review URL: http://codereview.chromium.org/646022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40734 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/app/generated_resources.grd | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/network_selection_view.cc | 84 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/network_selection_view.h | 12 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_list.cc | 28 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_list.h | 20 |
5 files changed, 119 insertions, 28 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 0b0de03..f14c81f 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -6747,6 +6747,9 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_NETWORK_SELECTION_NONE" desc="Text shown in combobox when no network are selected"> No selection </message> + <message name="IDS_NETWORK_SELECTION_CONNECTING" desc="Text shown when known device is connecting to known network"> + Connecting to <ph name="NETWORK_ID">$1<ex>Public Wifi</ex></ph> + </message> <message name="IDS_NETWORK_SELECTION_OFFLINE_BUTTON" desc="Text shown on work offline button"> Work offline </message> diff --git a/chrome/browser/chromeos/login/network_selection_view.cc b/chrome/browser/chromeos/login/network_selection_view.cc index b37ba28..47bfcc5 100644 --- a/chrome/browser/chromeos/login/network_selection_view.cc +++ b/chrome/browser/chromeos/login/network_selection_view.cc @@ -44,12 +44,15 @@ NetworkSelectionView::NetworkSelectionView(chromeos::ScreenObserver* observer) : network_combobox_(NULL), welcome_label_(NULL), select_network_label_(NULL), - observer_(observer) { - chromeos::NetworkLibrary::Get()->AddObserver(this); + connecting_network_label_(NULL), + observer_(observer), + network_notification_(false) { + ChangeNetworkNotification(true); } NetworkSelectionView::~NetworkSelectionView() { - chromeos::NetworkLibrary::Get()->RemoveObserver(this); + if (network_notification_) + ChangeNetworkNotification(false); } void NetworkSelectionView::Init() { @@ -62,15 +65,19 @@ void NetworkSelectionView::Init() { gfx::Font welcome_label_font = gfx::Font::CreateFont(L"Droid Sans", 20).DeriveFont(0, gfx::Font::BOLD); - gfx::Font network_label_font = gfx::Font::CreateFont(L"Droid Sans", 9); - gfx::Font button_font = network_label_font; + gfx::Font label_font = gfx::Font::CreateFont(L"Droid Sans", 9); + gfx::Font button_font = label_font; welcome_label_ = new views::Label(); welcome_label_->SetColor(kWelcomeColor); welcome_label_->SetFont(welcome_label_font); select_network_label_ = new views::Label(); - select_network_label_->SetFont(network_label_font); + select_network_label_->SetFont(label_font); + + connecting_network_label_ = new views::Label(); + connecting_network_label_->SetFont(label_font); + connecting_network_label_->SetVisible(false); network_combobox_ = new views::Combobox(this); network_combobox_->set_listener(this); @@ -79,9 +86,11 @@ void NetworkSelectionView::Init() { offline_button_->set_font(button_font); UpdateLocalizedStrings(); + Refresh(); AddChildView(welcome_label_); AddChildView(select_network_label_); + AddChildView(connecting_network_label_); AddChildView(network_combobox_); AddChildView(offline_button_); } @@ -93,6 +102,11 @@ void NetworkSelectionView::UpdateLocalizedStrings() { l10n_util::GetString(IDS_NETWORK_SELECTION_SELECT)); offline_button_->SetLabel( l10n_util::GetString(IDS_NETWORK_SELECTION_OFFLINE_BUTTON)); + connecting_network_label_->SetText(l10n_util::GetStringF( + IDS_NETWORK_SELECTION_CONNECTING, UTF16ToWide(network_id_))); +} + +void NetworkSelectionView::Refresh() { NetworkChanged(chromeos::NetworkLibrary::Get()); } @@ -104,26 +118,32 @@ gfx::Size NetworkSelectionView::GetPreferredSize() { } void NetworkSelectionView::Layout() { - int x = (width() - - welcome_label_->GetPreferredSize().width()) / 2; int y = kWelcomeLabelY; - welcome_label_->SetBounds(x, - y, - welcome_label_->GetPreferredSize().width(), - welcome_label_->GetPreferredSize().height()); + welcome_label_->SetBounds( + (width() - welcome_label_->GetPreferredSize().width()) / 2, + y, + welcome_label_->GetPreferredSize().width(), + welcome_label_->GetPreferredSize().height()); - x = (width() - select_network_label_->GetPreferredSize().width() - - kNetworkComboboxWidth) / 2; + int select_network_x = (width() - + select_network_label_->GetPreferredSize().width() - + kNetworkComboboxWidth) / 2; y += welcome_label_->GetPreferredSize().height() + kSpacing; select_network_label_->SetBounds( - x, + select_network_x, y, select_network_label_->GetPreferredSize().width(), select_network_label_->GetPreferredSize().height()); + connecting_network_label_->SetBounds( + kHorizontalSpacing, + y, + width() - kHorizontalSpacing * 2, + connecting_network_label_->GetPreferredSize().height()); - x += select_network_label_->GetPreferredSize().width() + kHorizontalSpacing; + select_network_x += select_network_label_->GetPreferredSize().width() + + kHorizontalSpacing; y -= kComboboxSpacing; - network_combobox_->SetBounds(x, y, + network_combobox_->SetBounds(select_network_x, y, kNetworkComboboxWidth, kNetworkComboboxHeight); y = height() - offline_button_->GetPreferredSize().height() - kSpacing; @@ -192,8 +212,6 @@ void NetworkSelectionView::ItemChanged(views::Combobox* sender, chromeos::NetworkLibrary::Get()->ConnectToCellularNetwork( network->cellular_network); } - // TODO(avayvod): Check for connection error. - NotifyOnConnection(); } } @@ -203,6 +221,7 @@ void NetworkSelectionView::ButtonPressed(views::Button* sender, const views::Event& event) { if (observer_) { observer_->OnExit(chromeos::ScreenObserver::NETWORK_OFFLINE); + ChangeNetworkNotification(false); } } @@ -218,7 +237,6 @@ bool NetworkSelectionView::OnPasswordDialogAccept(const std::string& ssid, chromeos::NetworkList::NETWORK_WIFI == network->network_type) { chromeos::NetworkLibrary::Get()->ConnectToWifiNetwork(network->wifi_network, password); - NotifyOnConnection(); } return true; } @@ -238,6 +256,14 @@ void NetworkSelectionView::NetworkChanged( network_id = network->label; } networks_.NetworkChanged(network_lib); + // TODO(nkostylev): Check for connection error. + if (networks_.connected_network()) { + NotifyOnConnection(); + } + network = networks_.connecting_network(); + if (network) { + ShowConnectingStatus(true, network->label); + } network_combobox_->ModelChanged(); SelectNetwork(network_type, network_id); } @@ -256,6 +282,7 @@ chromeos::NetworkList::NetworkItem* NetworkSelectionView::GetSelectedNetwork() { void NetworkSelectionView::NotifyOnConnection() { if (observer_) { observer_->OnExit(chromeos::ScreenObserver::NETWORK_CONNECTED); + ChangeNetworkNotification(false); } } @@ -282,3 +309,20 @@ void NetworkSelectionView::SelectNetwork( network_combobox_->SetSelectedItem(0); } } + +void NetworkSelectionView::ShowConnectingStatus(bool connecting, + const string16& network_id) { + select_network_label_->SetVisible(!connecting); + network_combobox_->SetVisible(!connecting); + connecting_network_label_->SetVisible(connecting); + network_id_ = network_id; + UpdateLocalizedStrings(); +} + +void NetworkSelectionView::ChangeNetworkNotification(bool subscribe) { + network_notification_ = subscribe; + if (subscribe) + chromeos::NetworkLibrary::Get()->AddObserver(this); + else + chromeos::NetworkLibrary::Get()->RemoveObserver(this); +} diff --git a/chrome/browser/chromeos/login/network_selection_view.h b/chrome/browser/chromeos/login/network_selection_view.h index d3f5a23..cd928d9 100644 --- a/chrome/browser/chromeos/login/network_selection_view.h +++ b/chrome/browser/chromeos/login/network_selection_view.h @@ -40,6 +40,7 @@ class NetworkSelectionView : public views::View, void Init(); void UpdateLocalizedStrings(); + void Refresh(); // views::View: implementation: virtual gfx::Size GetPreferredSize(); @@ -80,17 +81,28 @@ class NetworkSelectionView : public views::View, void SelectNetwork(chromeos::NetworkList::NetworkType type, const string16& id); + // Shows network connecting status or network selection otherwise. + void ShowConnectingStatus(bool connecting, const string16& network_id); + + // Subscribe/unsubscribes from network change notification. + void ChangeNetworkNotification(bool subscribe); + // Dialog controls. views::Combobox* network_combobox_; views::Label* welcome_label_; views::Label* select_network_label_; + views::Label* connecting_network_label_; views::NativeButton* offline_button_; // Notifications receiver. chromeos::ScreenObserver* observer_; + // True if subscribed to network change notification. + bool network_notification_; + // Cached networks. chromeos::NetworkList networks_; + string16 network_id_; DISALLOW_COPY_AND_ASSIGN(NetworkSelectionView); }; diff --git a/chrome/browser/chromeos/network_list.cc b/chrome/browser/chromeos/network_list.cc index 09c1e64..cbef281 100644 --- a/chrome/browser/chromeos/network_list.cc +++ b/chrome/browser/chromeos/network_list.cc @@ -11,8 +11,8 @@ namespace chromeos { NetworkList::NetworkList() - : ethernet_connected_(false), - connected_network_(-1) { + : connected_network_(NULL), + connecting_network_(NULL) { } NetworkList::NetworkItem* NetworkList::GetNetworkAt(int index) { @@ -55,18 +55,24 @@ int NetworkList::GetNetworkIndexById(NetworkType type, } void NetworkList::NetworkChanged(chromeos::NetworkLibrary* network_lib) { + connected_network_ = NULL; + connecting_network_ = NULL; networks_.clear(); if (!network_lib || !network_lib->EnsureLoaded()) return; - ethernet_connected_ = network_lib->ethernet_connected(); - if (ethernet_connected_) { + if (network_lib->ethernet_connected() || network_lib->ethernet_connecting()) { string16 label = l10n_util::GetStringUTF16( IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); networks_.push_back(NetworkItem(NETWORK_ETHERNET, label, WifiNetwork(), CellularNetwork())); + if (network_lib->ethernet_connected()) { + connected_network_ = &networks_.back(); + } else if (network_lib->ethernet_connecting()) { + connecting_network_ = &networks_.back(); + } } // TODO(nkostylev): Show public WiFi networks first. @@ -77,6 +83,13 @@ void NetworkList::NetworkChanged(chromeos::NetworkLibrary* network_lib) { ASCIIToUTF16(it->ssid), *it, CellularNetwork())); + if (!connected_network_ && network_lib->wifi_ssid() == it->ssid) { + if (network_lib->wifi_connected()) { + connected_network_ = &networks_.back(); + } else if (network_lib->wifi_connecting()) { + connecting_network_ = &networks_.back(); + } + } } CellularNetworkVector cellular = network_lib->cellular_networks(); @@ -86,6 +99,13 @@ void NetworkList::NetworkChanged(chromeos::NetworkLibrary* network_lib) { ASCIIToUTF16(it->name), WifiNetwork(), *it)); + if (!connected_network_ && network_lib->cellular_name() == it->name) { + if (network_lib->cellular_connected()) { + connected_network_ = &networks_.back(); + } else if (network_lib->cellular_connecting()) { + connecting_network_ = &networks_.back(); + } + } } } diff --git a/chrome/browser/chromeos/network_list.h b/chrome/browser/chromeos/network_list.h index 11e2738..d22aa11 100644 --- a/chrome/browser/chromeos/network_list.h +++ b/chrome/browser/chromeos/network_list.h @@ -52,6 +52,16 @@ class NetworkList { return networks_.empty(); } + // Returns currently connected network if there is one. + NetworkList::NetworkItem* connected_network() const { + return connected_network_; + } + + // Returns currently connecting network if there is one. + NetworkList::NetworkItem* connecting_network() const { + return connecting_network_; + } + // Returns network by it's type and ssid (Wifi) or id (Cellular). // If network is not available NULL is returned. NetworkList::NetworkItem* GetNetworkById(NetworkType type, @@ -78,11 +88,13 @@ class NetworkList { // Cached list of all available networks. NetworkItemVector networks_; - // True if Ethernet network is connected. - bool ethernet_connected_; + // Currently connected network or NULL if there's none. + // If several networks are connected than single one is selected by priority: + // Ethernet > WiFi > Cellular. + NetworkList::NetworkItem* connected_network_; - // Index of currently connected network. Ethernet has priority. - int connected_network_; + // Currently connecting network or NULL if there's none. + NetworkList::NetworkItem* connecting_network_; DISALLOW_COPY_AND_ASSIGN(NetworkList); }; |