From d434ff13a56aa7e97bc0137244752306366dff28 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Fri, 29 Jan 2021 15:16:21 -0500 Subject: [PATCH] For #17092: Dismiss toolbar menu when configuration change occurs (#17682) --- .../org/mozilla/fenix/browser/BaseBrowserFragment.kt | 7 +++++++ .../fenix/components/toolbar/BrowserToolbarView.kt | 4 ++++ .../main/java/org/mozilla/fenix/home/HomeFragment.kt | 10 ++++++++++ .../org/mozilla/fenix/browser/BrowserFragmentTest.kt | 11 +++++++++++ .../java/org/mozilla/fenix/home/HomeFragmentTest.kt | 11 +++++++++++ 5 files changed, 43 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 7d5a95ea61..869be62a97 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.browser import android.content.Context import android.content.Intent +import android.content.res.Configuration import android.os.Build import android.os.Bundle import android.view.Gravity @@ -1317,6 +1318,12 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, } } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + _browserToolbarView?.dismissMenu() + } + // This method is called in response to native web extension messages from // content scripts (e.g the reader view extension). By the time these // messages are processed the fragment/view may no longer be attached. 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 fdad11b3b0..aff4b03d2c 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 @@ -235,6 +235,10 @@ class BrowserToolbarView( } } + fun dismissMenu() { + view.dismissMenu() + } + /** * Dynamically sets scroll flags for the toolbar when the user does not have a screen reader enabled * Note that the toolbar will have the flags set and be able to be hidden 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 412d286aef..ca828cfac5 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.home import android.animation.Animator import android.content.Context import android.content.DialogInterface +import android.content.res.Configuration import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.ColorDrawable import android.os.Bundle @@ -168,6 +169,9 @@ class HomeFragment : Fragment() { private val topSitesFeature = ViewBoundFeatureWrapper() + @VisibleForTesting + internal var getMenuButton: () -> MenuButton? = { menuButton } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -274,6 +278,12 @@ class HomeFragment : Fragment() { return view } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + getMenuButton()?.dismissMenu() + } + private fun dismissTip(tip: Tip) { sessionControlInteractor.onCloseTip(tip) } diff --git a/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt index adeb7b36ba..cd32d5ee0c 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt @@ -346,6 +346,17 @@ class BrowserFragmentTest { verify(exactly = 1) { toolbarIntegration.invalidateMenu() } } + @Test + fun `WHEN fragment configuration changed THEN menu is dismissed`() { + val browserToolbarView: BrowserToolbarView = mockk(relaxed = true) + every { browserFragment.context } returns null + browserFragment._browserToolbarView = browserToolbarView + + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + + verify(exactly = 1) { browserToolbarView.dismissMenu() } + } + private fun addAndSelectTab(tab: TabSessionState) { store.dispatch(TabListAction.AddTabAction(tab)).joinBlocking() store.dispatch(TabListAction.SelectTabAction(tab.id)).joinBlocking() diff --git a/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt index 8f24fa8e8b..b201fd2e5c 100644 --- a/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt @@ -8,7 +8,9 @@ import android.content.Context import io.mockk.every import io.mockk.mockk import io.mockk.spyk +import io.mockk.verify import kotlinx.coroutines.ExperimentalCoroutinesApi +import mozilla.components.browser.menu.view.MenuButton import org.junit.Assert import org.junit.Before import org.junit.Test @@ -65,4 +67,13 @@ class HomeFragmentTest { Assert.assertEquals(topSitesMaxLimit, topSitesConfig.totalSites) } + + @Test + fun `WHEN configuration changed menu is dismissed`() { + val menuButton: MenuButton = mockk(relaxed = true) + homeFragment.getMenuButton = { menuButton } + homeFragment.onConfigurationChanged(mockk(relaxed = true)) + + verify(exactly = 1) { menuButton.dismissMenu() } + } }