diff options
Diffstat (limited to 'chromium/ash/system/chromeos/power/power_status.h')
-rw-r--r-- | chromium/ash/system/chromeos/power/power_status.h | 152 |
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_ |