summaryrefslogtreecommitdiff
path: root/chromium/ash/system/chromeos/power/power_status.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ash/system/chromeos/power/power_status.h')
-rw-r--r--chromium/ash/system/chromeos/power/power_status.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/chromium/ash/system/chromeos/power/power_status.h b/chromium/ash/system/chromeos/power/power_status.h
new file mode 100644
index 00000000000..a5cf3aef5c9
--- /dev/null
+++ b/chromium/ash/system/chromeos/power/power_status.h
@@ -0,0 +1,152 @@
+// 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.
+
+#ifndef ASH_SYSTEM_CHROMEOS_POWER_POWER_STATUS_H_
+#define ASH_SYSTEM_CHROMEOS_POWER_POWER_STATUS_H_
+
+#include "ash/ash_export.h"
+#include "base/basictypes.h"
+#include "base/observer_list.h"
+#include "base/strings/string16.h"
+#include "base/time/time.h"
+#include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
+#include "chromeos/dbus/power_manager_client.h"
+#include "ui/gfx/image/image_skia.h"
+
+namespace ash {
+namespace internal {
+
+// PowerStatus is a singleton that receives updates about the system's
+// power status from chromeos::PowerManagerClient and makes the information
+// available to interested classes within Ash.
+class ASH_EXPORT PowerStatus : public chromeos::PowerManagerClient::Observer {
+ public:
+ // Different styles of battery icons.
+ enum IconSet {
+ ICON_LIGHT,
+ ICON_DARK
+ };
+
+ // Interface for classes that wish to be notified when the power status
+ // has changed.
+ class Observer {
+ public:
+ // Called when the power status changes.
+ virtual void OnPowerStatusChanged() = 0;
+
+ protected:
+ virtual ~Observer() {}
+ };
+
+ // Maximum battery time-to-full or time-to-empty that should be displayed
+ // in the UI. If the current is close to zero, battery time estimates can
+ // get very large; avoid displaying these large numbers.
+ static const int kMaxBatteryTimeToDisplaySec;
+
+ // Sets the global instance. Must be called before any calls to Get().
+ static void Initialize();
+
+ // Destroys the global instance.
+ static void Shutdown();
+
+ // Returns true if the global instance is initialized.
+ static bool IsInitialized();
+
+ // Gets the global instance. Initialize must be called first.
+ static PowerStatus* Get();
+
+ // Returns true if |time|, a time returned by GetBatteryTimeToEmpty() or
+ // GetBatteryTimeToFull(), should be displayed in the UI.
+ // Less-than-a-minute or very large values aren't displayed.
+ static bool ShouldDisplayBatteryTime(const base::TimeDelta& time);
+
+ // Copies the hour and minute components of |time| to |hours| and |minutes|.
+ static void SplitTimeIntoHoursAndMinutes(const base::TimeDelta& time,
+ int* hours,
+ int* minutes);
+
+ // Adds or removes an observer.
+ void AddObserver(Observer* observer);
+ void RemoveObserver(Observer* observer);
+
+ // Requests updated status from the power manager.
+ void RequestStatusUpdate();
+
+ // Returns true if a battery is present.
+ bool IsBatteryPresent() const;
+
+ // Returns true if the battery is full. This also implies that a charger
+ // is connected.
+ bool IsBatteryFull() const;
+
+ // Returns true if the battery is charging. Note that this implies that a
+ // charger is connected but the converse is not necessarily true: the
+ // battery may be discharging even while a (perhaps low-power) charger is
+ // connected. Use Is*Connected() to test for the presence of a charger
+ // and also see IsBatteryDischargingOnLinePower().
+ bool IsBatteryCharging() const;
+
+ // Returns true if the battery is discharging (or neither charging nor
+ // discharging while not being full) while line power is connected.
+ bool IsBatteryDischargingOnLinePower() const;
+
+ // Returns the battery's remaining charge as a value in the range [0.0,
+ // 100.0].
+ double GetBatteryPercent() const;
+
+ // Returns the battery's remaining charge, rounded to an integer with a
+ // maximum value of 100.
+ int GetRoundedBatteryPercent() const;
+
+ // Returns true if the battery's time-to-full and time-to-empty estimates
+ // should not be displayed because the power manager is still calculating
+ // them.
+ bool IsBatteryTimeBeingCalculated() const;
+
+ // Returns the estimated time until the battery is empty (if line power
+ // is disconnected) or full (if line power is connected). These estimates
+ // should only be used if IsBatteryTimeBeingCalculated() returns false.
+ base::TimeDelta GetBatteryTimeToEmpty() const;
+ base::TimeDelta GetBatteryTimeToFull() const;
+
+ // Returns true if line power (including a charger of any type) is connected.
+ bool IsLinePowerConnected() const;
+
+ // Returns true if an official, non-USB charger is connected.
+ bool IsMainsChargerConnected() const;
+
+ // Returns true if a USB charger (which is likely to only support a low
+ // charging rate) is connected.
+ bool IsUsbChargerConnected() const;
+
+ // Returns the image that should be shown for the battery's current state.
+ gfx::ImageSkia GetBatteryImage(IconSet icon_set) const;
+
+ // Returns an string describing the current state for accessibility.
+ base::string16 GetAccessibleNameString() const;
+
+ // Updates |proto_|. Does not notify observers.
+ void SetProtoForTesting(const power_manager::PowerSupplyProperties& proto);
+
+ protected:
+ PowerStatus();
+ virtual ~PowerStatus();
+
+ private:
+ // Overriden from PowerManagerClient::Observer.
+ virtual void PowerChanged(
+ const power_manager::PowerSupplyProperties& proto) OVERRIDE;
+
+ ObserverList<Observer> observers_;
+
+ // Current state.
+ power_manager::PowerSupplyProperties proto_;
+
+ DISALLOW_COPY_AND_ASSIGN(PowerStatus);
+};
+
+} // namespace internal
+} // namespace ash
+
+#endif // ASH_SYSTEM_CHROMEOS_POWER_POWER_STATUS_H_