#ifndef ASH_SYSTEM_TRAY_TRAY_DETAILED_VIEW_H_
#define ASH_SYSTEM_TRAY_TRAY_DETAILED_VIEW_H_
#include <memory>
#include "ash/ash_export.h"
#include "ash/system/tray/view_click_listener.h"
#include "ash/system/tray/zero_state_view.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
namespace gfx {
struct VectorIcon;
}
namespace views {
class BoxLayout;
class Button;
class ProgressBar;
class ScrollView;
}
namespace ash {
class DetailedViewDelegate;
class HoverHighlightView;
class TriView;
class ASH_EXPORT TrayDetailedView : public views::View,
public ViewClickListener {
METADATA_HEADER(TrayDetailedView, views::View)
public:
explicit TrayDetailedView(DetailedViewDelegate* delegate);
TrayDetailedView(const TrayDetailedView&) = delete;
TrayDetailedView& operator=(const TrayDetailedView&) = delete;
~TrayDetailedView() override;
void Layout(PassKey) override;
gfx::Size CalculatePreferredSize(
const views::SizeBounds& available_size) const override;
void OnViewClicked(views::View* sender) final;
void OverrideProgressBarAccessibleName(const std::u16string& name);
views::ScrollView* scroll_view_for_testing() { return scroller_; }
ZeroStateView* zero_state_view_for_testing() { return zero_state_view_; }
HoverHighlightView* AddScrollListCheckableItem(
views::View* container,
const gfx::VectorIcon& icon,
const std::u16string& text,
bool checked,
bool enterprise_managed = false);
protected:
views::BoxLayout* box_layout() { return box_layout_; }
void CreateTitleRow(int string_id);
void CreateScrollableList();
void CreateZeroStateView(std::unique_ptr<ZeroStateView> view);
HoverHighlightView* AddScrollListItem(views::View* container,
const gfx::VectorIcon& icon,
const std::u16string& text);
void Reset();
void ShowProgress(double value, bool visible);
void SetZeroStateViewVisibility(bool visible);
virtual views::Button* CreateInfoButton(
views::Button::PressedCallback callback,
int info_accessible_name_id);
views::Button* CreateSettingsButton(views::Button::PressedCallback callback,
int setting_accessible_name_id);
views::Button* CreateHelpButton(views::Button::PressedCallback callback);
void CloseBubble();
TriView* tri_view() { return tri_view_; }
views::ScrollView* scroller() const { return scroller_; }
views::View* scroll_content() const { return scroll_content_; }
views::View* zero_state_view() const { return zero_state_view_; }
private:
friend class TrayDetailedViewTest;
virtual void HandleViewClicked(views::View* view);
std::unique_ptr<TriView> CreateTitleTriView(int string_id);
virtual void CreateExtraTitleRowButtons();
void TransitionToMainView();
const raw_ptr<DetailedViewDelegate, DanglingUntriaged> delegate_;
raw_ptr<views::BoxLayout, DanglingUntriaged> box_layout_ = nullptr;
raw_ptr<views::ScrollView, DanglingUntriaged> scroller_ = nullptr;
raw_ptr<views::View, DanglingUntriaged> scroll_content_ = nullptr;
raw_ptr<views::ProgressBar> progress_bar_ = nullptr;
raw_ptr<ZeroStateView> zero_state_view_ = nullptr;
raw_ptr<TriView, DanglingUntriaged> tri_view_ = nullptr;
raw_ptr<views::Button, DanglingUntriaged> back_button_ = nullptr;
std::optional<std::u16string> progress_bar_accessible_name_;
};
}
#endif