summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-05 12:15:48 +0000
committernkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-05 12:15:48 +0000
commit676e352fca95008ac2c36b976ba59485cb27d1b1 (patch)
tree11ab9cc0c6775e84fac21de8ec4329ec3357a483
parentf4944353d0156fcf18844d180b2f5a72611a337b (diff)
downloadchromium_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.grd3
-rw-r--r--chrome/browser/chromeos/login/network_selection_view.cc84
-rw-r--r--chrome/browser/chromeos/login/network_selection_view.h12
-rw-r--r--chrome/browser/chromeos/network_list.cc28
-rw-r--r--chrome/browser/chromeos/network_list.h20
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);
};