#ifndef ASH_SYSTEM_AUDIO_UNIFIED_VOLUME_SLIDER_CONTROLLER_H_
#define ASH_SYSTEM_AUDIO_UNIFIED_VOLUME_SLIDER_CONTROLLER_H_
#include "ash/ash_export.h"
#include "ash/constants/quick_settings_catalogs.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/unified/unified_slider_view.h"
#include "base/memory/raw_ptr.h"
#include "base/timer/timer.h"
namespace gfx {
class Insets;
}
namespace ash {
class UnifiedVolumeView;
class ASH_EXPORT UnifiedVolumeSliderController : public UnifiedSliderListener {
public:
class Delegate {
public:
Delegate();
virtual ~Delegate();
virtual void OnAudioSettingsButtonClicked() = 0;
base::WeakPtrFactory<Delegate> weak_ptr_factory_{this};
};
explicit UnifiedVolumeSliderController(Delegate* delegate);
UnifiedVolumeSliderController();
UnifiedVolumeSliderController(const UnifiedVolumeSliderController&) = delete;
UnifiedVolumeSliderController& operator=(
const UnifiedVolumeSliderController&) = delete;
~UnifiedVolumeSliderController() override;
std::unique_ptr<UnifiedVolumeView> CreateVolumeSlider(
uint64_t device_id,
const gfx::Insets& inside_padding = kRadioSliderViewPadding);
using MapDeviceSliderCallback =
base::RepeatingCallback<void(uint64_t, views::View*)>;
static void SetMapDeviceSliderCallbackForTest(
MapDeviceSliderCallback* test_slider_device_callback);
std::unique_ptr<UnifiedSliderView> CreateView() override;
QsSliderCatalogName GetCatalogName() override;
void SliderValueChanged(views::Slider* sender,
float value,
float old_value,
views::SliderChangeReason reason) override;
void SliderButtonPressed();
private:
const raw_ptr<Delegate, DanglingUntriaged> delegate_;
void RecordVolumeSourceMetric();
base::DelayTimer output_volume_metric_delay_timer_;
#if DCHECK_IS_ON()
bool created_view_ = false;
#endif
};
}
#endif