Index: chrome/browser/chromeos/cros/cellular_data_plan.cc |
diff --git a/chrome/browser/chromeos/cros/cellular_data_plan.cc b/chrome/browser/chromeos/cros/cellular_data_plan.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d57925460336d0403c3cfd742a28d08d4e28d1f3 |
--- /dev/null |
+++ b/chrome/browser/chromeos/cros/cellular_data_plan.cc |
@@ -0,0 +1,165 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/chromeos/cros/cellular_data_plan.h" |
+ |
+#include "base/i18n/time_formatting.h" |
+#include "base/string_number_conversions.h" |
+#include "base/utf_string_conversions.h" |
+#include "chrome/common/time_format.h" |
+#include "grit/generated_resources.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/text/bytes_formatting.h" |
+ |
+namespace chromeos { |
+ |
+// Cellular network is considered low data when less than 60 minues. |
+const int kCellularDataLowSecs = 60 * 60; |
+ |
+// Cellular network is considered low data when less than 30 minues. |
+const int kCellularDataVeryLowSecs = 30 * 60; |
+ |
+// Cellular network is considered low data when less than 100MB. |
+const int kCellularDataLowBytes = 100 * 1024 * 1024; |
+ |
+// Cellular network is considered very low data when less than 50MB. |
+const int kCellularDataVeryLowBytes = 50 * 1024 * 1024; |
+ |
+CellularDataPlan::CellularDataPlan() |
+ : plan_name("Unknown"), |
+ plan_type(CELLULAR_DATA_PLAN_UNLIMITED), |
+ plan_data_bytes(0), |
+ data_bytes_used(0) { |
+} |
+ |
+CellularDataPlan::CellularDataPlan(const CellularDataPlanInfo &plan) |
+ : plan_name(plan.plan_name ? plan.plan_name : ""), |
+ plan_type(plan.plan_type), |
+ update_time(base::Time::FromInternalValue(plan.update_time)), |
+ plan_start_time(base::Time::FromInternalValue(plan.plan_start_time)), |
+ plan_end_time(base::Time::FromInternalValue(plan.plan_end_time)), |
+ plan_data_bytes(plan.plan_data_bytes), |
+ data_bytes_used(plan.data_bytes_used) { |
+} |
+ |
+CellularDataPlan::~CellularDataPlan() {} |
+ |
+string16 CellularDataPlan::GetPlanDesciption() const { |
+ switch (plan_type) { |
+ case chromeos::CELLULAR_DATA_PLAN_UNLIMITED: { |
+ return l10n_util::GetStringFUTF16( |
+ IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PURCHASE_UNLIMITED_DATA, |
+ base::TimeFormatFriendlyDate(plan_start_time)); |
+ break; |
+ } |
+ case chromeos::CELLULAR_DATA_PLAN_METERED_PAID: { |
+ return l10n_util::GetStringFUTF16( |
+ IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PURCHASE_DATA, |
+ ui::FormatBytes(plan_data_bytes), |
+ base::TimeFormatFriendlyDate(plan_start_time)); |
+ } |
+ case chromeos::CELLULAR_DATA_PLAN_METERED_BASE: { |
+ return l10n_util::GetStringFUTF16( |
+ IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_RECEIVED_FREE_DATA, |
+ ui::FormatBytes(plan_data_bytes), |
+ base::TimeFormatFriendlyDate(plan_start_time)); |
+ default: |
+ break; |
+ } |
+ } |
+ return string16(); |
+} |
+ |
+string16 CellularDataPlan::GetRemainingWarning() const { |
+ if (plan_type == chromeos::CELLULAR_DATA_PLAN_UNLIMITED) { |
+ // Time based plan. Show nearing expiration and data expiration. |
+ if (remaining_time().InSeconds() <= chromeos::kCellularDataVeryLowSecs) { |
+ return GetPlanExpiration(); |
+ } |
+ } else if (plan_type == chromeos::CELLULAR_DATA_PLAN_METERED_PAID || |
+ plan_type == chromeos::CELLULAR_DATA_PLAN_METERED_BASE) { |
+ // Metered plan. Show low data and out of data. |
+ if (remaining_data() <= chromeos::kCellularDataVeryLowBytes) { |
+ int64 remaining_mbytes = remaining_data() / (1024 * 1024); |
+ return l10n_util::GetStringFUTF16( |
+ IDS_NETWORK_DATA_REMAINING_MESSAGE, |
+ UTF8ToUTF16(base::Int64ToString(remaining_mbytes))); |
+ } |
+ } |
+ return string16(); |
+} |
+ |
+string16 CellularDataPlan::GetDataRemainingDesciption() const { |
+ int64 remaining_bytes = remaining_data(); |
+ switch (plan_type) { |
+ case chromeos::CELLULAR_DATA_PLAN_UNLIMITED: { |
+ return l10n_util::GetStringUTF16( |
+ IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_UNLIMITED); |
+ } |
+ case chromeos::CELLULAR_DATA_PLAN_METERED_PAID: { |
+ return ui::FormatBytes(remaining_bytes); |
+ } |
+ case chromeos::CELLULAR_DATA_PLAN_METERED_BASE: { |
+ return ui::FormatBytes(remaining_bytes); |
+ } |
+ default: |
+ break; |
+ } |
+ return string16(); |
+} |
+ |
+string16 CellularDataPlan::GetUsageInfo() const { |
+ if (plan_type == chromeos::CELLULAR_DATA_PLAN_UNLIMITED) { |
+ // Time based plan. Show nearing expiration and data expiration. |
+ return GetPlanExpiration(); |
+ } else if (plan_type == chromeos::CELLULAR_DATA_PLAN_METERED_PAID || |
+ plan_type == chromeos::CELLULAR_DATA_PLAN_METERED_BASE) { |
+ // Metered plan. Show low data and out of data. |
+ int64 remaining_bytes = remaining_data(); |
+ if (remaining_bytes == 0) { |
+ return l10n_util::GetStringUTF16( |
+ IDS_NETWORK_DATA_NONE_AVAILABLE_MESSAGE); |
+ } else if (remaining_bytes < 1024 * 1024) { |
+ return l10n_util::GetStringUTF16( |
+ IDS_NETWORK_DATA_LESS_THAN_ONE_MB_AVAILABLE_MESSAGE); |
+ } else { |
+ int64 remaining_mb = remaining_bytes / (1024 * 1024); |
+ return l10n_util::GetStringFUTF16( |
+ IDS_NETWORK_DATA_MB_AVAILABLE_MESSAGE, |
+ UTF8ToUTF16(base::Int64ToString(remaining_mb))); |
+ } |
+ } |
+ return string16(); |
+} |
+ |
+std::string CellularDataPlan::GetUniqueIdentifier() const { |
+ // A cellular plan is uniquely described by the union of name, type, |
+ // start time, end time, and max bytes. |
+ // So we just return a union of all these variables. |
+ return plan_name + "|" + |
+ base::Int64ToString(plan_type) + "|" + |
+ base::Int64ToString(plan_start_time.ToInternalValue()) + "|" + |
+ base::Int64ToString(plan_end_time.ToInternalValue()) + "|" + |
+ base::Int64ToString(plan_data_bytes); |
+} |
+ |
+base::TimeDelta CellularDataPlan::remaining_time() const { |
+ base::TimeDelta time = plan_end_time - base::Time::Now(); |
+ return time.InMicroseconds() < 0 ? base::TimeDelta() : time; |
+} |
+ |
+int64 CellularDataPlan::remaining_minutes() const { |
+ return remaining_time().InMinutes(); |
+} |
+ |
+int64 CellularDataPlan::remaining_data() const { |
+ int64 data = plan_data_bytes - data_bytes_used; |
+ return data < 0 ? 0 : data; |
+} |
+ |
+string16 CellularDataPlan::GetPlanExpiration() const { |
+ return TimeFormat::TimeRemaining(remaining_time()); |
+} |
+ |
+} // namespace chromeos |