From 485efacd331e42b0cb5c5c18fa5a532eca50fa5f Mon Sep 17 00:00:00 2001 From: Mihai Branescu Date: Mon, 2 Mar 2020 18:33:49 +0200 Subject: [PATCH] For #8800 - dismiss all highlights when menu is closed --- .../components/toolbar/BrowserInteractor.kt | 4 ++ .../toolbar/BrowserToolbarController.kt | 12 ++++++ .../components/toolbar/BrowserToolbarView.kt | 18 ++++++--- .../components/toolbar/DefaultToolbarMenu.kt | 38 ++++++++++++++----- 4 files changed, 57 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt index ca9473b34..1bc49a349 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt @@ -27,4 +27,8 @@ open class BrowserInteractor( override fun onBrowserToolbarMenuItemTapped(item: ToolbarMenu.Item) { browserToolbarController.handleToolbarItemInteraction(item) } + + override fun onBrowserMenuDismissed(lowPrioHighlightItems: List) { + browserToolbarController.handleBrowserMenuDismissed(lowPrioHighlightItems) + } } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt index 69a0cc325..ea0b0e317 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt @@ -49,6 +49,7 @@ interface BrowserToolbarController { fun handleToolbarItemInteraction(item: ToolbarMenu.Item) fun handleToolbarClick() fun handleTabCounterClick() + fun handleBrowserMenuDismissed(lowPrioHighlightItems: List) } @Suppress("LargeClass") @@ -121,6 +122,17 @@ class DefaultBrowserToolbarController( animateTabAndNavigateHome() } + override fun handleBrowserMenuDismissed(lowPrioHighlightItems: List) { + lowPrioHighlightItems.forEach { + when (it) { + ToolbarMenu.Item.AddToHomeScreen -> activity.settings().installPwaOpened = true + is ToolbarMenu.Item.ReaderMode -> activity.settings().readerModeOpened = true + ToolbarMenu.Item.OpenInApp -> activity.settings().openInAppOpened = true + else -> {} + } + } + } + @ExperimentalCoroutinesApi @SuppressWarnings("ComplexMethod", "LongMethod") override fun handleToolbarItemInteraction(item: ToolbarMenu.Item) { diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt index fd2007285..c6b080c89 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt @@ -16,8 +16,10 @@ import androidx.core.view.isVisible import androidx.lifecycle.LifecycleOwner import com.google.android.material.snackbar.Snackbar import kotlinx.android.extensions.LayoutContainer -import kotlinx.android.synthetic.main.browser_toolbar_popup_window.view.* -import kotlinx.android.synthetic.main.component_browser_top_toolbar.view.* +import kotlinx.android.synthetic.main.browser_toolbar_popup_window.view.copy +import kotlinx.android.synthetic.main.browser_toolbar_popup_window.view.paste +import kotlinx.android.synthetic.main.browser_toolbar_popup_window.view.paste_and_go +import kotlinx.android.synthetic.main.component_browser_top_toolbar.view.app_bar import mozilla.components.browser.domains.autocomplete.ShippedDomainsProvider import mozilla.components.browser.session.Session import mozilla.components.browser.toolbar.BrowserToolbar @@ -39,6 +41,7 @@ interface BrowserToolbarViewInteractor { fun onBrowserToolbarClicked() fun onBrowserToolbarMenuItemTapped(item: ToolbarMenu.Item) fun onTabCounterClicked() + fun onBrowserMenuDismissed(lowPrioHighlightItems: List) } class BrowserToolbarView( @@ -173,8 +176,9 @@ class BrowserToolbarView( display.hint = context.getString(R.string.search_hint) } - val menuToolbar = if (isCustomTabSession) { - CustomTabToolbarMenu( + val menuToolbar: ToolbarMenu + if (isCustomTabSession) { + menuToolbar = CustomTabToolbarMenu( this, sessionManager, customTabSession?.id, @@ -184,7 +188,7 @@ class BrowserToolbarView( } ) } else { - DefaultToolbarMenu( + menuToolbar = DefaultToolbarMenu( context = this, hasAccountProblem = components.backgroundServices.accountManager.accountNeedsReauth(), shouldReverseItems = !shouldUseBottomToolbar, @@ -193,6 +197,10 @@ class BrowserToolbarView( sessionManager = sessionManager, bookmarksStorage = bookmarkStorage ) + view.display.setMenuDismissAction { + interactor.onBrowserMenuDismissed(menuToolbar.getLowPrioHighlightItems()) + view.invalidateActions() + } } toolbarIntegration = if (customTabSession != null) { diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index b13dbaa38..0606128b1 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -132,6 +132,34 @@ class DefaultToolbarMenu( BrowserMenuItemToolbar(listOf(bookmark, share, forward, refresh)) } + internal fun getLowPrioHighlightItems(): List { + val lowPrioHighlightItems: MutableList = mutableListOf() + if (shouldShowAddToHomescreen() && addToHomescreen.isHighlighted()) { + lowPrioHighlightItems.add(ToolbarMenu.Item.AddToHomeScreen) + } + if (shouldShowReaderMode() && readerMode.isHighlighted()) { + lowPrioHighlightItems.add(ToolbarMenu.Item.ReaderMode(false)) + } + if (shouldShowOpenInApp() && openInApp.isHighlighted()) { + lowPrioHighlightItems.add(ToolbarMenu.Item.OpenInApp) + } + return lowPrioHighlightItems + } + + // Predicates that need to be repeatedly called as the session changes + private fun shouldShowAddToHomescreen(): Boolean = + session != null && context.components.useCases.webAppUseCases.isPinningSupported() + + private fun shouldShowReaderMode(): Boolean = session?.readerable ?: false + + private fun shouldShowOpenInApp(): Boolean = session?.let { session -> + val appLink = context.components.useCases.appLinksUseCases.appLinkRedirect + appLink(session.url).hasExternalApp() + } ?: false + + private fun shouldShowReaderAppearance(): Boolean = session?.readerMode ?: false + // End of predicates // + private val menuItems by lazy { // Predicates that are called once, during screen init val shouldShowSaveToCollection = (context.asActivity() as? HomeActivity) @@ -143,16 +171,6 @@ class DefaultToolbarMenu( ReleaseChannel.FennecProduction ) - // Predicates that need to be repeatedly called as the session changes - fun shouldShowAddToHomescreen(): Boolean = - session != null && context.components.useCases.webAppUseCases.isPinningSupported() - fun shouldShowReaderMode(): Boolean = session?.readerable ?: false - fun shouldShowOpenInApp(): Boolean = session?.let { session -> - val appLink = context.components.useCases.appLinksUseCases.appLinkRedirect - appLink(session.url).hasExternalApp() - } ?: false - fun shouldShowReaderAppearance(): Boolean = session?.readerMode ?: false - val menuItems = listOfNotNull( library, addons,