Chromium Code Reviews| Index: chrome/browser/chromeos/low_battery_observer.cc |
| diff --git a/chrome/browser/chromeos/low_battery_observer.cc b/chrome/browser/chromeos/low_battery_observer.cc |
| index 400c0248bed62f7a19c0f8bdd9ee599aab803beb..071b6ffd99451f5bbf2fc061748fdfc80654c171 100644 |
| --- a/chrome/browser/chromeos/low_battery_observer.cc |
| +++ b/chrome/browser/chromeos/low_battery_observer.cc |
| @@ -8,11 +8,13 @@ |
| #include "base/utf_string_conversions.h" |
| #include "chrome/common/time_format.h" |
| #include "grit/generated_resources.h" |
| +#include "grit/theme_resources.h" |
| namespace chromeos { |
| LowBatteryObserver::LowBatteryObserver(Profile* profile) |
| : notification_(profile, "battery.chromeos", |
| + IDR_NOTIFICATION_LOW_BATTERY, |
| l10n_util::GetStringUTF16(IDS_LOW_BATTERY_TITLE)), |
| remaining_(0) {} |
| @@ -21,11 +23,25 @@ LowBatteryObserver::~LowBatteryObserver() { |
| } |
| void LowBatteryObserver::PowerChanged(PowerLibrary* object) { |
| - const int limit = 15; // Notification will show when remaining number |
| - // of minutes is <= limit |
| + const int limit_min = 15; // Notification will show when remaining number |
| + // of minutes is <= limit. |
| + const int limit_max = 30; // Notification will hid when remaining number |
| + // of minutes is > limit_max. |
| + const int critical = 5; // Notification will be forced visible if hidden |
| + // by user when time remaining <= critical. |
| base::TimeDelta remaining = object->battery_time_to_empty(); |
| - bool line_power = object->line_power_on(); |
| + int remaining_minutes = remaining.InMinutes(); |
| + |
| + // To simplify the logic - we handle the case of calculating the remaining |
| + // time as if we were on line power. |
| + bool line_power = object->line_power_on() || remaining == base::TimeDelta(); |
|
oshima
2010/05/19 19:23:51
I'm guessing that remaining == 0 mean we're calcul
|
| + |
| + // The urgent flag is used to re-notify the user if the power level |
| + // goes critical. We only want to do this once even if the time remaining |
| + // goes back up (so long as it doesn't go above limit_max. |
| + bool urgent = !line_power && |
| + (notification_.urgent() || remaining_minutes <= critical); |
| // remaining time of zero means still calculating, this is denoted by |
| // TimeDelta(). |
| @@ -35,31 +51,29 @@ void LowBatteryObserver::PowerChanged(PowerLibrary* object) { |
| // Edges: hide: is visible_ to !visible_ triggered if we transition |
| // to line_power, we're calculating our time remaining, |
| // or our time remaining has climbed higher than |
| - // limit (either by reduced useor an undected transition to/from |
| - // line_power). |
| + // limit_max (either by reduced user an undetected transition |
| + // to/from line_power). |
| // update: is visible_ to _visible triggered when we didn't hide |
| // and the minutes remaining changed from what's shown. |
| // show: is !visible_ to visible_ triggered when we're on battery, |
| // we know the remaining time, and that time is less than limit. |
| if (notification_.visible()) { |
| - if (line_power || remaining == base::TimeDelta() |
| - || remaining.InMinutes() > limit) { |
| + if (line_power || remaining_minutes > limit_max) { |
| Hide(); |
| - } else if (remaining.InMinutes() != remaining_) { |
| - Show(remaining); |
| + } else if (remaining_minutes != remaining_) { |
| + Show(remaining, urgent); |
| } |
| } else { |
| - if (!line_power && remaining != base::TimeDelta() |
| - && remaining.InMinutes() <= limit) { |
| - Show(remaining); |
| + if (!line_power && remaining_minutes <= limit_min) { |
| + Show(remaining, urgent); |
| } |
| } |
| } |
| -void LowBatteryObserver::Show(base::TimeDelta remaining) { |
| +void LowBatteryObserver::Show(base::TimeDelta remaining, bool urgent) { |
| notification_.Show(l10n_util::GetStringFUTF16(IDS_LOW_BATTERY_MESSAGE, |
| - WideToUTF16(TimeFormat::TimeRemaining(remaining)))); |
| + WideToUTF16(TimeFormat::TimeRemaining(remaining))), urgent); |
| remaining_ = remaining.InMinutes(); |
| } |