[fenix] For https://github.com/mozilla-mobile/fenix/issues/16044: Suggest search engines based on typed text.

pull/600/head
mcarare 3 years ago committed by Mihai Adrian Carare
parent 25b2805f87
commit 507b4aaf8b

@ -42,6 +42,7 @@ interface SearchController {
fun handleExistingSessionSelected(tabId: String)
fun handleSearchShortcutsButtonClicked()
fun handleCameraPermissionsNeeded()
fun handleSearchEngineSuggestionClicked(searchEngine: SearchEngine)
}
@Suppress("TooManyFunctions", "LongParameterList")
@ -55,7 +56,8 @@ class SearchDialogController(
private val metrics: MetricController,
private val dismissDialog: () -> Unit,
private val clearToolbarFocus: () -> Unit,
private val focusToolbar: () -> Unit
private val focusToolbar: () -> Unit,
private val clearToolbar: () -> Unit
) : SearchController {
override fun handleUrlCommitted(url: String) {
@ -221,6 +223,11 @@ class SearchDialogController(
dialog.show()
}
override fun handleSearchEngineSuggestionClicked(searchEngine: SearchEngine) {
clearToolbar()
handleSearchShortcutEngineSelected(searchEngine)
}
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
fun buildDialog(): AlertDialog.Builder {
return AlertDialog.Builder(activity).apply {

@ -157,7 +157,12 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
toolbarView.view.hideKeyboard()
toolbarView.view.clearFocus()
},
focusToolbar = { toolbarView.view.edit.focus() }
focusToolbar = { toolbarView.view.edit.focus() },
clearToolbar = {
toolbarView.view
.findViewById<InlineAutocompleteEditText>(R.id.mozac_browser_toolbar_edit_url_view)
?.setText("")
}
)
)

@ -37,6 +37,10 @@ class SearchDialogInteractor(
searchController.handleSearchTermsTapped(searchTerms)
}
override fun onSearchEngineSuggestionSelected(searchEngine: SearchEngine) {
searchController.handleSearchEngineSuggestionClicked(searchEngine)
}
override fun onSearchShortcutEngineSelected(searchEngine: SearchEngine) {
searchController.handleSearchShortcutEngineSelected(searchEngine)
}

@ -44,4 +44,9 @@ interface AwesomeBarInteractor {
* Called whenever the Shortcuts button is clicked
*/
fun onSearchShortcutsButtonClicked()
/**
* Called whenever search engine suggestion is tapped
*/
fun onSearchEngineSuggestionSelected(searchEngine: SearchEngine)
}

@ -11,11 +11,13 @@ import androidx.core.graphics.drawable.toBitmap
import mozilla.components.browser.awesomebar.BrowserAwesomeBar
import mozilla.components.browser.search.DefaultSearchEngineProvider
import mozilla.components.browser.state.search.SearchEngine
import mozilla.components.browser.state.state.searchEngines
import mozilla.components.concept.awesomebar.AwesomeBar
import mozilla.components.concept.engine.EngineSession
import mozilla.components.feature.awesomebar.provider.BookmarksStorageSuggestionProvider
import mozilla.components.feature.awesomebar.provider.HistoryStorageSuggestionProvider
import mozilla.components.feature.awesomebar.provider.SearchActionProvider
import mozilla.components.feature.awesomebar.provider.SearchEngineSuggestionProvider
import mozilla.components.feature.awesomebar.provider.SearchSuggestionProvider
import mozilla.components.feature.awesomebar.provider.SessionSuggestionProvider
import mozilla.components.feature.search.SearchUseCases
@ -51,6 +53,7 @@ class AwesomeBarView(
private val syncedTabsStorageSuggestionProvider: SyncedTabsStorageSuggestionProvider
private val defaultSearchSuggestionProvider: SearchSuggestionProvider
private val defaultSearchActionProvider: SearchActionProvider
private val searchEngineSuggestionProvider: SearchEngineSuggestionProvider
private val searchSuggestionProviderMap: MutableMap<SearchEngine, List<AwesomeBar.SuggestionProvider>>
private var providersInUse = mutableSetOf<AwesomeBar.SuggestionProvider>()
@ -143,6 +146,8 @@ class AwesomeBarView(
colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN)
}.toBitmap()
val searchWithBitmap = getDrawable(activity, R.drawable.ic_search_with)?.toBitmap()
defaultSearchSuggestionProvider =
SearchSuggestionProvider(
context = activity,
@ -173,6 +178,16 @@ class AwesomeBarView(
selectShortcutEngineSettings = interactor::onClickSearchEngineSettings
)
searchEngineSuggestionProvider =
SearchEngineSuggestionProvider(
context = activity,
searchEnginesList = components.core.store.state.search.searchEngines,
selectShortcutEngine = interactor::onSearchEngineSuggestionSelected,
title = R.string.search_engine_suggestions_title,
description = activity.getString(R.string.search_engine_suggestions_description),
searchIcon = searchWithBitmap
)
searchSuggestionProviderMap = HashMap()
}
@ -242,6 +257,8 @@ class AwesomeBarView(
providersToAdd.add(sessionProvider)
}
providersToAdd.add(searchEngineSuggestionProvider)
return providersToAdd
}

