diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 13:29:41 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 13:29:41 +0000 |
commit | 0994fce90eb8931a0f166bb8c0d3acad88933590 (patch) | |
tree | ac4545955d7ae97b7e280e9ae55860aeb78c111b | |
parent | 156ffc413ec10ccaafcf580117dae6b378cb4b18 (diff) | |
download | chromium_src-0994fce90eb8931a0f166bb8c0d3acad88933590.zip chromium_src-0994fce90eb8931a0f166bb8c0d3acad88933590.tar.gz chromium_src-0994fce90eb8931a0f166bb8c0d3acad88933590.tar.bz2 |
ash: Allow connecting to unlisted networks and visit the top-up url from the tray network popup.
BUG=109480
TEST=none
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=128462
Review URL: https://chromiumcodereview.appspot.com/9838002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128470 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/ash_strings.grd | 9 | ||||
-rw-r--r-- | ash/shell.cc | 18 | ||||
-rw-r--r-- | ash/system/network/tray_network.cc | 65 | ||||
-rw-r--r-- | ash/system/tray/system_tray_delegate.h | 17 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/network_menu.cc | 31 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/network_menu.h | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/system/ash_system_tray_delegate.cc | 38 |
7 files changed, 168 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..4d51076 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,26 @@ 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), + gfx::Font::NORMAL); + 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 +199,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), gfx::Font::NORMAL); + 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), gfx::Font::NORMAL); + AddChildView(container); + other_mobile_ = container; + } + } + } + void AppendNetworkToggles() { ash::SystemTrayDelegate* delegate = ash::Shell::GetInstance()->tray_delegate(); @@ -237,6 +288,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 +310,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(); |