#ifndef ASH_QUICK_INSERT_VIEWS_QUICK_INSERT_SEARCH_RESULTS_VIEW_H_
#define ASH_QUICK_INSERT_VIEWS_QUICK_INSERT_SEARCH_RESULTS_VIEW_H_
#include "ash/ash_export.h"
#include "ash/quick_insert/model/quick_insert_search_results_section.h"
#include "ash/quick_insert/quick_insert_search_result.h"
#include "ash/quick_insert/views/quick_insert_page_view.h"
#include "ash/quick_insert/views/quick_insert_submenu_controller.h"
#include "base/containers/span.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/base/models/image_model.h"
namespace views {
class ImageView;
class Label;
class Throbber;
class View;
}
namespace ash {
class QuickInsertAssetFetcher;
class QuickInsertSearchResultsViewDelegate;
class QuickInsertSectionListView;
class QuickInsertSectionView;
class QuickInsertPreviewBubbleController;
class QuickInsertSkeletonLoaderView;
class ASH_EXPORT QuickInsertSearchResultsView : public QuickInsertPageView {
METADATA_HEADER(QuickInsertSearchResultsView, QuickInsertPageView)
public:
enum class LocalFileResultStyle {
kList,
kGrid,
};
explicit QuickInsertSearchResultsView(
QuickInsertSearchResultsViewDelegate* delegate,
int quick_insert_view_width,
QuickInsertAssetFetcher* asset_fetcher,
QuickInsertSubmenuController* submenu_controller,
QuickInsertPreviewBubbleController* preview_controller);
QuickInsertSearchResultsView(const QuickInsertSearchResultsView&) = delete;
QuickInsertSearchResultsView& operator=(const QuickInsertSearchResultsView&) =
delete;
~QuickInsertSearchResultsView() override;
static constexpr base::TimeDelta kLoadingAnimationDelay =
base::Milliseconds(400);
void SetLocalFileResultStyle(LocalFileResultStyle style);
views::View* GetTopItem() override;
views::View* GetBottomItem() override;
views::View* GetItemAbove(views::View* item) override;
views::View* GetItemBelow(views::View* item) override;
views::View* GetItemLeftOf(views::View* item) override;
views::View* GetItemRightOf(views::View* item) override;
bool ContainsItem(views::View* item) override;
void ClearSearchResults();
void AppendSearchResults(QuickInsertSearchResultsSection section);
bool SearchStopped(ui::ImageModel illustration, std::u16string description);
void ShowLoadingAnimation();
int GetIndex(const QuickInsertSearchResult& inserted_result);
void SetNumEmojiResultsForA11y(size_t num_emoji_results);
QuickInsertSectionListView* section_list_view_for_testing() {
return section_list_view_;
}
base::span<const raw_ptr<QuickInsertSectionView>> section_views_for_testing()
const {
return section_views_;
}
views::View* no_results_view_for_testing() { return no_results_view_; }
views::ImageView& no_results_illustration_for_testing() {
return *no_results_illustration_;
}
views::Label& no_results_label_for_testing() { return *no_results_label_; }
views::View& throbber_container_for_testing() { return *throbber_container_; }
QuickInsertSkeletonLoaderView& skeleton_loader_view_for_testing() {
return *skeleton_loader_view_;
}
private:
void SelectSearchResult(const QuickInsertSearchResult& result);
void AddResultToSection(const QuickInsertSearchResult& result,
QuickInsertSectionView* section_view);
void OnTrailingLinkClicked(QuickInsertSectionType section_type,
const ui::Event& event);
void StartThrobber();
void StopThrobber();
void StopLoadingAnimation();
void UpdateAccessibleName();
raw_ptr<QuickInsertSearchResultsViewDelegate> delegate_;
raw_ptr<QuickInsertSectionListView> section_list_view_ = nullptr;
std::vector<raw_ptr<QuickInsertSectionView>> section_views_;
std::vector<QuickInsertSearchResult> top_results_;
raw_ptr<views::View> no_results_view_ = nullptr;
raw_ptr<views::ImageView> no_results_illustration_ = nullptr;
raw_ptr<views::Label> no_results_label_ = nullptr;
raw_ptr<views::View> throbber_container_ = nullptr;
raw_ptr<views::Throbber> throbber_ = nullptr;
raw_ptr<QuickInsertSkeletonLoaderView> skeleton_loader_view_ = nullptr;
raw_ptr<QuickInsertPreviewBubbleController> preview_controller_;
int num_emoji_results_displayed_ = 0;
LocalFileResultStyle local_file_result_style_ = LocalFileResultStyle::kList;
};
}
#endif