Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10024)

Unified Diff: ash/system/chromeos/power/power_status.cc

Issue 18176013: chromeos: Refactor system tray code into PowerStatus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove virtual Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/system/chromeos/power/power_status.h ('k') | ash/system/chromeos/power/power_status_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/chromeos/power/power_status.cc
diff --git a/ash/system/chromeos/power/power_status.cc b/ash/system/chromeos/power/power_status.cc
index 5cc641ec214074c31eeda46b3cb6d20bf24531e0..bd000428341f0aa37009caf27f3266e5565bac67 100644
--- a/ash/system/chromeos/power/power_status.cc
+++ b/ash/system/chromeos/power/power_status.cc
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright (c) 2013 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.
@@ -7,17 +7,56 @@
#include <algorithm>
#include <cmath>
+#include "ash/shell.h"
+#include "ash/shell_delegate.h"
#include "base/logging.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h"
+#include "grit/ash_resources.h"
+#include "grit/ash_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/rect.h"
namespace ash {
namespace internal {
namespace {
+base::string16 GetBatteryTimeAccessibilityString(int hour, int min) {
+ DCHECK(hour || min);
+ if (hour && !min) {
+ return Shell::GetInstance()->delegate()->GetTimeDurationLongString(
+ base::TimeDelta::FromHours(hour));
+ }
+ if (min && !hour) {
+ return Shell::GetInstance()->delegate()->GetTimeDurationLongString(
+ base::TimeDelta::FromMinutes(min));
+ }
+ return l10n_util::GetStringFUTF16(
+ IDS_ASH_STATUS_TRAY_BATTERY_TIME_ACCESSIBLE,
+ Shell::GetInstance()->delegate()->GetTimeDurationLongString(
+ base::TimeDelta::FromHours(hour)),
+ Shell::GetInstance()->delegate()->GetTimeDurationLongString(
+ base::TimeDelta::FromMinutes(min)));
+}
+
static PowerStatus* g_power_status = NULL;
+// Minimum battery percentage rendered in UI.
+const int kMinBatteryPercent = 1;
+
+// Width and height of battery images.
+const int kBatteryImageHeight = 25;
+const int kBatteryImageWidth = 25;
+
+// Number of different power states.
+const int kNumPowerImages = 15;
+
} // namespace
// static
@@ -54,6 +93,129 @@ void PowerStatus::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
+void PowerStatus::RequestStatusUpdate() {
+ chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
+ RequestStatusUpdate();
+}
+
+bool PowerStatus::IsBatteryPresent() const {
+ return status_.battery_is_present;
+}
+
+bool PowerStatus::IsBatteryFull() const {
+ return status_.battery_is_full;
+}
+
+double PowerStatus::GetBatteryPercent() const {
+ return status_.battery_percentage;
+}
+
+int PowerStatus::GetRoundedBatteryPercent() const {
+ return std::max(kMinBatteryPercent,
+ static_cast<int>(status_.battery_percentage + 0.5));
+}
+
+bool PowerStatus::IsBatteryTimeBeingCalculated() const {
+ return status_.is_calculating_battery_time;
+}
+
+base::TimeDelta PowerStatus::GetBatteryTimeToEmpty() const {
+ return base::TimeDelta::FromSeconds(status_.battery_seconds_to_empty);
+}
+
+base::TimeDelta PowerStatus::GetBatteryTimeToFull() const {
+ return base::TimeDelta::FromSeconds(status_.battery_seconds_to_full);
+}
+
+bool PowerStatus::IsLinePowerConnected() const {
+ return status_.line_power_on;
+}
+
+bool PowerStatus::IsMainsChargerConnected() const {
+ return status_.battery_state == chromeos::PowerSupplyStatus::CHARGING;
+}
+
+bool PowerStatus::IsUsbChargerConnected() const {
+ return status_.battery_state == chromeos::PowerSupplyStatus::CONNECTED_TO_USB;
+}
+
+gfx::ImageSkia PowerStatus::GetBatteryImage(IconSet icon_set) const {
+ gfx::Image all;
+ if (IsUsbChargerConnected()) {
+ all = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
+ icon_set == ICON_DARK ?
+ IDR_AURA_UBER_TRAY_POWER_SMALL_CHARGING_UNRELIABLE_DARK :
+ IDR_AURA_UBER_TRAY_POWER_SMALL_CHARGING_UNRELIABLE);
+ } else {
+ all = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
+ icon_set == ICON_DARK ?
+ IDR_AURA_UBER_TRAY_POWER_SMALL_DARK : IDR_AURA_UBER_TRAY_POWER_SMALL);
+ }
+
+ // Get the horizontal offset in the battery icon array image.
+ int offset = (IsUsbChargerConnected() || !status_.line_power_on) ? 0 : 1;
+
+ // Get the icon index in the battery icon array image.
+ int index = -1;
+ if (status_.battery_percentage >= 100) {
+ index = kNumPowerImages - 1;
+ } else if (!status_.battery_is_present) {
+ index = kNumPowerImages;
+ } else {
+ index = static_cast<int>(
+ status_.battery_percentage / 100.0 * (kNumPowerImages - 1));
+ index = std::max(std::min(index, kNumPowerImages - 2), 0);
+ }
+
+ gfx::Rect region(
+ offset * kBatteryImageWidth, index * kBatteryImageHeight,
+ kBatteryImageWidth, kBatteryImageHeight);
+ return gfx::ImageSkiaOperations::ExtractSubset(*all.ToImageSkia(), region);
+}
+
+base::string16 PowerStatus::GetAccessibleNameString() const {
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (status_.line_power_on && status_.battery_is_full) {
+ return rb.GetLocalizedString(
+ IDS_ASH_STATUS_TRAY_BATTERY_FULL_CHARGE_ACCESSIBLE);
+ }
+ base::string16 battery_percentage_accessible = l10n_util::GetStringFUTF16(
+ IsLinePowerConnected() ?
+ IDS_ASH_STATUS_TRAY_BATTERY_PERCENT_CHARGING_ACCESSIBLE :
+ IDS_ASH_STATUS_TRAY_BATTERY_PERCENT_ACCESSIBLE,
+ base::IntToString16(GetRoundedBatteryPercent()));
+ base::string16 battery_time_accessible = base::string16();
+ if (IsUsbChargerConnected()) {
+ battery_time_accessible = rb.GetLocalizedString(
+ IDS_ASH_STATUS_TRAY_BATTERY_CHARGING_UNRELIABLE_ACCESSIBLE);
+ } else {
+ if (IsBatteryTimeBeingCalculated()) {
+ battery_time_accessible = rb.GetLocalizedString(
+ IDS_ASH_STATUS_TRAY_BATTERY_CALCULATING_ACCESSIBLE);
+ } else {
+ base::TimeDelta time = IsLinePowerConnected() ? GetBatteryTimeToFull() :
+ GetBatteryTimeToEmpty();
+ int hour = time.InHours();
+ int min = (time - base::TimeDelta::FromHours(hour)).InMinutes();
+ if (hour || min) {
+ base::string16 minute = min < 10 ?
+ ASCIIToUTF16("0") + base::IntToString16(min) :
+ base::IntToString16(min);
+ battery_time_accessible =
+ l10n_util::GetStringFUTF16(
+ IsLinePowerConnected() ?
+ IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_FULL_ACCESSIBLE :
+ IDS_ASH_STATUS_TRAY_BATTERY_TIME_LEFT_ACCESSIBLE,
+ GetBatteryTimeAccessibilityString(hour, min));
+ }
+ }
+ }
+ return battery_time_accessible.empty() ?
+ battery_percentage_accessible :
+ battery_percentage_accessible + ASCIIToUTF16(". ") +
+ battery_time_accessible;
+}
+
PowerStatus::PowerStatus() {
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
AddObserver(this);
@@ -66,19 +228,12 @@ PowerStatus::~PowerStatus() {
RemoveObserver(this);
}
-void PowerStatus::RequestStatusUpdate() {
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
- RequestStatusUpdate();
-}
-
-chromeos::PowerSupplyStatus PowerStatus::GetPowerSupplyStatus() const {
- return power_supply_status_;
-}
+void PowerStatus::PowerChanged(const chromeos::PowerSupplyStatus& status) {
+ status_ = status;
+ if (status_.battery_is_full)
+ status_.battery_percentage = 100.0;
-void PowerStatus::PowerChanged(
- const chromeos::PowerSupplyStatus& power_status) {
- power_supply_status_ = power_status;
- FOR_EACH_OBSERVER(Observer, observers_, OnPowerStatusChanged(power_status));
+ FOR_EACH_OBSERVER(Observer, observers_, OnPowerStatusChanged());
}
} // namespace internal
« no previous file with comments | « ash/system/chromeos/power/power_status.h ('k') | ash/system/chromeos/power/power_status_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698