#ifndef CHROMEOS_ASH_COMPONENTS_AUDIO_CROS_AUDIO_CONFIG_IMPL_H_
#define CHROMEOS_ASH_COMPONENTS_AUDIO_CROS_AUDIO_CONFIG_IMPL_H_
#include "base/component_export.h"
#include "base/timer/timer.h"
#include "chromeos/ash/components/audio/cras_audio_handler.h"
#include "chromeos/ash/components/audio/cros_audio_config.h"
namespace ash::audio_config {
enum class AudioMuteButtonAction {
kMuted = 0,
kUnmuted = 1,
kMaxValue = kUnmuted,
};
enum class AudioDeviceChange {
kOutputDevice = 0,
kInputDevice = 1,
kMaxValue = kInputDevice,
};
class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_AUDIO) CrosAudioConfigImpl
: public CrosAudioConfig,
public CrasAudioHandler::AudioObserver {
public:
CrosAudioConfigImpl();
~CrosAudioConfigImpl() override;
private:
uint8_t GetOutputVolumePercent() const override;
uint8_t GetInputGainPercent() const override;
mojom::MuteState GetOutputMuteState() const override;
void GetAudioDevices(
std::vector<mojom::AudioDevicePtr>* output_devices_out,
std::vector<mojom::AudioDevicePtr>* input_devices_out) const override;
mojom::MuteState GetInputMuteState() const override;
mojom::VoiceIsolationUIAppearancePtr GetVoiceIsolationUIAppearance()
const override;
void SetOutputMuted(bool muted) override;
void SetOutputVolumePercent(int8_t volume) override;
void SetInputGainPercent(uint8_t gain) override;
void SetActiveDevice(uint64_t device_id) override;
void SetInputMuted(bool muted) override;
void RecordVoiceIsolationEnabledChange() override;
void RecordVoiceIsolationPreferredEffectChange(
audio_config::mojom::AudioEffectType preferred_effect) override;
void SetNoiseCancellationEnabled(bool enabled) override;
void SetForceRespectUiGainsEnabled(bool enabled) override;
void SetHfpMicSrEnabled(bool enabled) override;
void SetStyleTransferEnabled(bool enabled) override;
void SetSpatialAudioEnabled(bool enabled) override;
void RecordOutputVolume();
void RecordInputGain();
void OnOutputNodeVolumeChanged(uint64_t node_id, int volume) override;
void OnInputNodeGainChanged(uint64_t node_id, int gain) override;
void OnOutputMuteChanged(bool mute_on) override;
void OnAudioNodesChanged() override;
void OnActiveOutputNodeChanged() override;
void OnActiveInputNodeChanged() override;
void OnInputMuteChanged(
bool mute_on,
CrasAudioHandler::InputMuteChangeMethod method) override;
void OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) override;
void OnVoiceIsolationUIAppearanceChanged(
VoiceIsolationUIAppearance appearance) override;
void OnNoiseCancellationStateChanged() override;
void OnStyleTransferStateChanged() override;
void OnForceRespectUiGainsStateChanged() override;
void OnHfpMicSrStateChanged() override;
void OnSpatialAudioStateChanged() override;
base::DelayTimer output_volume_metric_delay_timer_;
base::DelayTimer input_gain_metric_delay_timer_;
int8_t last_set_output_volume_;
int8_t last_set_input_gain_;
};
}
#endif