// Copyright (c) 2012 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_TRAY_POWER_H_
#define ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_
#include "ash/system/chromeos/power/power_status.h"
#include "ash/system/tray/system_tray_item.h"
class SkBitmap;
namespace gfx {
class Image;
class ImageSkia;
}
namespace message_center {
class MessageCenter;
}
namespace ash {
namespace tray {
class PowerNotificationView;
class PowerTrayView;
}
class ASH_EXPORT TrayPower : public SystemTrayItem,
public PowerStatus::Observer {
public:
// Visible for testing.
enum NotificationState {
NOTIFICATION_NONE,
// Low battery charge.
NOTIFICATION_LOW_POWER,
// Critically low battery charge.
NOTIFICATION_CRITICAL,
};
// Time-based notification thresholds when on battery power.
static const int kCriticalMinutes;
static const int kLowPowerMinutes;
static const int kNoWarningMinutes;
// Percentage-based notification thresholds when using a low-power charger.
static const int kCriticalPercentage;
static const int kLowPowerPercentage;
static const int kNoWarningPercentage;
TrayPower(SystemTray* system_tray,
message_center::MessageCenter* message_center);
virtual ~TrayPower();
private:
friend class TrayPowerTest;
// This enum is used for histogram. The existing values should not be removed,
// and the new values should be added just before CHARGER_TYPE_COUNT.
enum ChargerType{
UNKNOWN_CHARGER,
MAINS_CHARGER,
USB_CHARGER,
UNCONFIRMED_SPRING_CHARGER,
SAFE_SPRING_CHARGER,
CHARGER_TYPE_COUNT,
};
// Overridden from SystemTrayItem.
virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
virtual views::View* CreateNotificationView(
user::LoginStatus status) OVERRIDE;
virtual void DestroyTrayView() OVERRIDE;
virtual void DestroyDefaultView() OVERRIDE;
virtual void DestroyNotificationView() OVERRIDE;
virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
virtual void UpdateAfterShelfAlignmentChange(
ShelfAlignment alignment) OVERRIDE;
// Overridden from PowerStatus::Observer.
virtual void OnPowerStatusChanged() OVERRIDE;
// Show a notification that a low-power USB charger has been connected.
// Returns true if a notification was shown or explicitly hidden.
bool MaybeShowUsbChargerNotification();
// Sets |notification_state_|. Returns true if a notification should be shown.
bool UpdateNotificationState();
bool UpdateNotificationStateForRemainingTime();
bool UpdateNotificationStateForRemainingPercentage();
// Records the charger type in UMA.
void RecordChargerType();
message_center::MessageCenter* message_center_; // Not owned.
tray::PowerTrayView* power_tray_;
tray::PowerNotificationView* notification_view_;
NotificationState notification_state_;
// Was a USB charger connected the last time OnPowerStatusChanged() was
// called?
bool usb_charger_was_connected_;
// Was line power connected the last time onPowerStatusChanged() was called?
bool line_power_was_connected_;
DISALLOW_COPY_AND_ASSIGN(TrayPower);
};
} // namespace ash
#endif // ASH_SYSTEM_CHROMEOS_POWER_TRAY_POWER_H_