Bug 1817519 – force search for not default engines

fenix/112.0
mike a 1 year ago committed by mergify[bot]
parent 0a8baa4914
commit 9a4ba51e85

@ -109,12 +109,14 @@ class SearchDialogController(
clearToolbarFocus()
val searchEngine = fragmentStore.state.searchEngineSource.searchEngine
val isDefaultEngine = searchEngine == fragmentStore.state.defaultEngine
activity.openToBrowserAndLoad(
searchTermOrURL = url,
newTab = fragmentStore.state.tabId == null,
from = BrowserDirection.FromSearchDialog,
engine = searchEngine,
forceSearch = !isDefaultEngine,
requestDesktopMode = fromHomeScreen && activity.settings().openNextTabInDesktopMode,
)
@ -128,7 +130,7 @@ class SearchDialogController(
MetricsUtils.recordSearchMetrics(
searchEngine,
searchEngine == store.state.search.selectedOrDefaultSearchEngine,
isDefaultEngine,
searchAccessPoint,
)
}

@ -161,6 +161,7 @@ class ToolbarView(
val searchEngine = searchState.searchEngineSource.searchEngine
view.edit.hint = when (searchEngine?.type) {
null -> context.getString(R.string.search_hint)
SearchEngine.Type.APPLICATION ->
when (searchEngine.id) {
Core.HISTORY_SEARCH_ENGINE_ID -> context.getString(R.string.history_search_hint)
@ -168,15 +169,17 @@ class ToolbarView(
Core.TABS_SEARCH_ENGINE_ID -> context.getString(R.string.tab_search_hint)
else -> context.getString(R.string.application_search_hint)
}
SearchEngine.Type.BUNDLED -> {
else -> {
if (!searchEngine.isGeneral) {
context.getString(R.string.application_search_hint)
} else {
context.getString(R.string.search_hint)
if (searchEngine == searchState.defaultEngine) {
context.getString(R.string.search_hint)
} else {
context.getString(R.string.search_hint_general_engine)
}
}
}
else ->
context.getString(R.string.search_hint)
}
if (!settings.showUnifiedSearchFeature && searchEngine != null) {

@ -14,8 +14,10 @@
<string name="content_description_private_browsing_button">Enable private browsing</string>
<!-- Content description (not visible, for screen readers etc.): "Private Browsing" menu button. -->
<string name="content_description_disable_private_browsing_button">Disable private browsing</string>
<!-- Placeholder text shown in the search bar before a user enters text -->
<!-- Placeholder text shown in the search bar before a user enters text for the default engine -->
<string name="search_hint">Search or enter address</string>
<!-- Placeholder text shown in the search bar before a user enters text for a general engine -->
<string name="search_hint_general_engine">Search the web</string>
<!-- Placeholder text shown in search bar when using history search -->
<string name="history_search_hint">Search history</string>
<!-- Placeholder text shown in search bar when using bookmarks search -->

@ -101,10 +101,37 @@ class SearchDialogControllerTest {
}
@Test
fun handleUrlCommitted() {
fun `GIVEN default search engine is selected WHEN url is committed THEN load the url`() {
val url = "https://www.google.com/"
assertNull(Events.enteredUrl.testGetValue())
every { store.state.defaultEngine } returns searchEngine
createController().handleUrlCommitted(url)
verify {
activity.openToBrowserAndLoad(
searchTermOrURL = url,
newTab = false,
from = BrowserDirection.FromSearchDialog,
engine = searchEngine,
forceSearch = false,
)
}
assertNotNull(Events.enteredUrl.testGetValue())
val snapshot = Events.enteredUrl.testGetValue()!!
assertEquals(1, snapshot.size)
assertEquals("false", snapshot.single().extra?.getValue("autocomplete"))
}
@Test
fun `GIVEN a general search engine is selected WHEN url is committed THEN perform search`() {
val url = "https://www.google.com/"
assertNull(Events.enteredUrl.testGetValue())
every { store.state.defaultEngine } returns mockk(relaxed = true)
createController().handleUrlCommitted(url)
verify {
@ -113,6 +140,7 @@ class SearchDialogControllerTest {
newTab = false,
from = BrowserDirection.FromSearchDialog,
engine = searchEngine,
forceSearch = true,
)
}
@ -148,6 +176,7 @@ class SearchDialogControllerTest {
newTab = false,
from = BrowserDirection.FromSearchDialog,
engine = searchEngine,
forceSearch = true,
)
}
}
@ -204,6 +233,8 @@ class SearchDialogControllerTest {
val url = "moz://a"
assertNull(Events.enteredUrl.testGetValue())
every { store.state.defaultEngine } returns searchEngine
createController().handleUrlCommitted(url)
verify {

@ -39,6 +39,7 @@ import org.junit.runner.RunWith
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.components.Components
import org.mozilla.fenix.components.Core
import org.mozilla.fenix.components.metrics.MetricsUtils
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -209,64 +210,145 @@ class ToolbarViewTest {
}
@Test
fun `GIVEN a general search engine is default WHEN a topic specific engine is selected THEN the hint changes`() {
val topicSpecificEngine = buildSearchEngine(SearchEngine.Type.BUNDLED, false)
fun `WHEN the default general search engine is selected THEN show text for default engine`() {
val toolbarView = buildToolbarView(false)
toolbarView.update(defaultState)
val defaultEngine = buildSearchEngine(SearchEngine.Type.BUNDLED, true)
toolbarView.update(
defaultState.copy(
defaultEngine = defaultEngine,
searchEngineSource = SearchEngineSource.Default(defaultEngine),
),
)
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
}
toolbarView.update(defaultState.copy(searchEngineSource = SearchEngineSource.Default(topicSpecificEngine)))
@Test
fun `WHEN a general search engine is selected THEN show text for general engine`() {
val toolbarView = buildToolbarView(false)
val generalEngine = buildSearchEngine(SearchEngine.Type.BUNDLED, true)
assertEquals(context.getString(R.string.application_search_hint), toolbarView.view.edit.hint)
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(generalEngine),
),
)
assertEquals(context.getString(R.string.search_hint_general_engine), toolbarView.view.edit.hint)
}
@Test
fun `GIVEN a topic specific engine is default WHEN a general engine is selected THEN the hint changes`() {
val topicSpecificEngine = buildSearchEngine(SearchEngine.Type.BUNDLED, false)
fun `WHEN a topic specific search engine is selected THEN show text for topic specific engine`() {
val toolbarView = buildToolbarView(false)
toolbarView.update(defaultState.copy(searchEngineSource = SearchEngineSource.Default(topicSpecificEngine)))
val topicSpecificEngine = buildSearchEngine(SearchEngine.Type.BUNDLED, false)
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(topicSpecificEngine),
),
)
assertEquals(context.getString(R.string.application_search_hint), toolbarView.view.edit.hint)
}
toolbarView.update(defaultState)
@Test
fun `WHEN the default additional general search engine is selected THEN show text for default engine`() {
val toolbarView = buildToolbarView(false)
val defaultEngine = buildSearchEngine(SearchEngine.Type.BUNDLED_ADDITIONAL, true)
toolbarView.update(
defaultState.copy(
defaultEngine = defaultEngine,
searchEngineSource = SearchEngineSource.Default(defaultEngine),
),
)
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
}
@Test
fun `GIVEN a topic specific engine is default WHEN a custom engine is selected THEN the hint changes`() {
val topicSpecificEngine = buildSearchEngine(SearchEngine.Type.BUNDLED, false)
val customEngine = buildSearchEngine(SearchEngine.Type.CUSTOM, true)
fun `WHEN a general additional search engine is selected THEN show text for general engine`() {
val toolbarView = buildToolbarView(false)
toolbarView.update(defaultState.copy(searchEngineSource = SearchEngineSource.Default(topicSpecificEngine)))
assertEquals(context.getString(R.string.application_search_hint), toolbarView.view.edit.hint)
val generalEngine = buildSearchEngine(SearchEngine.Type.BUNDLED_ADDITIONAL, true)
toolbarView.update(defaultState.copy(searchEngineSource = SearchEngineSource.Default(customEngine)))
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(generalEngine),
),
)
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
assertEquals(context.getString(R.string.search_hint_general_engine), toolbarView.view.edit.hint)
}
@Test
fun `GIVEN a general engine is default WHEN a custom engine is selected THEN the hint does not change`() {
val customEngine = buildSearchEngine(SearchEngine.Type.CUSTOM, true)
fun `WHEN the default custom search engine is selected THEN show text for default engine`() {
val toolbarView = buildToolbarView(false)
toolbarView.update(defaultState)
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
val customEngine = buildSearchEngine(SearchEngine.Type.CUSTOM, true)
toolbarView.update(defaultState.copy(searchEngineSource = SearchEngineSource.Default(customEngine)))
toolbarView.update(
defaultState.copy(
defaultEngine = customEngine,
searchEngineSource = SearchEngineSource.Default(customEngine),
),
)
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
}
@Test
fun `GIVEN a custom engine is default WHEN a general engine is selected THEN the hint does not change`() {
fun `WHEN a custom search engine is selected THEN show text for general engine`() {
val toolbarView = buildToolbarView(false)
val customEngine = buildSearchEngine(SearchEngine.Type.CUSTOM, true)
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(customEngine),
),
)
assertEquals(context.getString(R.string.search_hint_general_engine), toolbarView.view.edit.hint)
}
@Test
fun `WHEN history is selected as engine THEN show text specific for history`() {
val toolbarView = buildToolbarView(false)
toolbarView.update(defaultState.copy(searchEngineSource = SearchEngineSource.Default(customEngine)))
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
val historyEngine = buildSearchEngine(SearchEngine.Type.APPLICATION, false, Core.HISTORY_SEARCH_ENGINE_ID)
toolbarView.update(defaultState)
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(historyEngine),
),
)
assertEquals(context.getString(R.string.search_hint), toolbarView.view.edit.hint)
assertEquals(context.getString(R.string.history_search_hint), toolbarView.view.edit.hint)
}
@Test
fun `WHEN bookmarks is selected as engine THEN show text specific for bookmarks`() {
val toolbarView = buildToolbarView(false)
val bookmarksEngine = buildSearchEngine(SearchEngine.Type.APPLICATION, false, Core.BOOKMARKS_SEARCH_ENGINE_ID)
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(bookmarksEngine),
),
)
assertEquals(context.getString(R.string.bookmark_search_hint), toolbarView.view.edit.hint)
}
@Test
fun `WHEN tabs is selected as engine THEN show text specific for tabs`() {
val toolbarView = buildToolbarView(false)
val tabsEngine = buildSearchEngine(SearchEngine.Type.APPLICATION, false, Core.TABS_SEARCH_ENGINE_ID)
toolbarView.update(
defaultState.copy(
searchEngineSource = SearchEngineSource.Shortcut(tabsEngine),
),
)
assertEquals(context.getString(R.string.tab_search_hint), toolbarView.view.edit.hint)
}
@Test
@ -637,9 +719,13 @@ class ToolbarViewTest {
fromHomeFragment = false,
)
private fun buildSearchEngine(type: SearchEngine.Type, isGeneral: Boolean) = SearchEngine(
id = UUID.randomUUID().toString(),
name = "General",
private fun buildSearchEngine(
type: SearchEngine.Type,
isGeneral: Boolean,
id: String = UUID.randomUUID().toString(),
) = SearchEngine(
id = id,
name = UUID.randomUUID().toString(),
icon = testContext.getDrawable(R.drawable.ic_search)!!.toBitmap(),
type = type,
isGeneral = isGeneral,

Loading…
Cancel
Save