From 4045fb0107d853f35ed93bf1052124dc0bb4898c Mon Sep 17 00:00:00 2001 From: Sawyer Blatz Date: Tue, 8 Oct 2019 07:48:56 -0700 Subject: [PATCH] For #4190: Removes waterfall animation from awesomebar --- .../fenix/search/awesomebar/AwesomeBarView.kt | 70 ++++++++++++++----- .../awesomebar/ShortcutsSuggestionProvider.kt | 6 +- 2 files changed, 55 insertions(+), 21 deletions(-) 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 56a9b1a37..bcb0f0630 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 @@ -14,6 +14,7 @@ import kotlinx.android.extensions.LayoutContainer import mozilla.components.browser.awesomebar.BrowserAwesomeBar import mozilla.components.browser.search.SearchEngine import mozilla.components.browser.session.Session +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 @@ -84,6 +85,7 @@ class AwesomeBarView( private val shortcutsEnginePickerProvider: ShortcutsSuggestionProvider private val bookmarksStorageSuggestionProvider: BookmarksStorageSuggestionProvider private val defaultSearchSuggestionProvider: SearchSuggestionProvider + private var providersInUse = mutableSetOf() private val loadUrlUseCase = object : SessionUseCases.LoadUrlUseCase { override fun invoke(url: String, flags: EngineSession.LoadUrlFlags) { @@ -110,6 +112,8 @@ class AwesomeBarView( } init { + view.itemAnimator = null + with(container.context) { val primaryTextColor = getColorFromAttr(R.attr.primaryText) @@ -164,22 +168,41 @@ class AwesomeBarView( @SuppressWarnings("ComplexMethod") fun update(state: SearchFragmentState) { - view.removeAllProviders() - // Do not make suggestions based on user's current URL if (state.query == state.session?.url) { return } - // Only show the shortcutEnginePicker by itself + updateSuggestionProvidersVisibility(state) + + view.onInputChanged(state.query) + } + + @Suppress("ComplexMethod") + private fun updateSuggestionProvidersVisibility(state: SearchFragmentState) { + val providersToAdd = mutableSetOf() + val providersToRemove = mutableSetOf() + if (state.showSearchShortcuts) { - view.addProviders(shortcutsEnginePickerProvider) - view.onInputChanged(state.query) - return + providersToAdd.add(shortcutsEnginePickerProvider) + } else { + providersToRemove.add(shortcutsEnginePickerProvider) + } + + if (state.showHistorySuggestions) { + providersToAdd.add(historyStorageProvider) + } else { + providersToRemove.add(historyStorageProvider) + } + + if (state.showBookmarkSuggestions) { + providersToAdd.add(bookmarksStorageSuggestionProvider) + } else { + providersToRemove.add(bookmarksStorageSuggestionProvider) } if (state.showSearchSuggestions) { - view.addProviders( + providersToAdd.add( when (state.searchEngineSource) { is SearchEngineSource.Default -> defaultSearchSuggestionProvider is SearchEngineSource.Shortcut -> createSuggestionProviderForEngine( @@ -187,21 +210,34 @@ class AwesomeBarView( ) } ) - } - - if (state.showHistorySuggestions) { - view.addProviders(historyStorageProvider) - } - - if (state.showBookmarkSuggestions) { - view.addProviders(bookmarksStorageSuggestionProvider) + } else { + providersToRemove.add(when (state.searchEngineSource) { + is SearchEngineSource.Default -> defaultSearchSuggestionProvider + is SearchEngineSource.Shortcut -> createSuggestionProviderForEngine( + state.searchEngineSource.searchEngine + ) + }) } if ((container.context.asActivity() as? HomeActivity)?.browsingModeManager?.mode?.isPrivate == false) { - view.addProviders(sessionProvider) + providersToAdd.add(sessionProvider) + } else { + providersToRemove.add(sessionProvider) } - view.onInputChanged(state.query) + for (provider in providersToAdd) { + if (providersInUse.find { it.id == provider.id } == null) { + providersInUse.add(provider) + view.addProviders(provider) + } + } + + for (provider in providersToRemove) { + if (providersInUse.find { it.id == provider.id } != null) { + providersInUse.remove(provider) + view.removeProviders(provider) + } + } } private fun createSuggestionProviderForEngine(engine: SearchEngine): SearchSuggestionProvider { diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/ShortcutsSuggestionProvider.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/ShortcutsSuggestionProvider.kt index cfa8c530f..7ef586da6 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/ShortcutsSuggestionProvider.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/ShortcutsSuggestionProvider.kt @@ -38,9 +38,7 @@ class ShortcutsSuggestionProvider( AwesomeBar.Suggestion( provider = this, id = it.identifier, - icon = { _, _ -> - it.icon - }, + icon = it.icon, title = it.name, onSuggestionClicked = { selectShortcutEngine(it) @@ -52,7 +50,7 @@ class ShortcutsSuggestionProvider( AwesomeBar.Suggestion( provider = this, id = context.getString(R.string.search_shortcuts_engine_settings), - icon = { _, _ -> settingsIcon }, + icon = settingsIcon, title = context.getString(R.string.search_shortcuts_engine_settings), onSuggestionClicked = { selectShortcutEngineSettings()