diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt index ac5996a91e..e55814e21f 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt @@ -66,6 +66,7 @@ data class SearchFragmentState( val showClipboardSuggestions: Boolean, val showHistorySuggestions: Boolean, val showBookmarkSuggestions: Boolean, + val showSyncedTabsSuggestions: Boolean, val tabId: String?, val pastedText: String? = null, val searchAccessPoint: Event.PerformedSearch.SearchAccessPoint? @@ -110,6 +111,7 @@ fun createInitialSearchFragmentState( showClipboardSuggestions = settings.shouldShowClipboardSuggestions, showHistorySuggestions = settings.shouldShowHistorySuggestions, showBookmarkSuggestions = settings.shouldShowBookmarkSuggestions, + showSyncedTabsSuggestions = settings.shouldShowSyncedTabsSuggestions, tabId = tabId, pastedText = pastedText, searchAccessPoint = searchAccessPoint diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt index d95323aa21..b38cbdc8e3 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt @@ -20,6 +20,7 @@ import mozilla.components.feature.awesomebar.provider.SearchSuggestionProvider import mozilla.components.feature.awesomebar.provider.SessionSuggestionProvider import mozilla.components.feature.search.SearchUseCases import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.syncedtabs.SyncedTabsStorageSuggestionProvider import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.ktx.android.content.getColorFromAttr import org.mozilla.fenix.HomeActivity @@ -32,6 +33,7 @@ import org.mozilla.fenix.search.SearchFragmentState /** * View that contains and configures the BrowserAwesomeBar */ +@Suppress("LargeClass") class AwesomeBarView( private val activity: HomeActivity, val interactor: AwesomeBarInteractor, @@ -41,6 +43,7 @@ class AwesomeBarView( private val historyStorageProvider: HistoryStorageSuggestionProvider private val shortcutsEnginePickerProvider: ShortcutsSuggestionProvider private val bookmarksStorageSuggestionProvider: BookmarksStorageSuggestionProvider + private val syncedTabsStorageSuggestionProvider: SyncedTabsStorageSuggestionProvider private val defaultSearchSuggestionProvider: SearchSuggestionProvider private val defaultSearchActionProvider: SearchActionProvider private val searchSuggestionProviderMap: MutableMap> @@ -123,6 +126,13 @@ class AwesomeBarView( engine = engineForSpeculativeConnects ) + syncedTabsStorageSuggestionProvider = + SyncedTabsStorageSuggestionProvider( + components.backgroundServices.syncedTabsStorage, + components.useCases.tabsUseCases.addTab, + components.core.icons + ) + val searchBitmap = getDrawable(activity, R.drawable.ic_search)!!.apply { colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN) }.toBitmap() @@ -204,6 +214,7 @@ class AwesomeBarView( } } + @Suppress("ComplexMethod") private fun getProvidersToAdd(state: SearchFragmentState): MutableSet { val providersToAdd = mutableSetOf() @@ -219,6 +230,10 @@ class AwesomeBarView( providersToAdd.addAll(getSelectedSearchSuggestionProvider(state)) } + if (state.showSyncedTabsSuggestions) { + providersToAdd.add(syncedTabsStorageSuggestionProvider) + } + if (activity.browsingModeManager.mode == BrowsingMode.Normal) { providersToAdd.add(sessionProvider) } @@ -243,6 +258,10 @@ class AwesomeBarView( providersToRemove.addAll(getSelectedSearchSuggestionProvider(state)) } + if (!state.showSyncedTabsSuggestions) { + providersToRemove.add(syncedTabsStorageSuggestionProvider) + } + if (activity.browsingModeManager.mode == BrowsingMode.Private) { providersToRemove.add(sessionProvider) } diff --git a/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt index 1c69aba767..c3da8db81c 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt @@ -57,6 +57,11 @@ class SearchEngineFragment : PreferenceFragmentCompat() { isChecked = context.settings().shouldShowBookmarkSuggestions } + val showSyncedTabsSuggestions = + requirePreference(R.string.pref_key_search_synced_tabs).apply { + isChecked = context.settings().shouldShowSyncedTabsSuggestions + } + val showClipboardSuggestions = requirePreference(R.string.pref_key_show_clipboard_suggestions).apply { isChecked = context.settings().shouldShowClipboardSuggestions @@ -75,6 +80,7 @@ class SearchEngineFragment : PreferenceFragmentCompat() { showSearchShortcuts.onPreferenceChangeListener = SharedPreferenceUpdater() showHistorySuggestions.onPreferenceChangeListener = SharedPreferenceUpdater() showBookmarkSuggestions.onPreferenceChangeListener = SharedPreferenceUpdater() + showSyncedTabsSuggestions.onPreferenceChangeListener = SharedPreferenceUpdater() showClipboardSuggestions.onPreferenceChangeListener = SharedPreferenceUpdater() searchSuggestionsInPrivatePreference.onPreferenceChangeListener = SharedPreferenceUpdater() showVoiceSearchPreference.onPreferenceChangeListener = SharedPreferenceUpdater() diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index d1bade330a..a5abe4cbca 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -323,6 +323,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = true ) + val shouldShowSyncedTabsSuggestions by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_search_synced_tabs), + default = true + ) + val shouldShowClipboardSuggestions by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_show_clipboard_suggestions), default = true diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 8e6b1dcc68..8139626edd 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -94,6 +94,7 @@ pref_key_show_clipboard_suggestions pref_key_search_browsing_history pref_key_search_bookmarks + pref_key_search_synced_tabs pref_key_show_search_suggestions_in_private pref_key_show_search_suggestions_in_privateonboarding pref_key_show_voice_search diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3be52909fa..ee514d5e04 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -320,6 +320,8 @@ Search browsing history Search bookmarks + + Search synced tabs Account settings diff --git a/app/src/main/res/xml/search_preferences.xml b/app/src/main/res/xml/search_preferences.xml index 9d5cc495df..4db5bd9d60 100644 --- a/app/src/main/res/xml/search_preferences.xml +++ b/app/src/main/res/xml/search_preferences.xml @@ -44,6 +44,10 @@ android:defaultValue="true" android:key="@string/pref_key_search_bookmarks" android:title='@string/preferences_search_bookmarks' /> +