diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-19 23:48:02 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-19 23:48:02 +0000 |
commit | 706e8fa0b6f0392c2fe206cb605f6b738a64cc6b (patch) | |
tree | e5587ac66e6a890e39c4a9d865638c50352424e8 | |
parent | cdc491e034aa38aaace2fea31a4f412709c4d21d (diff) | |
download | chromium_src-706e8fa0b6f0392c2fe206cb605f6b738a64cc6b.zip chromium_src-706e8fa0b6f0392c2fe206cb605f6b738a64cc6b.tar.gz chromium_src-706e8fa0b6f0392c2fe206cb605f6b738a64cc6b.tar.bz2 |
Update icons to show lowdata and very lowdata for 3G data.
BUG=chromium-os:5608
TEST=manual
Review URL: http://codereview.chromium.org/3748005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63135 0039d316-1c4b-4281-b951-d872f2087c98
32 files changed, 218 insertions, 100 deletions
diff --git a/chrome/app/theme/statusbar_network_3g.png b/chrome/app/theme/statusbar_network_3g.png Binary files differindex 556136f..b276ad2 100644 --- a/chrome/app/theme/statusbar_network_3g.png +++ b/chrome/app/theme/statusbar_network_3g.png diff --git a/chrome/app/theme/statusbar_network_3g_lowdata.png b/chrome/app/theme/statusbar_network_3g_lowdata.png Binary files differnew file mode 100644 index 0000000..556136f --- /dev/null +++ b/chrome/app/theme/statusbar_network_3g_lowdata.png diff --git a/chrome/app/theme/statusbar_network_3g_vlowdata.png b/chrome/app/theme/statusbar_network_3g_vlowdata.png Binary files differnew file mode 100644 index 0000000..bcf46aa --- /dev/null +++ b/chrome/app/theme/statusbar_network_3g_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars1_lowdata.png b/chrome/app/theme/statusbar_network_bars1_lowdata.png Binary files differnew file mode 100644 index 0000000..69b6181 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars1_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars1_vlowdata.png b/chrome/app/theme/statusbar_network_bars1_vlowdata.png Binary files differnew file mode 100644 index 0000000..5932ffd --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars1_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars2_lowdata.png b/chrome/app/theme/statusbar_network_bars2_lowdata.png Binary files differnew file mode 100644 index 0000000..a58fc13 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars2_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars2_vlowdata.png b/chrome/app/theme/statusbar_network_bars2_vlowdata.png Binary files differnew file mode 100644 index 0000000..6817f3d --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars2_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars3_lowdata.png b/chrome/app/theme/statusbar_network_bars3_lowdata.png Binary files differnew file mode 100644 index 0000000..e36b8c6 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars3_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars3_vlowdata.png b/chrome/app/theme/statusbar_network_bars3_vlowdata.png Binary files differnew file mode 100644 index 0000000..4e1a9038 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars3_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars4_lowdata.png b/chrome/app/theme/statusbar_network_bars4_lowdata.png Binary files differnew file mode 100644 index 0000000..9e5bc94 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars4_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars4_vlowdata.png b/chrome/app/theme/statusbar_network_bars4_vlowdata.png Binary files differnew file mode 100644 index 0000000..1ac34f6 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars4_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars5_lowdata.png b/chrome/app/theme/statusbar_network_bars5_lowdata.png Binary files differnew file mode 100644 index 0000000..a00a902 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars5_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars5_vlowdata.png b/chrome/app/theme/statusbar_network_bars5_vlowdata.png Binary files differnew file mode 100644 index 0000000..67a03fa --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars5_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars6_lowdata.png b/chrome/app/theme/statusbar_network_bars6_lowdata.png Binary files differnew file mode 100644 index 0000000..dd002c8 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars6_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars6_vlowdata.png b/chrome/app/theme/statusbar_network_bars6_vlowdata.png Binary files differnew file mode 100644 index 0000000..629ab40 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars6_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars7_lowdata.png b/chrome/app/theme/statusbar_network_bars7_lowdata.png Binary files differnew file mode 100644 index 0000000..5ff211d --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars7_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars7_vlowdata.png b/chrome/app/theme/statusbar_network_bars7_vlowdata.png Binary files differnew file mode 100644 index 0000000..40839fc --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars7_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars8_lowdata.png b/chrome/app/theme/statusbar_network_bars8_lowdata.png Binary files differnew file mode 100644 index 0000000..21320fa --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars8_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars8_vlowdata.png b/chrome/app/theme/statusbar_network_bars8_vlowdata.png Binary files differnew file mode 100644 index 0000000..dff8aeb --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars8_vlowdata.png diff --git a/chrome/app/theme/statusbar_network_bars9_lowdata.png b/chrome/app/theme/statusbar_network_bars9_lowdata.png Binary files differnew file mode 100644 index 0000000..50b6489 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars9_lowdata.png diff --git a/chrome/app/theme/statusbar_network_bars9_vlowdata.png b/chrome/app/theme/statusbar_network_bars9_vlowdata.png Binary files differnew file mode 100644 index 0000000..1678f03 --- /dev/null +++ b/chrome/app/theme/statusbar_network_bars9_vlowdata.png diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd index e7d6007..ec967bc 100644 --- a/chrome/app/theme/theme_resources.grd +++ b/chrome/app/theme/theme_resources.grd @@ -526,25 +526,45 @@ <include name="IDR_STATUSBAR_FEEDBACK_PRESSED" file="statusbar_feedback_pressed.png" type="BINDATA" /> <include name="IDR_STATUSBAR_MENU" file="statusbar_menu.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_3G" file="statusbar_network_3g.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_3G_LOWDATA" file="statusbar_network_3g_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_3G_VLOWDATA" file="statusbar_network_3g_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS0" file="statusbar_network_bars0.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS1" file="statusbar_network_bars1.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS1_BLACK" file="statusbar_network_bars1b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS1_LOWDATA" file="statusbar_network_bars1_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS1_VLOWDATA" file="statusbar_network_bars1_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS2" file="statusbar_network_bars2.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS2_BLACK" file="statusbar_network_bars2b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS2_LOWDATA" file="statusbar_network_bars2_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS2_VLOWDATA" file="statusbar_network_bars2_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS3" file="statusbar_network_bars3.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS3_BLACK" file="statusbar_network_bars3b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS3_LOWDATA" file="statusbar_network_bars3_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS3_VLOWDATA" file="statusbar_network_bars3_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS4" file="statusbar_network_bars4.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS4_BLACK" file="statusbar_network_bars4b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS4_LOWDATA" file="statusbar_network_bars4_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS4_VLOWDATA" file="statusbar_network_bars4_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS5" file="statusbar_network_bars5.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS5_BLACK" file="statusbar_network_bars5b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS5_LOWDATA" file="statusbar_network_bars5_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS5_VLOWDATA" file="statusbar_network_bars5_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS6" file="statusbar_network_bars6.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS6_BLACK" file="statusbar_network_bars6b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS6_LOWDATA" file="statusbar_network_bars6_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS6_VLOWDATA" file="statusbar_network_bars6_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS7" file="statusbar_network_bars7.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS7_BLACK" file="statusbar_network_bars7b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS7_LOWDATA" file="statusbar_network_bars7_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS7_VLOWDATA" file="statusbar_network_bars7_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS8" file="statusbar_network_bars8.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS8_BLACK" file="statusbar_network_bars8b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS8_LOWDATA" file="statusbar_network_bars8_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS8_VLOWDATA" file="statusbar_network_bars8_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS9" file="statusbar_network_bars9.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS9_BLACK" file="statusbar_network_bars9b.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS9_LOWDATA" file="statusbar_network_bars9_lowdata.png" type="BINDATA" /> + <include name="IDR_STATUSBAR_NETWORK_BARS9_VLOWDATA" file="statusbar_network_bars9_vlowdata.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_BARS_PRESSED" file="statusbar_network_bars_pressed.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_DISCONNECTED" file="statusbar_network_disconnected.png" type="BINDATA" /> <include name="IDR_STATUSBAR_NETWORK_EDGE" file="statusbar_network_edge.png" type="BINDATA" /> diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc index a5a53df..5e43c89 100644 --- a/chrome/browser/chromeos/cros/network_library.cc +++ b/chrome/browser/chromeos/cros/network_library.cc @@ -264,6 +264,35 @@ bool CellularNetwork::is_gsm() const { network_technology_ != NETWORK_TECHNOLOGY_UNKNOWN; } +CellularNetwork::DataLeft CellularNetwork::data_left() const { + if (data_plans_.empty()) + return DATA_NORMAL; + CellularDataPlan plan = data_plans_[0]; + if (plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED) { + int64 remaining = plan.plan_end_time - plan.update_time; + if (remaining <= 0) + return DATA_NONE; + else if (remaining <= kCellularDataVeryLowSecs) + return DATA_VERY_LOW; + else if (remaining <= kCellularDataLowSecs) + return DATA_LOW; + else + return DATA_NORMAL; + } else if (plan.plan_type == CELLULAR_DATA_PLAN_METERED_PAID || + plan.plan_type == CELLULAR_DATA_PLAN_METERED_BASE) { + int64 remaining = plan.plan_data_bytes - plan.data_bytes_used; + if (remaining <= 0) + return DATA_NONE; + else if (remaining <= kCellularDataVeryLowBytes) + return DATA_VERY_LOW; + else if (remaining <= kCellularDataLowBytes) + return DATA_LOW; + else + return DATA_NORMAL; + } + return DATA_NORMAL; +} + std::string CellularNetwork::GetNetworkTechnologyString() const { // No need to localize these cellular technology abbreviations. switch (network_technology_) { @@ -996,7 +1025,9 @@ class NetworkLibraryImpl : public NetworkLibrary { test_plan.plan_type = CELLULAR_DATA_PLAN_METERED_PAID; test_plan.update_time = base::Time::Now().ToInternalValue() / base::Time::kMicrosecondsPerSecond; - cellular_data_plans_.push_back(test_plan); + chromeos::CellularDataPlanList test_plans; + test_plans.push_back(test_plan); + cellular_.SetDataPlans(test_plans); } void UpdateSystemInfo() { @@ -1055,9 +1086,7 @@ class NetworkLibraryImpl : public NetworkLibrary { } void NotifyCellularDataPlanChanged() { - FOR_EACH_OBSERVER(Observer, observers_, - CellularDataPlanChanged(cellular_.service_path(), - cellular_data_plans_)); + FOR_EACH_OBSERVER(Observer, observers_, CellularDataPlanChanged(this)); } void UpdateNetworkStatus() { @@ -1113,7 +1142,7 @@ class NetworkLibraryImpl : public NetworkLibrary { } void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) { - cellular_data_plans_ = data_plans; + cellular_.SetDataPlans(data_plans); NotifyCellularDataPlanChanged(); } @@ -1143,9 +1172,6 @@ class NetworkLibraryImpl : public NetworkLibrary { // The current connected (or connecting) cellular network. CellularNetwork cellular_; - // The data plan for the current cellular network. - CellularDataPlanList cellular_data_plans_; - // The remembered cellular networks. CellularNetworkVector remembered_cellular_networks_; diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h index 7f7a7b1..4a672d5 100644 --- a/chrome/browser/chromeos/cros/network_library.h +++ b/chrome/browser/chromeos/cros/network_library.h @@ -17,6 +17,18 @@ namespace chromeos { +// Cellular network is considered low data when less than 60 minues. +static const int kCellularDataLowSecs = 60 * 60; + +// Cellular network is considered low data when less than 30 minues. +static const int kCellularDataVeryLowSecs = 30 * 60; + +// Cellular network is considered low data when less than 100MB. +static const int kCellularDataLowBytes = 100 * 1024 * 1024; + +// Cellular network is considered very low data when less than 50MB. +static const int kCellularDataVeryLowBytes = 50 * 1024 * 1024; + class Network { public: const std::string& service_path() const { return service_path_; } @@ -118,6 +130,13 @@ class WirelessNetwork : public Network { class CellularNetwork : public WirelessNetwork { public: + enum DataLeft { + DATA_NORMAL, + DATA_LOW, + DATA_VERY_LOW, + DATA_NONE + }; + CellularNetwork(); explicit CellularNetwork(const ServiceInfo& service) : WirelessNetwork() { @@ -150,6 +169,7 @@ class CellularNetwork : public WirelessNetwork { const std::string& last_update() const { return last_update_; } const unsigned int prl_version() const { return prl_version_; } bool is_gsm() const; + DataLeft data_left() const; // WirelessNetwork overrides. virtual void Clear(); @@ -159,7 +179,7 @@ class CellularNetwork : public WirelessNetwork { return data_plans_; } - void SetDataPlans(CellularDataPlanList& data_plans) { + void SetDataPlans(const CellularDataPlanList& data_plans) { data_plans_ = data_plans; } // Return a string representation of network technology. @@ -303,8 +323,7 @@ class NetworkLibrary { // Called when the network has changed. (wifi networks, and ethernet) virtual void NetworkChanged(NetworkLibrary* obj) = 0; // Called when the cellular data plan has changed. - virtual void CellularDataPlanChanged(const std::string& service_path, - const CellularDataPlanList& plans) {} + virtual void CellularDataPlanChanged(NetworkLibrary* obj) {} }; virtual ~NetworkLibrary() {} @@ -388,8 +407,7 @@ class NetworkLibrary { // Initiates cellular data plan refresh. Plan data will be passed through // Network::Observer::CellularDataPlanChanged callback. - virtual void RefreshCellularDataPlans( - const CellularNetwork& network) = 0; + virtual void RefreshCellularDataPlans(const CellularNetwork& network) = 0; // Disconnect from the specified wireless (either cellular or wifi) network. virtual void DisconnectFromWirelessNetwork( diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc index c98733b..b9e6fdc 100644 --- a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc +++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc @@ -23,7 +23,6 @@ #include "chrome/browser/browser_window.h" #include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/status/network_menu.h" -#include "chrome/browser/chromeos/network_message_observer.h" #include "chrome/browser/dom_ui/dom_ui_util.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tab_contents/tab_contents_view.h" @@ -326,10 +325,11 @@ void InternetOptionsHandler::NetworkChanged(chromeos::NetworkLibrary* cros) { } void InternetOptionsHandler::CellularDataPlanChanged( - const std::string& service_path, - const chromeos::CellularDataPlanList& plans) { + chromeos::NetworkLibrary* obj) { if (!dom_ui_) return; + const chromeos::CellularNetwork cellular = obj->cellular_network(); + const chromeos::CellularDataPlanList& plans = cellular.GetDataPlans(); DictionaryValue connection_plans; ListValue* plan_list = new ListValue(); for (chromeos::CellularDataPlanList::const_iterator iter = plans.begin(); @@ -337,7 +337,7 @@ void InternetOptionsHandler::CellularDataPlanChanged( ++iter) { plan_list->Append(CellularDataPlanToDictionary(*iter)); } - connection_plans.SetString("servicePath", service_path); + connection_plans.SetString("servicePath", cellular.service_path()); connection_plans.Set("plans", plan_list); dom_ui_->CallJavascriptFunction( L"options.InternetOptions.updateCellularPlans", connection_plans); @@ -416,7 +416,7 @@ string16 InternetOptionsHandler::GetPlanWarning( if (time_left <= 0) { return l10n_util::GetStringFUTF16( IDS_NETWORK_MINUTES_REMAINING_MESSAGE, ASCIIToUTF16("0")); - } else if (time_left <= chromeos::kDataNearingExpirationSecs) { + } else if (time_left <= chromeos::kCellularDataVeryLowSecs) { return l10n_util::GetStringFUTF16( IDS_NETWORK_MINUTES_UNTIL_EXPIRATION_MESSAGE, UTF8ToUTF16(base::Int64ToString(time_left/60))); @@ -428,10 +428,10 @@ string16 InternetOptionsHandler::GetPlanWarning( if (bytes_remaining <= 0) { return l10n_util::GetStringFUTF16( IDS_NETWORK_DATA_REMAINING_MESSAGE, ASCIIToUTF16("0")); - } else if (bytes_remaining <= chromeos::kDataLowDataBytes) { + } else if (bytes_remaining <= chromeos::kCellularDataVeryLowBytes) { return l10n_util::GetStringFUTF16( IDS_NETWORK_DATA_REMAINING_MESSAGE, - UTF8ToUTF16(base::Int64ToString(bytes_remaining/1024))); + UTF8ToUTF16(base::Int64ToString(bytes_remaining/(1024*1024)))); } } return string16(); diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.h b/chrome/browser/chromeos/dom_ui/internet_options_handler.h index 658791d..f960121 100644 --- a/chrome/browser/chromeos/dom_ui/internet_options_handler.h +++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.h @@ -30,8 +30,7 @@ class InternetOptionsHandler : public OptionsPageUIHandler, // NetworkLibrary::Observer implementation. virtual void NetworkChanged(chromeos::NetworkLibrary* obj); - virtual void CellularDataPlanChanged(const std::string& service_path, - const chromeos::CellularDataPlanList& plans); + virtual void CellularDataPlanChanged(chromeos::NetworkLibrary* obj); private: // Passes data needed to show details overlay for network. diff --git a/chrome/browser/chromeos/network_message_observer.cc b/chrome/browser/chromeos/network_message_observer.cc index c4df580..438f433 100644 --- a/chrome/browser/chromeos/network_message_observer.cc +++ b/chrome/browser/chromeos/network_message_observer.cc @@ -143,15 +143,16 @@ void NetworkMessageObserver::NetworkChanged(NetworkLibrary* obj) { CreateModalPopup(view); } -void NetworkMessageObserver::CellularDataPlanChanged( - const std::string& service_path, const CellularDataPlanList& plans) { +void NetworkMessageObserver::CellularDataPlanChanged(NetworkLibrary* obj) { + const CellularNetwork& cellular = obj->cellular_network(); // Active plan is the first one in the list. Use empty one if none found. + const CellularDataPlanList& plans = cellular.GetDataPlans(); CellularDataPlan plan = plans.empty() ? CellularDataPlan() : plans[0]; // If connected cellular network changed, or data plan is different, then // it's a new network. Then hide all previous notifications. bool new_plan = false; - if (service_path != cellular_service_path_) { - cellular_service_path_ = service_path; + if (cellular.service_path() != cellular_service_path_) { + cellular_service_path_ = cellular.service_path(); new_plan = true; } else if (plan.plan_name != cellular_data_plan_.plan_name || plan.plan_type != cellular_data_plan_.plan_type) { @@ -178,50 +179,32 @@ void NetworkMessageObserver::CellularDataPlanChanged( } } - if (plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED) { - // Time based plan. Show nearing expiration and data expiration. - int64 time_left = plan.plan_end_time - plan.update_time; - if (time_left <= 0) { + if (plan.plan_type != CELLULAR_DATA_PLAN_UNKNOWN) { + if (cellular.data_left() == CellularNetwork::DATA_NONE) { notification_low_data_.Hide(); + int message = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ? + IDS_NETWORK_MINUTES_REMAINING_MESSAGE : + IDS_NETWORK_DATA_REMAINING_MESSAGE; notification_no_data_.Show(l10n_util::GetStringFUTF16( - IDS_NETWORK_MINUTES_REMAINING_MESSAGE, ASCIIToUTF16("0")), + message, ASCIIToUTF16("0")), l10n_util::GetStringUTF16(IDS_NETWORK_PURCHASE_MORE_MESSAGE), NewCallback(this, &NetworkMessageObserver::MobileSetup), false, false); - } else if (time_left <= kDataNearingExpirationSecs) { + } else if (cellular.data_left() == CellularNetwork::DATA_VERY_LOW) { notification_no_data_.Hide(); + int message = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ? + IDS_NETWORK_MINUTES_REMAINING_MESSAGE : + IDS_NETWORK_DATA_REMAINING_MESSAGE; + int64 remaining = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ? + (plan.plan_end_time - plan.update_time) / 60 : + (plan.plan_data_bytes - plan.data_bytes_used) / (1024 * 1024); notification_low_data_.Show(l10n_util::GetStringFUTF16( - IDS_NETWORK_MINUTES_UNTIL_EXPIRATION_MESSAGE, - UTF8ToUTF16(base::Int64ToString(time_left/60))), + message, UTF8ToUTF16(base::Int64ToString(remaining))), l10n_util::GetStringUTF16(IDS_NETWORK_PURCHASE_MORE_MESSAGE), NewCallback(this, &NetworkMessageObserver::MobileSetup), false, false); } else { - // Got more data, so hide notifications. - notification_low_data_.Hide(); - notification_no_data_.Hide(); - } - } else if (plan.plan_type == CELLULAR_DATA_PLAN_METERED_PAID || - plan.plan_type == CELLULAR_DATA_PLAN_METERED_BASE) { - // Metered plan. Show low data and out of data. - int64 bytes_remaining = plan.plan_data_bytes - plan.data_bytes_used; - if (bytes_remaining <= 0) { - notification_low_data_.Hide(); - notification_no_data_.Show(l10n_util::GetStringFUTF16( - IDS_NETWORK_DATA_REMAINING_MESSAGE, ASCIIToUTF16("0")), - l10n_util::GetStringUTF16(IDS_NETWORK_PURCHASE_MORE_MESSAGE), - NewCallback(this, &NetworkMessageObserver::MobileSetup), - false, false); - } else if (bytes_remaining <= kDataLowDataBytes) { - notification_no_data_.Hide(); - notification_low_data_.Show(l10n_util::GetStringFUTF16( - IDS_NETWORK_DATA_REMAINING_MESSAGE, - UTF8ToUTF16(base::Int64ToString(bytes_remaining/1024))), - l10n_util::GetStringUTF16(IDS_NETWORK_PURCHASE_MORE_MESSAGE), - NewCallback(this, &NetworkMessageObserver::MobileSetup), - false, false); - } else { - // Got more data, so hide notifications. + // Got data, so hide notifications. notification_low_data_.Hide(); notification_no_data_.Hide(); } diff --git a/chrome/browser/chromeos/network_message_observer.h b/chrome/browser/chromeos/network_message_observer.h index c92f6e2..8cf603a 100644 --- a/chrome/browser/chromeos/network_message_observer.h +++ b/chrome/browser/chromeos/network_message_observer.h @@ -20,12 +20,6 @@ class WindowDelegate; namespace chromeos { -// We show nearing expiration notification when less than 30 minutes. -static const int kDataNearingExpirationSecs = 30 * 60; - -// We show low data notification when less than 50MB. -static const int kDataLowDataBytes = 50 * 1024; - // The network message observer displays a system notification for network // messages. @@ -42,8 +36,7 @@ class NetworkMessageObserver : public NetworkLibrary::Observer { // NetworkLibrary::Observer implementation. virtual void NetworkChanged(NetworkLibrary* obj); - virtual void CellularDataPlanChanged(const std::string& service_path, - const CellularDataPlanList& plans); + virtual void CellularDataPlanChanged(NetworkLibrary* obj); bool initialized_; // Wifi networks by service path. diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc index d23e7ff..ad9caf2 100644 --- a/chrome/browser/chromeos/status/network_menu.cc +++ b/chrome/browser/chromeos/status/network_menu.cc @@ -45,6 +45,57 @@ namespace chromeos { // static const int NetworkMenu::kNumWifiImages = 9; +// NOTE: Use an array rather than just calculating a resource number to avoid +// creating implicit ordering dependencies on the resource values. +// static +const int NetworkMenu::kBarsImages[kNumWifiImages] = { + IDR_STATUSBAR_NETWORK_BARS1, + IDR_STATUSBAR_NETWORK_BARS2, + IDR_STATUSBAR_NETWORK_BARS3, + IDR_STATUSBAR_NETWORK_BARS4, + IDR_STATUSBAR_NETWORK_BARS5, + IDR_STATUSBAR_NETWORK_BARS6, + IDR_STATUSBAR_NETWORK_BARS7, + IDR_STATUSBAR_NETWORK_BARS8, + IDR_STATUSBAR_NETWORK_BARS9, +}; +// static +const int NetworkMenu::kBarsImagesBlack[kNumWifiImages] = { + IDR_STATUSBAR_NETWORK_BARS1_BLACK, + IDR_STATUSBAR_NETWORK_BARS2_BLACK, + IDR_STATUSBAR_NETWORK_BARS3_BLACK, + IDR_STATUSBAR_NETWORK_BARS4_BLACK, + IDR_STATUSBAR_NETWORK_BARS5_BLACK, + IDR_STATUSBAR_NETWORK_BARS6_BLACK, + IDR_STATUSBAR_NETWORK_BARS7_BLACK, + IDR_STATUSBAR_NETWORK_BARS8_BLACK, + IDR_STATUSBAR_NETWORK_BARS9_BLACK, +}; +// static +const int NetworkMenu::kBarsImagesLowData[kNumWifiImages] = { + IDR_STATUSBAR_NETWORK_BARS1_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS2_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS3_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS4_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS5_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS6_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS7_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS8_LOWDATA, + IDR_STATUSBAR_NETWORK_BARS9_LOWDATA, +}; +// static +const int NetworkMenu::kBarsImagesVLowData[kNumWifiImages] = { + IDR_STATUSBAR_NETWORK_BARS1_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS2_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS3_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS4_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS5_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS6_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS7_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS8_VLOWDATA, + IDR_STATUSBAR_NETWORK_BARS9_VLOWDATA, +}; + NetworkMenu::NetworkMenu() : min_width_(-1) { network_menu_.reset(NetworkMenuUI::CreateMenu2(this)); @@ -320,36 +371,32 @@ void NetworkMenu::UpdateMenu() { // static SkBitmap NetworkMenu::IconForNetworkStrength(int strength, bool black) { // Compose wifi icon by superimposing various icons. - // NOTE: Use an array rather than just calculating a resource number to avoid - // creating implicit ordering dependencies on the resource values. - static const int kBarsImages[kNumWifiImages] = { - IDR_STATUSBAR_NETWORK_BARS1, - IDR_STATUSBAR_NETWORK_BARS2, - IDR_STATUSBAR_NETWORK_BARS3, - IDR_STATUSBAR_NETWORK_BARS4, - IDR_STATUSBAR_NETWORK_BARS5, - IDR_STATUSBAR_NETWORK_BARS6, - IDR_STATUSBAR_NETWORK_BARS7, - IDR_STATUSBAR_NETWORK_BARS8, - IDR_STATUSBAR_NETWORK_BARS9, - }; - static const int kBarsBlackImages[kNumWifiImages] = { - IDR_STATUSBAR_NETWORK_BARS1_BLACK, - IDR_STATUSBAR_NETWORK_BARS2_BLACK, - IDR_STATUSBAR_NETWORK_BARS3_BLACK, - IDR_STATUSBAR_NETWORK_BARS4_BLACK, - IDR_STATUSBAR_NETWORK_BARS5_BLACK, - IDR_STATUSBAR_NETWORK_BARS6_BLACK, - IDR_STATUSBAR_NETWORK_BARS7_BLACK, - IDR_STATUSBAR_NETWORK_BARS8_BLACK, - IDR_STATUSBAR_NETWORK_BARS9_BLACK, - }; - int index = static_cast<int>(strength / 100.0 * nextafter(static_cast<float>(kNumWifiImages), 0)); index = std::max(std::min(index, kNumWifiImages - 1), 0); - return *ResourceBundle::GetSharedInstance().GetBitmapNamed( - black ? kBarsBlackImages[index] : kBarsImages[index]); + const int* images = black ? kBarsImagesBlack : kBarsImages; + return *ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); +} + +SkBitmap NetworkMenu::IconForNetworkStrength(CellularNetwork cellular) { + // Compose wifi icon by superimposing various icons. + int index = static_cast<int>(cellular.strength() / 100.0 * + nextafter(static_cast<float>(kNumWifiImages), 0)); + index = std::max(std::min(index, kNumWifiImages - 1), 0); + const int* images; + switch (cellular.data_left()) { + case CellularNetwork::DATA_NONE: + case CellularNetwork::DATA_VERY_LOW: + images = kBarsImagesVLowData; + break; + case CellularNetwork::DATA_LOW: + images = kBarsImagesLowData; + break; + case CellularNetwork::DATA_NORMAL: + images = kBarsImages; + break; + } + return *ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); } // static diff --git a/chrome/browser/chromeos/status/network_menu.h b/chrome/browser/chromeos/status/network_menu.h index 8419cfe..3c8d322 100644 --- a/chrome/browser/chromeos/status/network_menu.h +++ b/chrome/browser/chromeos/status/network_menu.h @@ -114,6 +114,10 @@ class NetworkMenu : public views::ViewMenuDelegate, // on a light background or a white icon for display on a dark background. static SkBitmap IconForNetworkStrength(int strength, bool black); + // Returns the Icon for a network strength for CellularNetwork |cellular|. + // This returns different colored bars depending on cellular data left. + static SkBitmap IconForNetworkStrength(CellularNetwork cellular); + // This method will convert the |icon| bitmap to the correct size for display. // If the |badge| icon is not empty, it will draw that on top of the icon. static SkBitmap IconForDisplay(SkBitmap icon, SkBitmap badge); @@ -190,6 +194,12 @@ class NetworkMenu : public views::ViewMenuDelegate, // The number of wifi strength images. static const int kNumWifiImages; + // Bars image resources. + static const int kBarsImages[]; + static const int kBarsImagesBlack[]; + static const int kBarsImagesLowData[]; + static const int kBarsImagesVLowData[]; + // Our menu items. MenuItemVector menu_items_; diff --git a/chrome/browser/chromeos/status/network_menu_button.cc b/chrome/browser/chromeos/status/network_menu_button.cc index c16383e..3d43f18 100644 --- a/chrome/browser/chromeos/status/network_menu_button.cc +++ b/chrome/browser/chromeos/status/network_menu_button.cc @@ -120,11 +120,16 @@ void NetworkMenuButton::NetworkChanged(NetworkLibrary* cros) { IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, UTF8ToWide(cros->wifi_network().name()))); } else if (cros->cellular_connected()) { - SetIcon(IconForNetworkStrength( - cros->cellular_network().strength(), false)); + const CellularNetwork& cellular = cros->cellular_network(); + if (cellular.data_left() == CellularNetwork::DATA_NONE) { + // If no data, then we show 0 bars. + SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); + } else { + SetIcon(IconForNetworkStrength(cellular)); + } SetTooltipText(l10n_util::GetStringF( IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP, - UTF8ToWide(cros->cellular_network().name()))); + UTF8ToWide(cellular.name()))); } else { SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0)); SetTooltipText(l10n_util::GetString( @@ -136,9 +141,20 @@ void NetworkMenuButton::NetworkChanged(NetworkLibrary* cros) { SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED)); } else if (!cros->ethernet_connected() && !cros->wifi_connected() && (cros->cellular_connecting() || cros->cellular_connected())) { - // TODO(chocobo): Check cellular network 3g/edge. - SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G)); -// SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE)); + int id; + switch (cros->cellular_network().data_left()) { + case CellularNetwork::DATA_NONE: + case CellularNetwork::DATA_VERY_LOW: + id = IDR_STATUSBAR_NETWORK_3G_VLOWDATA; + break; + case CellularNetwork::DATA_LOW: + id = IDR_STATUSBAR_NETWORK_3G_LOWDATA; + break; + case CellularNetwork::DATA_NORMAL: + id = IDR_STATUSBAR_NETWORK_3G; + break; + } + SetBadge(*rb.GetBitmapNamed(id)); } else { SetBadge(SkBitmap()); } @@ -153,6 +169,11 @@ void NetworkMenuButton::NetworkChanged(NetworkLibrary* cros) { UpdateMenu(); } +void NetworkMenuButton::CellularDataPlanChanged(NetworkLibrary* cros) { + // Call NetworkChanged which will update the icon. + NetworkChanged(cros); +} + void NetworkMenuButton::SetBadge(const SkBitmap& badge) { badge_ = badge; } diff --git a/chrome/browser/chromeos/status/network_menu_button.h b/chrome/browser/chromeos/status/network_menu_button.h index bb5ff96..79c5cdb 100644 --- a/chrome/browser/chromeos/status/network_menu_button.h +++ b/chrome/browser/chromeos/status/network_menu_button.h @@ -56,6 +56,7 @@ class NetworkMenuButton : public StatusAreaButton, // NetworkLibrary::Observer implementation. virtual void NetworkChanged(NetworkLibrary* obj); + virtual void CellularDataPlanChanged(NetworkLibrary* obj); // Sets the badge icon. void SetBadge(const SkBitmap& badge); |