1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#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();
// Adds emoji keywords for enabled languages in `prefs` and whenever the
// enabled languages change. This does not unload any keywords loaded
// previously. `prefs` can be null, which stops this class from listening to
// changes to prefs.
void LoadEmojiLanguagesFromPrefs(PrefService* prefs);
// `client` must remain valid until `StopSearch` is called or until this
// object is destroyed.
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);
// Gets the emoji name for the given emoji / emoticon / symbol.
// Used for getting emoji tooltips for zero state emoji.
// TODO: b/358492493 - Refactor this out of `QuickInsertSearchController`, as
// this is unrelated to search.
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_;
// The search request calls the aggregator, so the search request should be
// destructed first.
std::unique_ptr<QuickInsertSearchAggregator> aggregator_;
std::unique_ptr<QuickInsertSearchRequest> search_request_;
base::WeakPtrFactory<QuickInsertSearchController> weak_ptr_factory_{this};
};
} // namespace ash
#endif // ASH_QUICK_INSERT_SEARCH_QUICK_INSERT_SEARCH_CONTROLLER_H_
|