summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-15 23:07:02 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-15 23:07:02 +0000
commit939fab9259ba1d9e4b5f735ef41ce43229b4e456 (patch)
treef58b33bde937ac53b03db3f4d9fc49d8a599b0d3 /ash
parent21ee2082dffb4e90e3cae5a9dd40c887622fff47 (diff)
downloadchromium_src-939fab9259ba1d9e4b5f735ef41ce43229b4e456.zip
chromium_src-939fab9259ba1d9e4b5f735ef41ce43229b4e456.tar.gz
chromium_src-939fab9259ba1d9e4b5f735ef41ce43229b4e456.tar.bz2
ash: Allow turning on/off wifi/cellular networks from the uber tray.
Also, remove the 'airplane mode' entry from the list for now, since it's not really implemented yet. Also, make 'sign out' terminate ash-shell. BUG=109480 TEST=none Review URL: https://chromiumcodereview.appspot.com/9706079 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@127018 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r--ash/ash_strings.grd12
-rw-r--r--ash/shell.cc46
-rw-r--r--ash/system/network/tray_network.cc43
-rw-r--r--ash/system/tray/system_tray_delegate.h18
4 files changed, 117 insertions, 2 deletions
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index 3da685d..df4bebb 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -202,6 +202,18 @@ This file contains the strings for ash.
<message name="IDS_ASH_STATUS_TRAY_AIRPLANE_MODE" desc="The label used in the network dialog to turn on airplane mode.">
Airplane mode
</message>
+ <message name="IDS_ASH_STATUS_TRAY_ENABLE_WIFI" desc="The label used for the item to enable wifi.">
+ Enable Wi-fi
+ </message>
+ <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_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_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 e3f3ebd..64bd98d 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -221,6 +221,8 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
public:
DummySystemTrayDelegate()
: muted_(false),
+ wifi_enabled_(true),
+ cellular_enabled_(true),
volume_(0.5) {
}
@@ -286,7 +288,11 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
}
virtual void ShutDown() OVERRIDE {}
- virtual void SignOut() OVERRIDE {}
+
+ virtual void SignOut() OVERRIDE {
+ MessageLoop::current()->Quit();
+ }
+
virtual void RequestLockScreen() OVERRIDE {}
virtual NetworkIconInfo GetMostRelevantNetworkIcon(bool large) OVERRIDE {
return NetworkIconInfo();
@@ -301,10 +307,48 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
virtual void ToggleAirplaneMode() OVERRIDE {
}
+ virtual void ToggleWifi() OVERRIDE {
+ wifi_enabled_ = !wifi_enabled_;
+ ash::NetworkObserver* observer =
+ ash::Shell::GetInstance()->tray()->network_controller();
+ if (observer) {
+ ash::NetworkIconInfo info;
+ observer->OnNetworkRefresh(info);
+ }
+ }
+
+ virtual void ToggleCellular() OVERRIDE {
+ cellular_enabled_ = !cellular_enabled_;
+ ash::NetworkObserver* observer =
+ ash::Shell::GetInstance()->tray()->network_controller();
+ if (observer) {
+ ash::NetworkIconInfo info;
+ observer->OnNetworkRefresh(info);
+ }
+ }
+
+ virtual bool GetWifiAvailable() OVERRIDE {
+ return true;
+ }
+
+ virtual bool GetCellularAvailable() OVERRIDE {
+ return true;
+ }
+
+ virtual bool GetWifiEnabled() OVERRIDE {
+ return wifi_enabled_;
+ }
+
+ virtual bool GetCellularEnabled() OVERRIDE {
+ return cellular_enabled_;
+ }
+
virtual void ChangeProxySettings() OVERRIDE {
}
bool muted_;
+ bool wifi_enabled_;
+ bool cellular_enabled_;
float volume_;
SkBitmap null_image_;
diff --git a/ash/system/network/tray_network.cc b/ash/system/network/tray_network.cc
index 84d2db2..4d44936 100644
--- a/ash/system/network/tray_network.cc
+++ b/ash/system/network/tray_network.cc
@@ -241,10 +241,13 @@ class NetworkDetailedView : public views::View,
: login_(login),
header_(NULL),
airplane_(NULL),
+ toggle_wifi_(NULL),
+ toggle_mobile_(NULL),
settings_(NULL),
proxy_settings_(NULL) {
SetLayoutManager(new views::BoxLayout(
views::BoxLayout::kVertical, 1, 1, 1));
+ set_background(views::Background::CreateSolidBackground(SK_ColorWHITE));
Update();
}
@@ -253,10 +256,19 @@ class NetworkDetailedView : public views::View,
void Update() {
RemoveAllChildViews(true);
+ header_ = NULL;
+ airplane_ = NULL;
+ toggle_wifi_ = NULL;
+ toggle_mobile_ = NULL;
+ settings_ = NULL;
+ proxy_settings_ = NULL;
+
AppendHeaderEntry();
AppendNetworkEntries();
- AppendAirplaneModeEntry();
+ AppendNetworkToggles();
AppendSettingsEntry();
+
+ Layout();
}
private:
@@ -300,6 +312,29 @@ class NetworkDetailedView : public views::View,
AddChildView(scroller);
}
+ void AppendNetworkToggles() {
+ ash::SystemTrayDelegate* delegate =
+ ash::Shell::GetInstance()->tray_delegate();
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (delegate->GetWifiAvailable()) {
+ HoverHighlightView* container = new HoverHighlightView(this);
+ container->AddLabel(rb.GetLocalizedString(delegate->GetWifiEnabled() ?
+ IDS_ASH_STATUS_TRAY_DISABLE_WIFI :
+ IDS_ASH_STATUS_TRAY_ENABLE_WIFI));
+ AddChildView(container);
+ toggle_wifi_ = container;
+ }
+
+ if (delegate->GetCellularAvailable()) {
+ HoverHighlightView* container = new HoverHighlightView(this);
+ container->AddLabel(rb.GetLocalizedString(
+ delegate->GetCellularEnabled() ? IDS_ASH_STATUS_TRAY_DISABLE_MOBILE :
+ IDS_ASH_STATUS_TRAY_ENABLE_MOBILE));
+ AddChildView(container);
+ toggle_mobile_ = container;
+ }
+ }
+
void AppendAirplaneModeEntry() {
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
HoverHighlightView* container = new HoverHighlightView(this);
@@ -341,6 +376,10 @@ class NetworkDetailedView : public views::View,
delegate->ShowNetworkSettings();
} else if (sender == proxy_settings_) {
delegate->ChangeProxySettings();
+ } else if (sender == toggle_wifi_) {
+ delegate->ToggleWifi();
+ } else if (sender == toggle_mobile_) {
+ delegate->ToggleCellular();
} else if (sender == airplane_) {
delegate->ToggleAirplaneMode();
} else {
@@ -357,6 +396,8 @@ class NetworkDetailedView : public views::View,
std::map<views::View*, std::string> network_map_;
views::View* header_;
views::View* airplane_;
+ views::View* toggle_wifi_;
+ views::View* toggle_mobile_;
views::View* settings_;
views::View* proxy_settings_;
DISALLOW_COPY_AND_ASSIGN(NetworkDetailedView);
diff --git a/ash/system/tray/system_tray_delegate.h b/ash/system/tray/system_tray_delegate.h
index 1bf268b..9d91a38 100644
--- a/ash/system/tray/system_tray_delegate.h
+++ b/ash/system/tray/system_tray_delegate.h
@@ -95,6 +95,24 @@ class SystemTrayDelegate {
// Toggles airplane mode.
virtual void ToggleAirplaneMode() = 0;
+ // Toggles wifi network.
+ virtual void ToggleWifi() = 0;
+
+ // Toggles cellular network.
+ virtual void ToggleCellular() = 0;
+
+ // Returns whether wifi is available.
+ virtual bool GetWifiAvailable() = 0;
+
+ // Returns whether cellular networking is available.
+ virtual bool GetCellularAvailable() = 0;
+
+ // Returns whether wifi is enabled.
+ virtual bool GetWifiEnabled() = 0;
+
+ // Returns whether cellular networking is enabled.
+ virtual bool GetCellularEnabled() = 0;
+
// Shows UI for changing proxy settings.
virtual void ChangeProxySettings() = 0;
};