@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:name="path"
android:fillColor="#08a4ff"
android:pathData="M 2 0 L 22 0 C 22.53 0 23.039 0.211 23.414 0.586 C 23.789 0.961 24 1.47 24 2 L 24 22 C 24 22.53 23.789 23.039 23.414 23.414 C 23.039 23.789 22.53 24 22 24 L 2 24 C 1.47 24 0.961 23.789 0.586 23.414 C 0.211 23.039 0 22.53 0 22 L 0 2 C 0 1.47 0.211 0.961 0.586 0.586 C 0.961 0.211 1.47 0 2 0"
android:strokeWidth="1" />
<path
android:name="path_1"
android:fillColor="#ffffff"
android:pathData="M 19.707 18.293 L 14.885 13.471 C 16.7 10.921 16.257 7.406 13.868 5.385 C 11.478 3.364 7.938 3.512 5.725 5.725 C 3.512 7.938 3.364 11.478 5.385 13.868 C 7.406 16.257 10.921 16.7 13.471 14.885 L 18.293 19.707 C 18.685 20.086 19.309 20.081 19.695 19.695 C 20.081 19.309 20.086 18.685 19.707 18.293 Z M 10 14 C 7.791 14 6 12.209 6 10 C 6 7.791 7.791 6 10 6 C 12.209 6 14 7.791 14 10 C 14 11.061 13.579 12.078 12.828 12.828 C 12.078 13.579 11.061 14 10 14 Z"
android:strokeWidth="1" />
</vector>

@ -212,6 +212,10 @@
<string name="search_suggestions_onboarding_text">%s will share everything you type in the address bar with your default search engine.</string>
<!-- Search suggestion onboarding hint Learn more link text -->
<string name="search_suggestions_onboarding_learn_more_link">Learn more</string>
<!-- Search engine suggestion title text. The first parameter is the name of teh suggested engine-->
<string name="search_engine_suggestions_title">Search %s</string>
<!-- Search engine suggestion description text -->
<string name="search_engine_suggestions_description">Search directly from the address bar</string>
<!-- Search Widget -->
<!-- Content description for searching with a widget. Firefox is intentionally hardcoded.-->

@ -50,6 +50,7 @@ class SearchDialogControllerTest {
@MockK private lateinit var sessionManager: SessionManager
@MockK(relaxed = true) private lateinit var clearToolbarFocus: () -> Unit
@MockK(relaxed = true) private lateinit var focusToolbar: () -> Unit
@MockK(relaxed = true) private lateinit var clearToolbar: () -> Unit
@MockK(relaxed = true) private lateinit var dismissDialog: () -> Unit
private lateinit var controller: SearchDialogController
@ -81,7 +82,8 @@ class SearchDialogControllerTest {
metrics = metrics,
dismissDialog = dismissDialog,
clearToolbarFocus = clearToolbarFocus,
focusToolbar = focusToolbar
focusToolbar = focusToolbar,
clearToolbar = clearToolbar
)
}

Loading…
Cancel
Save