#ifndef ASH_SYSTEM_UNIFIED_FEATURE_TILES_CONTAINER_VIEW_H_
#define ASH_SYSTEM_UNIFIED_FEATURE_TILES_CONTAINER_VIEW_H_
#include "ash/ash_export.h"
#include "ash/public/cpp/pagination/pagination_model_observer.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/focus/focus_manager.h"
#include "ui/views/view.h"
namespace ash {
class FeatureTile;
class PaginationModel;
class UnifiedSystemTrayController;
class ASH_EXPORT FeatureTilesContainerView : public views::View,
public PaginationModelObserver,
public views::FocusChangeListener {
METADATA_HEADER(FeatureTilesContainerView, views::View)
public:
explicit FeatureTilesContainerView(UnifiedSystemTrayController* controller);
FeatureTilesContainerView(const FeatureTilesContainerView&) = delete;
FeatureTilesContainerView& operator=(const FeatureTilesContainerView&) =
delete;
~FeatureTilesContainerView() override;
void AddTiles(std::vector<std::unique_ptr<FeatureTile>> tiles);
void RelayoutTiles();
void SetRowsFromHeight(int max_height);
void AdjustRowsForMediaViewVisibility(bool visible, int max_height);
void SelectedPageChanged(int old_selected, int new_selected) override;
void TransitionChanged() override;
void OnGestureEvent(ui::GestureEvent* event) override;
void OnScrollEvent(ui::ScrollEvent* event) override;
bool OnMouseWheel(const ui::MouseWheelEvent& event) override;
void Layout(PassKey) override;
void AddedToWidget() override;
void RemovedFromWidget() override;
void OnDidChangeFocus(views::View* before, views::View* now) override;
int GetVisibleFeatureTileCount() const;
int displayable_rows() const { return displayable_rows_; }
int row_count() { return rows_.size(); }
int page_count() { return pages_.size(); }
private:
friend class FeatureTilesContainerViewTest;
friend class QuickSettingsViewTest;
class RowContainer;
class PageContainer;
int CalculateRowsFromHeight(int height);
void UpdateAnimatingPagesBounds(int old_selected, int new_selected);
void UpdateTotalPages();
const raw_ptr<UnifiedSystemTrayController> controller_;
const raw_ptr<PaginationModel> pagination_model_;
std::vector<raw_ptr<PageContainer, VectorExperimental>> pages_;
std::vector<raw_ptr<RowContainer, VectorExperimental>> rows_;
int displayable_rows_ = 0;
bool is_media_view_shown_ = false;
bool changing_visibility_ = false;
};
}
#endif