From 785b8b9519f2a58f21e9ce860eb195a7549cd3f4 Mon Sep 17 00:00:00 2001 From: Sawyer Blatz Date: Thu, 3 Oct 2019 08:53:16 -0700 Subject: [PATCH] For #5567: Removes search shortcuts button (#5739) * For #5567: Removes search shortcut button * No issue: Simplifies logic for displaying shortcuts --- app/metrics.yaml | 22 ----- .../java/org/mozilla/fenix/ui/SearchTest.kt | 1 - .../mozilla/fenix/ui/robots/SearchRobot.kt | 14 --- .../components/metrics/GleanMetricsService.kt | 6 -- .../fenix/components/metrics/Metrics.kt | 2 - .../org/mozilla/fenix/home/HomeFragment.kt | 6 +- .../home/intent/StartSearchIntentProcessor.kt | 3 +- .../mozilla/fenix/search/SearchController.kt | 21 +---- .../mozilla/fenix/search/SearchFragment.kt | 40 +------- .../fenix/search/SearchFragmentStore.kt | 11 +-- .../mozilla/fenix/search/SearchInteractor.kt | 4 - .../fenix/search/awesomebar/AwesomeBarView.kt | 2 +- .../settings/search/SearchEngineFragment.kt | 9 +- .../java/org/mozilla/fenix/utils/Settings.kt | 5 + app/src/main/res/layout/fragment_search.xml | 7 -- app/src/main/res/navigation/nav_graph.xml | 4 - app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/strings.xml | 4 +- ...preferences.xml => search_preferences.xml} | 5 + .../intent/StartSearchIntentProcessorTest.kt | 3 +- .../search/DefaultSearchControllerTest.kt | 91 ++++++++++++++++--- .../fenix/search/SearchFragmentStoreTest.kt | 5 +- .../fenix/search/SearchInteractorTest.kt | 3 - .../org/mozilla/fenix/utils/SettingsTest.kt | 7 ++ 24 files changed, 125 insertions(+), 151 deletions(-) rename app/src/main/res/xml/{search_engine_preferences.xml => search_preferences.xml} (87%) diff --git a/app/metrics.yaml b/app/metrics.yaml index d0377a139..b2c019e2f 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -133,28 +133,6 @@ events: expires: "2020-03-01" search_shortcuts: - opened: - type: event - description: > - A user opened the search shortcut menu in the search view by pressing the shortcuts button - bugs: - - 793 - data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/1202#issuecomment-476870449 - notification_emails: - - fenix-core@mozilla.com - expires: "2020-03-01" - closed: - type: event - description: > - A user closed the search shortcut menu in the search view by pressing the shortcuts button - bugs: - - 793 - data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/1202#issuecomment-476870449 - notification_emails: - - fenix-core@mozilla.com - expires: "2020-03-01" selected: type: event description: > diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt index e84141fbf..e5d34b3d2 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt @@ -32,7 +32,6 @@ class SearchTest { verifySearchView() verifyBrowserToolbar() verifyScanButton() - verifyShortcutsButton() } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt index 4e758593d..191f3fe70 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt @@ -37,7 +37,6 @@ class SearchRobot { fun verifySearchView() = assertSearchView() fun verifyBrowserToolbar() = assertBrowserToolbarEditView() fun verifyScanButton() = assertScanButton() - fun verifyShortcutsButton() = assertShortcutsButton() fun verifySearchWithText() = assertSearchWithText() fun verifyDuckDuckGoResults() = assertDuckDuckGoResults() fun verifyDuckDuckGoURL() = assertDuckDuckGoURL() @@ -56,10 +55,6 @@ class SearchRobot { allowPermissionButton().click() } - fun clickShortcutsButton() { - shortcutsButton().perform(click()) - } - fun typeSearch(searchTerm: String) { browserToolbarEditView().perform(typeText(searchTerm)) } @@ -124,11 +119,6 @@ private fun scanButton(): ViewInteraction { return onView(allOf(withId(R.id.searchScanButton))) } -private fun shortcutsButton(): ViewInteraction { - mDevice.wait(Until.findObjects(By.res("R.id.search_shortcuts_button")), TestAssetHelper.waitingTime) - return onView(withId(R.id.searchShortcutsButton)) -} - private fun clearButton() = onView(withId(R.id.mozac_browser_toolbar_clear_view)) private fun assertDuckDuckGoURL() { @@ -153,10 +143,6 @@ private fun assertScanButton() = onView(allOf(withText("Scan"))) .check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) -private fun assertShortcutsButton() = - onView(allOf(withText("Shortcuts"))) - .check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) - private fun assertSearchWithText() = onView(allOf(withText("SEARCH WITH"))) .check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 60a832563..b1be9c59e 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -84,12 +84,6 @@ private val Event.wrapper: EventWrapper<*>? }, { Events.performedSearchKeys.valueOf(it) } ) - is Event.SearchShortcutMenuOpened -> EventWrapper( - { SearchShortcuts.opened.record(it) } - ) - is Event.SearchShortcutMenuClosed -> EventWrapper( - { SearchShortcuts.closed.record(it) } - ) is Event.SearchShortcutSelected -> EventWrapper( { SearchShortcuts.selected.record(it) }, { SearchShortcuts.selectedKeys.valueOf(it) } diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt index 22c6a213c..8ae2470ee 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt @@ -36,8 +36,6 @@ sealed class Event { object InteractWithSearchURLArea : Event() object DismissedOnboarding : Event() object ClearedPrivateData : Event() - object SearchShortcutMenuOpened : Event() - object SearchShortcutMenuClosed : Event() object AddBookmark : Event() object RemoveBookmark : Event() object OpenedBookmark : Event() diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index a45d67463..e7549280a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -251,8 +251,7 @@ class HomeFragment : Fragment() { invokePendingDeleteJobs() onboarding.finish() val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment( - sessionId = null, - showShortcutEnginePicker = true + sessionId = null ) val extras = FragmentNavigator.Extras.Builder() @@ -265,8 +264,7 @@ class HomeFragment : Fragment() { view.add_tab_button.setOnClickListener { invokePendingDeleteJobs() val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment( - sessionId = null, - showShortcutEnginePicker = true + sessionId = null ) nav(R.id.homeFragment, directions) } diff --git a/app/src/main/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessor.kt index 56e578f55..4fb175088 100644 --- a/app/src/main/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessor.kt @@ -33,8 +33,7 @@ class StartSearchIntentProcessor( out.removeExtra(HomeActivity.OPEN_TO_SEARCH) val directions = NavGraphDirections.actionGlobalSearch( - sessionId = null, - showShortcutEnginePicker = true + sessionId = null ) navController.nav(null, directions) true diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchController.kt b/app/src/main/java/org/mozilla/fenix/search/SearchController.kt index 3fa0eda8c..0717a5bd0 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchController.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchController.kt @@ -18,6 +18,7 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.searchEngineManager +import org.mozilla.fenix.ext.settings /** * An interface that handles the view manipulation of the Search, triggered by the Interactor @@ -30,7 +31,6 @@ interface SearchController { fun handleSearchTermsTapped(searchTerms: String) fun handleSearchShortcutEngineSelected(searchEngine: SearchEngine) fun handleClickSearchEngineSettings() - fun handleTurnOnStartedTyping() fun handleExistingSessionSelected(session: Session) } @@ -40,10 +40,6 @@ class DefaultSearchController( private val navController: NavController ) : SearchController { - data class UserTypingCheck(var ranOnTextChanged: Boolean, var userHasTyped: Boolean) - - internal val userTypingCheck = UserTypingCheck(false, !store.state.showShortcutEnginePicker) - override fun handleUrlCommitted(url: String) { if (url.isNotBlank()) { (context as HomeActivity).openToBrowserAndLoad( @@ -69,13 +65,9 @@ class DefaultSearchController( override fun handleTextChanged(text: String) { store.dispatch(SearchFragmentAction.UpdateQuery(text)) - - if (userTypingCheck.ranOnTextChanged && !userTypingCheck.userHasTyped) { - store.dispatch(SearchFragmentAction.ShowSearchShortcutEnginePicker(false)) - handleTurnOnStartedTyping() - } - - userTypingCheck.ranOnTextChanged = true + store.dispatch(SearchFragmentAction.ShowSearchShortcutEnginePicker( + text.isEmpty() && context.settings().shouldShowSearchShortcuts + )) } override fun handleUrlTapped(url: String) { @@ -111,11 +103,6 @@ class DefaultSearchController( navController.navigate(directions) } - override fun handleTurnOnStartedTyping() { - userTypingCheck.ranOnTextChanged = true - userTypingCheck.userHasTyped = true - } - override fun handleExistingSessionSelected(session: Session) { val directions = SearchFragmentDirections.actionSearchFragmentToBrowserFragment(null) navController.nav(R.id.searchFragment, directions) diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt index 63f325330..4ec096925 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt @@ -38,7 +38,6 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.StoreProvider import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.getColorFromAttr import org.mozilla.fenix.ext.getSpannable import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings @@ -79,10 +78,6 @@ class SearchFragment : Fragment(), BackHandler { ?.let(SearchFragmentArgs.Companion::fromBundle) ?.let { it.pastedText } - val displayShortcutEnginePicker = arguments - ?.let(SearchFragmentArgs.Companion::fromBundle) - ?.let { it.showShortcutEnginePicker } ?: false - val view = inflater.inflate(R.layout.fragment_search, container, false) val url = session?.url.orEmpty() val currentSearchEngine = SearchEngineSource.Default( @@ -93,10 +88,10 @@ class SearchFragment : Fragment(), BackHandler { SearchFragmentStore( SearchFragmentState( query = url, - showShortcutEnginePicker = displayShortcutEnginePicker, searchEngineSource = currentSearchEngine, defaultEngineSource = currentSearchEngine, showSearchSuggestions = requireContext().settings().shouldShowSearchSuggestions, + showSearchShortcuts = requireContext().settings().shouldShowSearchShortcuts && url.isEmpty(), showClipboardSuggestions = requireContext().settings().shouldShowClipboardSuggestions, showHistorySuggestions = requireContext().settings().shouldShowHistorySuggestions, showBookmarkSuggestions = requireContext().settings().shouldShowBookmarkSuggestions, @@ -188,19 +183,6 @@ class SearchFragment : Fragment(), BackHandler { view.toolbar_wrapper.clipToOutline = false - searchShortcutsButton.setOnClickListener { - val isOpen = searchStore.state.showShortcutEnginePicker - searchStore.dispatch(SearchFragmentAction.ShowSearchShortcutEnginePicker(!isOpen)) - - if (isOpen) { - requireComponents.analytics.metrics.track(Event.SearchShortcutMenuClosed) - } else { - requireComponents.analytics.metrics.track(Event.SearchShortcutMenuOpened) - } - - searchInteractor.turnOnStartedTyping() - } - fill_link_from_clipboard.setOnClickListener { (activity as HomeActivity) .openToBrowserAndLoad( @@ -214,7 +196,6 @@ class SearchFragment : Fragment(), BackHandler { awesomeBarView.update(it) toolbarView.update(it) updateSearchEngineIcon(it) - updateSearchShortuctsIcon(it) updateSearchWithLabel(it) updateClipboardSuggestion(it, requireContext().components.clipboardHandler.url) } @@ -276,30 +257,19 @@ class SearchFragment : Fragment(), BackHandler { private fun updateSearchWithLabel(searchState: SearchFragmentState) { search_with_shortcuts.visibility = - if (searchState.showShortcutEnginePicker) View.VISIBLE else View.GONE + if (searchState.showSearchShortcuts) View.VISIBLE else View.GONE } private fun updateClipboardSuggestion(searchState: SearchFragmentState, clipboardUrl: String?) { - val shouldBeVisible = + val visibility = if (searchState.showClipboardSuggestions && searchState.query.isEmpty() && !clipboardUrl.isNullOrEmpty()) View.VISIBLE else View.GONE - fill_link_from_clipboard.visibility = shouldBeVisible - divider_line.visibility = shouldBeVisible + fill_link_from_clipboard.visibility = visibility + divider_line.visibility = visibility clipboard_url.text = clipboardUrl } - private fun updateSearchShortuctsIcon(searchState: SearchFragmentState) { - with(requireContext()) { - val showShortcuts = searchState.showShortcutEnginePicker - searchShortcutsButton?.isChecked = showShortcuts - - val color = if (showShortcuts) R.attr.contrastText else R.attr.primaryText - - searchShortcutsButton.compoundDrawables[0]?.setTint(getColorFromAttr(color)) - } - } - override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, 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 6bdfee5d1..36a5764cd 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt @@ -33,10 +33,10 @@ sealed class SearchEngineSource { /** * The state for the Search Screen * @property query The current search query string - * @property showShortcutEnginePicker Whether or not to show the available search engine view * @property searchEngineSource The current selected search engine with the context of how it was selected * @property defaultEngineSource The current default search engine source * @property showSearchSuggestions Whether or not to show search suggestions from the search engine in the AwesomeBar + * @property showSearchShortcuts Whether or not to show search shortcuts in the AwesomeBar * @property showClipboardSuggestions Whether or not to show clipboard suggestion in the AwesomeBar * @property showHistorySuggestions Whether or not to show history suggestions in the AwesomeBar * @property showBookmarkSuggestions Whether or not to show the bookmark suggestion in the AwesomeBar @@ -45,10 +45,10 @@ sealed class SearchEngineSource { */ data class SearchFragmentState( val query: String, - val showShortcutEnginePicker: Boolean, val searchEngineSource: SearchEngineSource, val defaultEngineSource: SearchEngineSource.Default, val showSearchSuggestions: Boolean, + val showSearchShortcuts: Boolean, val showClipboardSuggestions: Boolean, val showHistorySuggestions: Boolean, val showBookmarkSuggestions: Boolean, @@ -74,16 +74,15 @@ private fun searchStateReducer(state: SearchFragmentState, action: SearchFragmen is SearchFragmentAction.SearchShortcutEngineSelected -> state.copy( searchEngineSource = SearchEngineSource.Shortcut(action.engine), - showShortcutEnginePicker = false + showSearchShortcuts = false ) is SearchFragmentAction.ShowSearchShortcutEnginePicker -> - state.copy(showShortcutEnginePicker = action.show) + state.copy(showSearchShortcuts = action.show) is SearchFragmentAction.UpdateQuery -> state.copy(query = action.query) is SearchFragmentAction.SelectNewDefaultSearchEngine -> state.copy( - searchEngineSource = SearchEngineSource.Default(action.engine), - showShortcutEnginePicker = false + searchEngineSource = SearchEngineSource.Default(action.engine) ) } } diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchInteractor.kt b/app/src/main/java/org/mozilla/fenix/search/SearchInteractor.kt index 27c654903..2e7e8b96e 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchInteractor.kt @@ -45,10 +45,6 @@ class SearchInteractor( searchController.handleClickSearchEngineSettings() } - fun turnOnStartedTyping() { - searchController.handleTurnOnStartedTyping() - } - override fun onExistingSessionSelected(session: Session) { searchController.handleExistingSessionSelected(session) } 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 bb59f7e69..72813dc11 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 @@ -166,7 +166,7 @@ class AwesomeBarView( fun update(state: SearchFragmentState) { view.removeAllProviders() - if (state.showShortcutEnginePicker) { + if (state.showSearchShortcuts) { view.addProviders(shortcutsEnginePickerProvider) } else { if (state.showSearchSuggestions) { 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 e7d41cf14..ad2b79302 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 @@ -16,7 +16,7 @@ import org.mozilla.fenix.settings.SharedPreferenceUpdater class SearchEngineFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.search_engine_preferences, rootKey) + setPreferencesFromResource(R.xml.search_preferences, rootKey) } override fun onResume() { @@ -29,7 +29,10 @@ class SearchEngineFragment : PreferenceFragmentCompat() { isChecked = context.settings().shouldShowSearchSuggestions } - searchSuggestionsPreference?.onPreferenceChangeListener = SharedPreferenceUpdater() + val showSearchShortcuts = + findPreference(getPreferenceKey(R.string.pref_key_show_search_shortcuts))?.apply { + isChecked = context.settings().shouldShowSearchShortcuts + } val showHistorySuggestions = findPreference(getPreferenceKey(R.string.pref_key_search_browsing_history))?.apply { @@ -46,6 +49,8 @@ class SearchEngineFragment : PreferenceFragmentCompat() { isChecked = context.settings().shouldShowClipboardSuggestions } + searchSuggestionsPreference?.onPreferenceChangeListener = SharedPreferenceUpdater() + showSearchShortcuts?.onPreferenceChangeListener = SharedPreferenceUpdater() showHistorySuggestions?.onPreferenceChangeListener = SharedPreferenceUpdater() showBookmarkSuggestions?.onPreferenceChangeListener = SharedPreferenceUpdater() showClipboardSuggestions?.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 37e0c7f61..cf899a6c8 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -163,6 +163,11 @@ class Settings private constructor( default = true ) + val shouldShowSearchShortcuts by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_show_search_shortcuts), + default = true + ) + val shouldUseDarkTheme by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_dark_theme), default = false diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 2e9f0d08d..c8962df3a 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -156,12 +156,5 @@ android:drawableStart="@drawable/ic_qr" android:textOff="@string/search_scan_button" android:textOn="@string/search_scan_button" /> - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 6525cd2ba..5c1ab5aa2 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -98,10 +98,6 @@ android:name="session_id" app:argType="string" app:nullable="true" /> - pref_key_search_widget_installed + pref_key_show_search_shortcuts pref_key_show_search_suggestions pref_key_show_clipboard_suggestions pref_key_search_browsing_history diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d9e692db7..ad38b8b03 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -95,8 +95,6 @@ Scan - - Shortcuts Search engine settings @@ -175,6 +173,8 @@ Remote debugging via USB + Show search shortcuts + Show search suggestions Show clipboard suggestions diff --git a/app/src/main/res/xml/search_engine_preferences.xml b/app/src/main/res/xml/search_preferences.xml similarity index 87% rename from app/src/main/res/xml/search_engine_preferences.xml rename to app/src/main/res/xml/search_preferences.xml index c6a947ae0..c5adcfbb2 100644 --- a/app/src/main/res/xml/search_engine_preferences.xml +++ b/app/src/main/res/xml/search_preferences.xml @@ -17,6 +17,11 @@ android:title="@string/preferences_show_search_suggestions" app:iconSpaceReserved="false" app:allowDividerAbove="false"/> +