#ifndef ASH_SYSTEM_UNIFIED_QUICK_SETTINGS_FOOTER_H_
#define ASH_SYSTEM_UNIFIED_QUICK_SETTINGS_FOOTER_H_
#include "ash/ash_export.h"
#include "ash/style/pill_button.h"
#include "ash/system/power/power_status.h"
#include "ash/system/unified/power_button.h"
#include "base/memory/raw_ptr.h"
#include "components/prefs/pref_change_registrar.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/view.h"
class PrefRegistrySimple;
namespace ash {
class IconButton;
class PillButton;
class UnifiedSystemTrayController;
class ASH_EXPORT QsBatteryInfoViewBase : public PillButton,
public PowerStatus::Observer {
METADATA_HEADER(QsBatteryInfoViewBase, PillButton)
public:
explicit QsBatteryInfoViewBase(UnifiedSystemTrayController* controller,
const Type type = Type::kFloatingWithoutIcon,
gfx::VectorIcon* icon = nullptr);
QsBatteryInfoViewBase(const QsBatteryInfoViewBase&) = delete;
QsBatteryInfoViewBase& operator=(const QsBatteryInfoViewBase&) = delete;
~QsBatteryInfoViewBase() override;
virtual void Update() = 0;
void UpdateIconAndText(bool bsm_active = false);
void ConfigureIcon(bool bsm_active = false);
private:
void ChildPreferredSizeChanged(views::View* child) override;
void ChildVisibilityChanged(views::View* child) override;
void OnPowerStatusChanged() override;
void OnThemeChanged() override;
};
class ASH_EXPORT QsBatteryLabelView : public QsBatteryInfoViewBase {
METADATA_HEADER(QsBatteryLabelView, QsBatteryInfoViewBase)
public:
explicit QsBatteryLabelView(UnifiedSystemTrayController* controller);
QsBatteryLabelView(const QsBatteryLabelView&) = delete;
QsBatteryLabelView& operator=(const QsBatteryLabelView&) = delete;
~QsBatteryLabelView() override;
private:
void Update() override;
};
class ASH_EXPORT QsBatteryIconView : public QsBatteryInfoViewBase {
METADATA_HEADER(QsBatteryIconView, QsBatteryInfoViewBase)
public:
explicit QsBatteryIconView(UnifiedSystemTrayController* controller);
QsBatteryIconView(const QsBatteryIconView&) = delete;
QsBatteryIconView& operator=(const QsBatteryIconView&) = delete;
~QsBatteryIconView() override;
private:
void Update() override;
};
class ASH_EXPORT QuickSettingsFooter : public views::View {
METADATA_HEADER(QuickSettingsFooter, views::View)
public:
explicit QuickSettingsFooter(UnifiedSystemTrayController* controller);
QuickSettingsFooter(const QuickSettingsFooter&) = delete;
QuickSettingsFooter& operator=(const QuickSettingsFooter&) = delete;
~QuickSettingsFooter() override;
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
PowerButton* power_button_for_testing() { return power_button_; }
private:
friend class QuickSettingsFooterTest;
void UpdateSettingsButtonState();
views::View* CreateEndContainer();
raw_ptr<IconButton> settings_button_ = nullptr;
raw_ptr<PowerButton> power_button_ = nullptr;
raw_ptr<PillButton> sign_out_button_ = nullptr;
PrefChangeRegistrar local_state_pref_change_registrar_;
};
}
#endif