#ifndef ASH_QUICK_INSERT_SEARCH_QUICK_INSERT_SEARCH_CONTROLLER_H_
#define ASH_QUICK_INSERT_SEARCH_QUICK_INSERT_SEARCH_CONTROLLER_H_
#include <memory>
#include <optional>
#include <string>
#include <string_view>
#include <vector>
#include "ash/ash_export.h"
#include "ash/quick_insert/quick_insert_category.h"
#include "ash/quick_insert/search/quick_insert_search_aggregator.h"
#include "ash/quick_insert/search/quick_insert_search_request.h"
#include "ash/quick_insert/views/quick_insert_view_delegate.h"
#include "base/containers/span.h"
#include "base/memory/raw_ref.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "base/types/expected.h"
#include "chromeos/ash/components/emoji/emoji_search.h"
#include "chromeos/ash/components/emoji/gif_tenor_api_fetcher.h"
#include "chromeos/ash/components/emoji/tenor_types.mojom.h"
#include "components/prefs/pref_change_registrar.h"
class PrefService;
namespace ash {
class QuickInsertClient;
class ASH_EXPORT QuickInsertSearchController {
public:
using SearchGifsCallback =
base::OnceCallback<void(std::vector<QuickInsertGifResult> results)>;
explicit QuickInsertSearchController(base::TimeDelta burn_in_period);
QuickInsertSearchController(const QuickInsertSearchController&) = delete;
QuickInsertSearchController& operator=(const QuickInsertSearchController&) =
delete;
~QuickInsertSearchController();
void LoadEmojiLanguagesFromPrefs(PrefService* prefs);
void StartSearch(QuickInsertClient* client,
std::u16string_view query,
std::optional<QuickInsertCategory> category,
base::span<const QuickInsertCategory> available_categories,
bool caps_lock_state_to_search,
bool search_case_transforms,
QuickInsertViewDelegate::SearchResultsCallback callback);
void StopSearch();
void StartEmojiSearch(
PrefService* prefs,
std::u16string_view query,
QuickInsertViewDelegate::EmojiSearchResultsCallback callback);
std::string GetEmojiName(std::string_view emoji);
private:
void LoadEmojiLanguages(PrefService* pref);
void OnGifSearchResponse(
SearchGifsCallback callback,
std::u16string gif_search_query,
base::expected<tenor::mojom::PaginatedGifResponsesPtr,
GifTenorApiFetcher::Error> response);
PrefChangeRegistrar pref_change_registrar_;
base::TimeDelta burn_in_period_;
emoji::EmojiSearch emoji_search_;
std::unique_ptr<QuickInsertSearchAggregator> aggregator_;
std::unique_ptr<QuickInsertSearchRequest> search_request_;
base::WeakPtrFactory<QuickInsertSearchController> weak_ptr_factory_{this};
};
}
#endif