| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_ | 5 #ifndef ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_ |
| 6 #define ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_ | 6 #define ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_ |
| 7 | 7 |
| 8 #include "ash/system/tray/system_tray_item.h" | 8 #include "ash/system/tray/system_tray_item.h" |
| 9 #include "chromeos/power/power_manager_handler.h" | 9 #include "chromeos/power/power_manager_handler.h" |
| 10 | 10 |
| 11 class SkBitmap; | 11 class SkBitmap; |
| 12 | 12 |
| 13 namespace gfx { | 13 namespace gfx { |
| 14 class Image; |
| 14 class ImageSkia; | 15 class ImageSkia; |
| 15 } | 16 } |
| 16 | 17 |
| 18 namespace message_center { |
| 19 class MessageCenter; |
| 20 } |
| 21 |
| 17 namespace ash { | 22 namespace ash { |
| 18 namespace internal { | 23 namespace internal { |
| 19 | 24 |
| 20 namespace tray { | 25 namespace tray { |
| 21 class PowerNotificationView; | 26 class PowerNotificationView; |
| 22 class PowerTrayView; | 27 class PowerTrayView; |
| 23 } | 28 } |
| 24 | 29 |
| 25 enum IconSet { | 30 enum IconSet { |
| 26 ICON_LIGHT, | 31 ICON_LIGHT, |
| 27 ICON_DARK | 32 ICON_DARK |
| 28 }; | 33 }; |
| 29 | 34 |
| 30 class TrayPower : public SystemTrayItem, | 35 class ASH_EXPORT TrayPower : public SystemTrayItem, |
| 31 public chromeos::PowerManagerHandler::Observer { | 36 public chromeos::PowerManagerHandler::Observer { |
| 32 public: | 37 public: |
| 33 explicit TrayPower(SystemTray* system_tray); | 38 // Visible for testing. |
| 39 enum NotificationState { |
| 40 NOTIFICATION_NONE, |
| 41 |
| 42 // Low battery charge. |
| 43 NOTIFICATION_LOW_POWER, |
| 44 |
| 45 // Critically low battery charge. |
| 46 NOTIFICATION_CRITICAL, |
| 47 }; |
| 48 |
| 49 TrayPower(SystemTray* system_tray, |
| 50 message_center::MessageCenter* message_center); |
| 34 virtual ~TrayPower(); | 51 virtual ~TrayPower(); |
| 35 | 52 |
| 36 // Gets whether battery charging is unreliable for |supply_status|. | 53 // Gets whether battery charging is unreliable for |supply_status|. |
| 37 // When a non-standard power supply is connected, the battery may | 54 // When a non-standard power supply is connected, the battery may |
| 38 // change from being charged to discharged frequently depending on the | 55 // change from being charged to discharged frequently depending on the |
| 39 // charger power and power consumption, i.e usage. In this case we | 56 // charger power and power consumption, i.e usage. In this case we |
| 40 // do not want to show either a charging or discharging state. | 57 // do not want to show either a charging or discharging state. |
| 41 static bool IsBatteryChargingUnreliable( | 58 static bool IsBatteryChargingUnreliable( |
| 42 const chromeos::PowerSupplyStatus& supply_status); | 59 const chromeos::PowerSupplyStatus& supply_status); |
| 43 | 60 |
| 44 // Gets the icon index in the battery icon array image based on | 61 // Gets the icon index in the battery icon array image based on |
| 45 // |supply_status|. If |supply_status| is uncertain about the power state, | 62 // |supply_status|. If |supply_status| is uncertain about the power state, |
| 46 // returns -1. | 63 // returns -1. |
| 47 static int GetBatteryImageIndex( | 64 static int GetBatteryImageIndex( |
| 48 const chromeos::PowerSupplyStatus& supply_status); | 65 const chromeos::PowerSupplyStatus& supply_status); |
| 49 | 66 |
| 50 // Gets the horizontal offset in the battery icon array image based on | 67 // Gets the horizontal offset in the battery icon array image based on |
| 51 // |supply_status|. | 68 // |supply_status|. |
| 52 static int GetBatteryImageOffset( | 69 static int GetBatteryImageOffset( |
| 53 const chromeos::PowerSupplyStatus& supply_status); | 70 const chromeos::PowerSupplyStatus& supply_status); |
| 54 | 71 |
| 55 // Looks up the actual icon in the icon array image for |image_index|. | 72 // Looks up the actual icon in the icon array image for |image_index|. |
| 56 static gfx::ImageSkia GetBatteryImage(int image_index, | 73 static gfx::ImageSkia GetBatteryImage(int image_index, |
| 57 int image_offset, | 74 int image_offset, |
| 58 bool charging_unreliable, | 75 bool charging_unreliable, |
| 59 IconSet icon_set); | 76 IconSet icon_set); |
| 60 | 77 |
| 78 // Returns an icon for the USB charger notification. |
| 79 static gfx::Image GetUsbChargerNotificationImage(); |
| 80 |
| 61 // Gets the battery accessible string for |supply_status|. | 81 // Gets the battery accessible string for |supply_status|. |
| 62 static base::string16 GetAccessibleNameString( | 82 static base::string16 GetAccessibleNameString( |
| 63 const chromeos::PowerSupplyStatus& supply_status); | 83 const chromeos::PowerSupplyStatus& supply_status); |
| 64 | 84 |
| 65 // Gets rounded battery percentage for |battery_percentage|. | 85 // Gets rounded battery percentage for |battery_percentage|. |
| 66 static int GetRoundedBatteryPercentage(double battery_percentage); | 86 static int GetRoundedBatteryPercentage(double battery_percentage); |
| 67 | 87 |
| 68 private: | 88 private: |
| 69 enum NotificationState { | 89 friend class TrayPowerTest; |
| 70 NOTIFICATION_NONE, | |
| 71 NOTIFICATION_LOW_POWER, | |
| 72 NOTIFICATION_CRITICAL | |
| 73 }; | |
| 74 | 90 |
| 75 // Overridden from SystemTrayItem. | 91 // Overridden from SystemTrayItem. |
| 76 virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; | 92 virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; |
| 77 virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; | 93 virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; |
| 78 virtual views::View* CreateNotificationView( | 94 virtual views::View* CreateNotificationView( |
| 79 user::LoginStatus status) OVERRIDE; | 95 user::LoginStatus status) OVERRIDE; |
| 80 virtual void DestroyTrayView() OVERRIDE; | 96 virtual void DestroyTrayView() OVERRIDE; |
| 81 virtual void DestroyDefaultView() OVERRIDE; | 97 virtual void DestroyDefaultView() OVERRIDE; |
| 82 virtual void DestroyNotificationView() OVERRIDE; | 98 virtual void DestroyNotificationView() OVERRIDE; |
| 83 virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE; | 99 virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE; |
| 84 virtual void UpdateAfterShelfAlignmentChange( | 100 virtual void UpdateAfterShelfAlignmentChange( |
| 85 ShelfAlignment alignment) OVERRIDE; | 101 ShelfAlignment alignment) OVERRIDE; |
| 86 | 102 |
| 87 // Overridden from chromeos::PowerManagerHandler::Observer. | 103 // Overridden from chromeos::PowerManagerHandler::Observer. |
| 88 virtual void OnPowerStatusChanged( | 104 virtual void OnPowerStatusChanged( |
| 89 const chromeos::PowerSupplyStatus& status) OVERRIDE; | 105 const chromeos::PowerSupplyStatus& status) OVERRIDE; |
| 90 | 106 |
| 91 // Requests a power status update. | 107 // Requests a power status update. |
| 92 void RequestStatusUpdate() const; | 108 void RequestStatusUpdate() const; |
| 93 | 109 |
| 110 // Show a notification that a low-power USB charger has been connected. |
| 111 // Returns true if a notification was shown or explicitly hidden. |
| 112 bool MaybeShowUsbChargerNotification( |
| 113 const chromeos::PowerSupplyStatus& old_status, |
| 114 const chromeos::PowerSupplyStatus& new_status); |
| 115 |
| 94 // Sets |notification_state_|. Returns true if a notification should be shown. | 116 // Sets |notification_state_|. Returns true if a notification should be shown. |
| 95 bool UpdateNotificationState(const chromeos::PowerSupplyStatus& status); | 117 bool UpdateNotificationState(const chromeos::PowerSupplyStatus& status); |
| 96 bool UpdateNotificationStateForRemainingTime(int remaining_seconds); | 118 bool UpdateNotificationStateForRemainingTime(int remaining_seconds); |
| 97 bool UpdateNotificationStateForRemainingPercentage( | 119 bool UpdateNotificationStateForRemainingPercentage( |
| 98 double remaining_percentage); | 120 double remaining_percentage); |
| 99 | 121 |
| 122 message_center::MessageCenter* message_center_; // Not owned. |
| 100 tray::PowerTrayView* power_tray_; | 123 tray::PowerTrayView* power_tray_; |
| 101 tray::PowerNotificationView* notification_view_; | 124 tray::PowerNotificationView* notification_view_; |
| 102 NotificationState notification_state_; | 125 NotificationState notification_state_; |
| 103 | 126 |
| 127 // Power supply status at the last update. |
| 128 chromeos::PowerSupplyStatus last_power_supply_status_; |
| 129 |
| 104 DISALLOW_COPY_AND_ASSIGN(TrayPower); | 130 DISALLOW_COPY_AND_ASSIGN(TrayPower); |
| 105 }; | 131 }; |
| 106 | 132 |
| 107 } // namespace internal | 133 } // namespace internal |
| 108 } // namespace ash | 134 } // namespace ash |
| 109 | 135 |
| 110 #endif // ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_ | 136 #endif // ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_ |
| OLD | NEW |