[fenix] For https://github.com/mozilla-mobile/fenix/issues/24252 - Rename primaryText...
[gecko.git] / mobile / android / fenix / app / src / main / java / org / mozilla / fenix / search / awesomebar / ShortcutsSuggestionProvider.kt
bloba5753d17dbf577e11cb1d94defe94e3e380bdc3e
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
18 import java.util.UUID
20 /**
21  * A [AwesomeBar.SuggestionProvider] implementation that provides search engine suggestions.
22  */
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),
35                 SRC_IN
36             )
37         }?.toBitmap()
38     }
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(
45                 provider = this,
46                 id = it.id,
47                 icon = it.icon,
48                 title = it.name,
49                 onSuggestionClicked = {
50                     selectShortcutEngine(it)
51                 }
52             )
53         }
55         suggestions.add(
56             AwesomeBar.Suggestion(
57                 provider = this,
58                 id = context.getString(R.string.search_shortcuts_engine_settings),
59                 icon = settingsIcon,
60                 title = context.getString(R.string.search_shortcuts_engine_settings),
61                 onSuggestionClicked = {
62                     selectShortcutEngineSettings()
63                 }
64             )
65         )
66         return suggestions
67     }