1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 package org.mozilla.fenix.search.awesomebar
7 import android.content.Context
8 import androidx.appcompat.content.res.AppCompatResources
9 import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
10 import androidx.core.graphics.BlendModeCompat.SRC_IN
11 import androidx.core.graphics.drawable.toBitmap
12 import mozilla.components.browser.state.search.SearchEngine
13 import mozilla.components.browser.state.state.searchEngines
14 import mozilla.components.browser.state.store.BrowserStore
15 import mozilla.components.concept.awesomebar.AwesomeBar
16 import mozilla.components.support.ktx.android.content.getColorFromAttr
17 import org.mozilla.fenix.R
21 * A [AwesomeBar.SuggestionProvider] implementation that provides search engine suggestions.
23 class ShortcutsSuggestionProvider(
24 private val store: BrowserStore,
25 private val context: Context,
26 private val selectShortcutEngine: (engine: SearchEngine) -> Unit,
27 private val selectShortcutEngineSettings: () -> Unit
28 ) : AwesomeBar.SuggestionProvider {
29 override val id: String = UUID.randomUUID().toString()
31 private val settingsIcon by lazy {
32 AppCompatResources.getDrawable(context, R.drawable.mozac_ic_settings)?.apply {
33 colorFilter = createBlendModeColorFilterCompat(
34 context.getColorFromAttr(R.attr.textPrimary),
40 override suspend fun onInputChanged(text: String): List<AwesomeBar.Suggestion> {
41 val suggestions = mutableListOf<AwesomeBar.Suggestion>()
43 store.state.search.searchEngines.mapTo(suggestions) {
44 AwesomeBar.Suggestion(
49 onSuggestionClicked = {
50 selectShortcutEngine(it)
56 AwesomeBar.Suggestion(
58 id = context.getString(R.string.search_shortcuts_engine_settings),
60 title = context.getString(R.string.search_shortcuts_engine_settings),
61 onSuggestionClicked = {
62 selectShortcutEngineSettings()