Home | History | Annotate | Download | only in power
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_
      6 #define ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_
      7 
      8 #include "ash/system/chromeos/power/power_status.h"
      9 #include "ash/system/tray/system_tray_item.h"
     10 
     11 class SkBitmap;
     12 
     13 namespace gfx {
     14 class Image;
     15 class ImageSkia;
     16 }
     17 
     18 namespace message_center {
     19 class MessageCenter;
     20 }
     21 
     22 namespace ash {
     23 namespace internal {
     24 
     25 namespace tray {
     26 class PowerNotificationView;
     27 class PowerTrayView;
     28 }
     29 
     30 class ASH_EXPORT TrayPower : public SystemTrayItem,
     31                              public PowerStatus::Observer {
     32  public:
     33   // Visible for testing.
     34   enum NotificationState {
     35     NOTIFICATION_NONE,
     36 
     37     // Low battery charge.
     38     NOTIFICATION_LOW_POWER,
     39 
     40     // Critically low battery charge.
     41     NOTIFICATION_CRITICAL,
     42   };
     43 
     44   // Time-based notification thresholds when on battery power.
     45   static const int kCriticalMinutes;
     46   static const int kLowPowerMinutes;
     47   static const int kNoWarningMinutes;
     48 
     49   // Percentage-based notification thresholds when using a low-power charger.
     50   static const int kCriticalPercentage;
     51   static const int kLowPowerPercentage;
     52   static const int kNoWarningPercentage;
     53 
     54   TrayPower(SystemTray* system_tray,
     55             message_center::MessageCenter* message_center);
     56   virtual ~TrayPower();
     57 
     58  private:
     59   friend class TrayPowerTest;
     60 
     61   // This enum is used for histogram. The existing values should not be removed,
     62   // and the new values should be added just before CHARGER_TYPE_COUNT.
     63   enum ChargerType{
     64     UNKNOWN_CHARGER,
     65     MAINS_CHARGER,
     66     USB_CHARGER,
     67     UNCONFIRMED_SPRING_CHARGER,
     68     SAFE_SPRING_CHARGER,
     69     CHARGER_TYPE_COUNT,
     70   };
     71 
     72   // Overridden from SystemTrayItem.
     73   virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
     74   virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
     75   virtual views::View* CreateNotificationView(
     76       user::LoginStatus status) OVERRIDE;
     77   virtual void DestroyTrayView() OVERRIDE;
     78   virtual void DestroyDefaultView() OVERRIDE;
     79   virtual void DestroyNotificationView() OVERRIDE;
     80   virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
     81   virtual void UpdateAfterShelfAlignmentChange(
     82       ShelfAlignment alignment) OVERRIDE;
     83 
     84   // Overridden from PowerStatus::Observer.
     85   virtual void OnPowerStatusChanged() OVERRIDE;
     86 
     87   // Show a notification that a low-power USB charger has been connected.
     88   // Returns true if a notification was shown or explicitly hidden.
     89   bool MaybeShowUsbChargerNotification();
     90 
     91   // Sets |notification_state_|. Returns true if a notification should be shown.
     92   bool UpdateNotificationState();
     93   bool UpdateNotificationStateForRemainingTime();
     94   bool UpdateNotificationStateForRemainingPercentage();
     95 
     96   // Records the charger type in UMA.
     97   void RecordChargerType();
     98 
     99   message_center::MessageCenter* message_center_;  // Not owned.
    100   tray::PowerTrayView* power_tray_;
    101   tray::PowerNotificationView* notification_view_;
    102   NotificationState notification_state_;
    103 
    104   // Was a USB charger connected the last time OnPowerStatusChanged() was
    105   // called?
    106   bool usb_charger_was_connected_;
    107 
    108   // Was line power connected the last time onPowerStatusChanged() was called?
    109   bool line_power_was_connected_;
    110 
    111   DISALLOW_COPY_AND_ASSIGN(TrayPower);
    112 };
    113 
    114 }  // namespace internal
    115 }  // namespace ash
    116 
    117 #endif  // ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_
    118