#ifndef ASH_METRICS_STYLUS_METRICS_RECORDER_H_
#define ASH_METRICS_STYLUS_METRICS_RECORDER_H_
#include <optional>
#include "ash/ash_export.h"
#include "ash/system/power/peripheral_battery_listener.h"
#include "chromeos/ash/components/feature_usage/feature_usage_metrics.h"
namespace ash {
class StylusSessionMetricsDelegate final
: public feature_usage::FeatureUsageMetrics::Delegate {
public:
explicit StylusSessionMetricsDelegate(const std::string& feature_name);
StylusSessionMetricsDelegate(const StylusSessionMetricsDelegate&) = delete;
StylusSessionMetricsDelegate& operator=(const StylusSessionMetricsDelegate&) =
delete;
~StylusSessionMetricsDelegate() final;
bool IsEligible() const final;
bool IsEnabled() const final;
void SetState(bool now_capable, bool in_session);
private:
bool capable_ = false;
bool active_ = false;
feature_usage::FeatureUsageMetrics metrics_;
};
class ASH_EXPORT StylusMetricsRecorder
: public PeripheralBatteryListener::Observer {
public:
StylusMetricsRecorder();
StylusMetricsRecorder(const StylusMetricsRecorder&) = delete;
StylusMetricsRecorder& operator=(const StylusMetricsRecorder&) = delete;
~StylusMetricsRecorder() override;
void OnAddingBattery(
const PeripheralBatteryListener::BatteryInfo& battery) override;
void OnRemovingBattery(
const PeripheralBatteryListener::BatteryInfo& battery) override;
void OnUpdatedBatteryLevel(
const PeripheralBatteryListener::BatteryInfo& battery) override;
private:
void UpdateStylusState();
std::optional<bool> stylus_on_charge_ = std::nullopt;
bool stylus_garage_present_ = false;
bool stylus_dock_present_ = false;
StylusSessionMetricsDelegate
stylus_detached_from_garage_session_metrics_delegate_{
"StylusDetachedFromGarageSession"};
StylusSessionMetricsDelegate
stylus_detached_from_dock_session_metrics_delegate_{
"StylusDetachedFromDockSession"};
StylusSessionMetricsDelegate
stylus_detached_from_garage_or_dock_session_metrics_delegate_{
"StylusDetachedFromGarageOrDockSession"};
};
}
#endif