summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-23 12:30:39 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-23 12:30:39 +0000
commitb1d7d43c2b89a53d294819a91d4c07231684b25d (patch)
tree9dfa42c63ddf38fa15da8d18e1412d906495ec5a
parent95ed44a0fd478f43758ed2eea2e2a175a7c2bab5 (diff)
downloadchromium_src-b1d7d43c2b89a53d294819a91d4c07231684b25d.zip
chromium_src-b1d7d43c2b89a53d294819a91d4c07231684b25d.tar.gz
chromium_src-b1d7d43c2b89a53d294819a91d4c07231684b25d.tar.bz2
ash: Allow connecting to unlisted networks and visit the top-up url from the tray network popup.
BUG=109480 TEST=none Review URL: https://chromiumcodereview.appspot.com/9838002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128462 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/ash_strings.grd9
-rw-r--r--ash/shell.cc18
-rw-r--r--ash/system/network/tray_network.cc64
-rw-r--r--ash/system/tray/system_tray_delegate.h17
-rw-r--r--chrome/browser/chromeos/status/network_menu.cc31
-rw-r--r--chrome/browser/chromeos/status/network_menu.h6
-rw-r--r--chrome/browser/chromeos/system/ash_system_tray_delegate.cc38
7 files changed, 167 insertions, 16 deletions
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index cf532ec..2010169 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -221,12 +221,21 @@ This file contains the strings for ash.
<message name="IDS_ASH_STATUS_TRAY_DISABLE_WIFI" desc="The label used for the item to disable wifi.">
Disable Wi-fi
</message>
+ <message name="IDS_ASH_STATUS_TRAY_OTHER_WIFI" desc="The label used for the item to display other Wi-Fi networks.">
+ Other Wi-fi network...
+ </message>
<message name="IDS_ASH_STATUS_TRAY_ENABLE_MOBILE" desc="The label used for the item to enable cellular networks.">
Enable cellular
</message>
<message name="IDS_ASH_STATUS_TRAY_DISABLE_MOBILE" desc="The label used for the item to disable cellular networks.">
Disable cellular
</message>
+ <message name="IDS_ASH_STATUS_TRAY_OTHER_MOBILE" desc="The label used for the item to display other cellular networks.">
+ Other mobile network...
+ </message>
+ <message name="IDS_ASH_STATUS_TRAY_MOBILE_VIEW_ACCOUNT" desc="In the network popup bubble, the text of the top-up URL link.">
+ View mobile account
+ </message>
<message name="IDS_ASH_STATUS_TRAY_UPDATE" desc="The label used in the tray popup to notify that the user should restart to get system updates.">
Restart to update
</message>
diff --git a/ash/shell.cc b/ash/shell.cc
index f70a499..79ca48c 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -409,6 +409,12 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
observer->OnBluetoothRefresh();
}
+ virtual void ShowOtherWifi() OVERRIDE {
+ }
+
+ virtual void ShowOtherCellular() OVERRIDE {
+ }
+
virtual bool GetWifiAvailable() OVERRIDE {
return true;
}
@@ -433,6 +439,18 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
return bluetooth_enabled_;
}
+ virtual bool GetCellularScanSupported() OVERRIDE {
+ return true;
+ }
+
+ virtual bool GetCellularCarrierInfo(std::string* carrier_id,
+ std::string* toup_url) OVERRIDE {
+ return false;
+ }
+
+ virtual void ShowCellularTopupURL(const std::string& topup_url) OVERRIDE {
+ }
+
virtual void ChangeProxySettings() OVERRIDE {
}
diff --git a/ash/system/network/tray_network.cc b/ash/system/network/tray_network.cc
index 400f6ae..13632df 100644
--- a/ash/system/network/tray_network.cc
+++ b/ash/system/network/tray_network.cc
@@ -111,6 +111,9 @@ class NetworkDetailedView : public views::View,
: login_(login),
header_(NULL),
airplane_(NULL),
+ mobile_account_(NULL),
+ other_wifi_(NULL),
+ other_mobile_(NULL),
toggle_wifi_(NULL),
toggle_mobile_(NULL),
settings_(NULL),
@@ -128,6 +131,9 @@ class NetworkDetailedView : public views::View,
header_ = NULL;
airplane_ = NULL;
+ mobile_account_ = NULL;
+ other_wifi_ = NULL;
+ other_mobile_ = NULL;
toggle_wifi_ = NULL;
toggle_mobile_ = NULL;
settings_ = NULL;
@@ -135,6 +141,7 @@ class NetworkDetailedView : public views::View,
AppendHeaderEntry();
AppendNetworkEntries();
+ AppendNetworkExtra();
AppendNetworkToggles();
AppendSettingsEntry();
@@ -148,8 +155,9 @@ class NetworkDetailedView : public views::View,
}
void AppendNetworkEntries() {
+ SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate();
std::vector<NetworkIconInfo> list;
- Shell::GetInstance()->tray_delegate()->GetAvailableNetworks(&list);
+ delegate->GetAvailableNetworks(&list);
FixedSizedScrollView* scroller = new FixedSizedScrollView;
views::View* networks = new views::View;
networks->SetLayoutManager(new views::BoxLayout(
@@ -161,6 +169,25 @@ class NetworkDetailedView : public views::View,
networks->AddChildView(container);
network_map_[container] = list[i].service_path;
}
+
+ if (login_ != user::LOGGED_IN_NONE) {
+ std::string carrier_id, topup_url;
+ if (delegate->GetCellularCarrierInfo(&carrier_id, &topup_url)) {
+ if (carrier_id != carrier_id_) {
+ carrier_id_ = carrier_id;
+ if (!topup_url.empty())
+ topup_url_ = topup_url;
+ }
+ if (!topup_url_.empty()) {
+ HoverHighlightView* container = new HoverHighlightView(this);
+ container->AddLabel(ui::ResourceBundle::GetSharedInstance().
+ GetLocalizedString(IDS_ASH_STATUS_TRAY_MOBILE_VIEW_ACCOUNT));
+ AddChildView(container);
+ mobile_account_ = container;
+ }
+ }
+ }
+
scroller->set_border(views::Border::CreateSolidSidedBorder(1, 0, 1, 0,
SkColorSetARGB(25, 0, 0, 0)));
scroller->set_fixed_size(
@@ -171,6 +198,29 @@ class NetworkDetailedView : public views::View,
AddChildView(scroller);
}
+ void AppendNetworkExtra() {
+ ash::SystemTrayDelegate* delegate =
+ ash::Shell::GetInstance()->tray_delegate();
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (delegate->GetWifiEnabled()) {
+ HoverHighlightView* container = new HoverHighlightView(this);
+ container->AddLabel(rb.GetLocalizedString(
+ IDS_ASH_STATUS_TRAY_OTHER_WIFI));
+ AddChildView(container);
+ other_wifi_ = container;
+ }
+
+ if (delegate->GetCellularEnabled()) {
+ if (delegate->GetCellularScanSupported()) {
+ HoverHighlightView* container = new HoverHighlightView(this);
+ container->AddLabel(rb.GetLocalizedString(
+ IDS_ASH_STATUS_TRAY_OTHER_MOBILE));
+ AddChildView(container);
+ other_mobile_ = container;
+ }
+ }
+ }
+
void AppendNetworkToggles() {
ash::SystemTrayDelegate* delegate =
ash::Shell::GetInstance()->tray_delegate();
@@ -237,6 +287,12 @@ class NetworkDetailedView : public views::View,
delegate->ShowNetworkSettings();
} else if (sender == proxy_settings_) {
delegate->ChangeProxySettings();
+ } else if (sender == mobile_account_) {
+ delegate->ShowCellularTopupURL(topup_url_);
+ } else if (sender == other_wifi_) {
+ delegate->ShowOtherWifi();
+ } else if (sender == other_mobile_) {
+ delegate->ShowOtherCellular();
} else if (sender == toggle_wifi_) {
delegate->ToggleWifi();
} else if (sender == toggle_mobile_) {
@@ -253,10 +309,16 @@ class NetworkDetailedView : public views::View,
}
}
+ std::string carrier_id_;
+ std::string topup_url_;
+
user::LoginStatus login_;
std::map<views::View*, std::string> network_map_;
views::View* header_;
views::View* airplane_;
+ views::View* mobile_account_;
+ views::View* other_wifi_;
+ views::View* other_mobile_;
views::View* toggle_wifi_;
views::View* toggle_mobile_;
views::View* settings_;
diff --git a/ash/system/tray/system_tray_delegate.h b/ash/system/tray/system_tray_delegate.h
index 01258cb..eaacf95 100644
--- a/ash/system/tray/system_tray_delegate.h
+++ b/ash/system/tray/system_tray_delegate.h
@@ -167,6 +167,12 @@ class SystemTrayDelegate {
// Toggles bluetooth.
virtual void ToggleBluetooth() = 0;
+ // Shows UI to connect to an unlisted wifi network.
+ virtual void ShowOtherWifi() = 0;
+
+ // Shows UI to search for cellular networks.
+ virtual void ShowOtherCellular() = 0;
+
// Returns whether wifi is available.
virtual bool GetWifiAvailable() = 0;
@@ -185,6 +191,17 @@ class SystemTrayDelegate {
// Returns whether bluetooth is enabled.
virtual bool GetBluetoothEnabled() = 0;
+ // Returns whether cellular scanning is supported.
+ virtual bool GetCellularScanSupported() = 0;
+
+ // Retrieves information about the carrier. If the information cannot be
+ // retrieved, returns false.
+ virtual bool GetCellularCarrierInfo(std::string* carrier_id,
+ std::string* toup_url) = 0;
+
+ // Opens the top up url.
+ virtual void ShowCellularTopupURL(const std::string& topup_url) = 0;
+
// Shows UI for changing proxy settings.
virtual void ChangeProxySettings() = 0;
};
diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc
index f082018..95b32ea 100644
--- a/chrome/browser/chromeos/status/network_menu.cc
+++ b/chrome/browser/chromeos/status/network_menu.cc
@@ -217,8 +217,6 @@ class NetworkMenuModel : public ui::MenuModel {
std::string carrier_id_;
private:
- // Show a NetworkConfigView modal dialog instance.
- void ShowNetworkConfigView(NetworkConfigView* view) const;
// Open a dialog to set up and connect to a network.
void ShowOther(ConnectionType type) const;
@@ -503,20 +501,11 @@ void NetworkMenuModel::SetMenuModelDelegate(ui::MenuModelDelegate* delegate) {
////////////////////////////////////////////////////////////////////////////////
// NetworkMenuModel, private methods:
-void NetworkMenuModel::ShowNetworkConfigView(NetworkConfigView* view) const {
- views::Widget* window = browser::CreateViewsWindow(
- owner_->delegate()->GetNativeWindow(), view, STYLE_GENERIC);
- window->SetAlwaysOnTop(true);
- window->Show();
-}
-
void NetworkMenuModel::ShowOther(ConnectionType type) const {
- if (type == TYPE_CELLULAR) {
- ChooseMobileNetworkDialog::ShowDialog(
- owner_->delegate()->GetNativeWindow());
- } else {
- ShowNetworkConfigView(new NetworkConfigView(type));
- }
+ if (type == TYPE_CELLULAR)
+ owner_->ShowOtherCellular();
+ else
+ owner_->ShowOtherWifi();
}
////////////////////////////////////////////////////////////////////////////////
@@ -1127,6 +1116,18 @@ void NetworkMenu::ToggleCellular() {
}
}
+void NetworkMenu::ShowOtherWifi() {
+ NetworkConfigView* view = new NetworkConfigView(TYPE_WIFI);
+ views::Widget* window = browser::CreateViewsWindow(
+ delegate_->GetNativeWindow(), view, STYLE_GENERIC);
+ window->SetAlwaysOnTop(true);
+ window->Show();
+}
+
+void NetworkMenu::ShowOtherCellular() {
+ ChooseMobileNetworkDialog::ShowDialog(delegate_->GetNativeWindow());
+}
+
bool NetworkMenu::ShouldHighlightNetwork(const Network* network) {
return ::ShouldHighlightNetwork(network);
}
diff --git a/chrome/browser/chromeos/status/network_menu.h b/chrome/browser/chromeos/status/network_menu.h
index 9ab0785..6db277d 100644
--- a/chrome/browser/chromeos/status/network_menu.h
+++ b/chrome/browser/chromeos/status/network_menu.h
@@ -106,6 +106,12 @@ class NetworkMenu {
void ToggleWifi();
void ToggleCellular();
+ // Shows UI to user to connect to an unlisted wifi network.
+ void ShowOtherWifi();
+
+ // Shows UI to user to search for cellular networks.
+ void ShowOtherCellular();
+
// Decides whether a network should be highlighted in the UI.
bool ShouldHighlightNetwork(const Network* network);
diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
index 81ae4a4..8b28594 100644
--- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
+++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
@@ -38,6 +38,7 @@
#include "chrome/browser/chromeos/login/login_display_host.h"
#include "chrome/browser/chromeos/login/user.h"
#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/browser/chromeos/mobile_config.h"
#include "chrome/browser/chromeos/status/network_menu.h"
#include "chrome/browser/chromeos/status/network_menu_icon.h"
#include "chrome/browser/chromeos/system/timezone_settings.h"
@@ -435,6 +436,14 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
base::Bind(&BluetoothPowerFailure));
}
+ virtual void ShowOtherWifi() OVERRIDE {
+ network_menu_->ShowOtherWifi();
+ }
+
+ virtual void ShowOtherCellular() OVERRIDE {
+ network_menu_->ShowOtherCellular();
+ }
+
virtual bool GetWifiAvailable() OVERRIDE {
return CrosLibrary::Get()->GetNetworkLibrary()->wifi_available();
}
@@ -459,6 +468,35 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
return bluetooth_adapter_->IsPowered();
}
+ virtual bool GetCellularScanSupported() OVERRIDE {
+ NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
+ DCHECK(crosnet->cellular_enabled());
+ const NetworkDevice* cellular = crosnet->FindCellularDevice();
+ return cellular ? cellular->support_network_scan() : false;
+ }
+
+ virtual bool GetCellularCarrierInfo(std::string* carrier_id,
+ std::string* topup_url) OVERRIDE {
+ NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
+ const NetworkDevice* cellular = crosnet->FindCellularDevice();
+ if (cellular) {
+ MobileConfig* config = MobileConfig::GetInstance();
+ if (config->IsReady()) {
+ *carrier_id = crosnet->GetCellularHomeCarrierId();
+ const MobileConfig::Carrier* carrier = config->GetCarrier(*carrier_id);
+ if (carrier) {
+ *topup_url = carrier->top_up_url();
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ virtual void ShowCellularTopupURL(const std::string& topup_url) OVERRIDE {
+ GetAppropriateBrowser()->ShowSingletonTab(GURL(topup_url));
+ }
+
virtual void ChangeProxySettings() OVERRIDE {
CHECK(GetUserLoginStatus() == ash::user::LOGGED_IN_NONE);
BaseLoginDisplayHost::default_host()->OpenProxySettings();