#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_BATTERY_BATTERY_STATUS_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_BATTERY_BATTERY_STATUS_H_
#include "base/time/time.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include <cmath>
#include <limits>
namespace blink {
class MODULES_EXPORT BatteryStatus final {
DISALLOW_NEW();
public:
BatteryStatus()
: charging_(true), discharging_time_(base::TimeDelta::Max()), level_(1) {}
BatteryStatus(bool charging,
base::TimeDelta charging_time,
base::TimeDelta discharging_time,
double level)
: charging_(charging),
charging_time_(charging_time),
discharging_time_(discharging_time),
level_(EnsureTwoSignificantDigits(level)) {}
BatteryStatus(const BatteryStatus&) = default;
BatteryStatus& operator=(const BatteryStatus&) = default;
bool Charging() const { return charging_; }
base::TimeDelta charging_time() const { return charging_time_; }
base::TimeDelta discharging_time() const { return discharging_time_; }
double Level() const { return level_; }
private:
double EnsureTwoSignificantDigits(double level) {
DCHECK(level >= 0 && level <= 1);
return std::round(level * 100) / 100.f;
}
bool charging_;
base::TimeDelta charging_time_;
base::TimeDelta discharging_time_;
double level_;
};
}
#endif