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 f7eb36a08..5b6d52e9c 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -22,7 +22,6 @@ import androidx.navigation.fragment.findNavController import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_browser.* import kotlinx.android.synthetic.main.fragment_browser.view.* -import kotlinx.android.synthetic.main.tab_header.view.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Job @@ -85,8 +84,8 @@ import org.mozilla.fenix.components.toolbar.BrowserToolbarViewInteractor import org.mozilla.fenix.components.toolbar.DefaultBrowserToolbarController import org.mozilla.fenix.components.toolbar.SwipeRefreshScrollingViewBehavior import org.mozilla.fenix.components.toolbar.ToolbarIntegration -import org.mozilla.fenix.downloads.DynamicDownloadDialog import org.mozilla.fenix.downloads.DownloadService +import org.mozilla.fenix.downloads.DynamicDownloadDialog import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.enterToImmersiveMode import org.mozilla.fenix.ext.hideToolbar @@ -200,8 +199,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session navController = findNavController(), readerModeController = DefaultReaderModeController( readerViewFeature, - (activity as HomeActivity).browsingModeManager.mode.isPrivate, - view.readerViewControlsBar + view.readerViewControlsBar, + isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate ), sessionManager = requireComponents.core.sessionManager, findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } }, diff --git a/app/src/main/java/org/mozilla/fenix/browser/readermode/ReaderModeController.kt b/app/src/main/java/org/mozilla/fenix/browser/readermode/ReaderModeController.kt index 6b129a683..a148f65e7 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/readermode/ReaderModeController.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/readermode/ReaderModeController.kt @@ -23,8 +23,8 @@ interface ReaderModeController { class DefaultReaderModeController( private val readerViewFeature: ViewBoundFeatureWrapper, - private val isPrivate: Boolean, - private val readerViewControlsBar: View + private val readerViewControlsBar: View, + private val isPrivate: Boolean = false ) : ReaderModeController { override fun hideReaderView() { readerViewFeature.withFeature { it.hideReaderView() } @@ -35,12 +35,11 @@ class DefaultReaderModeController( } override fun showControls() { - readerViewFeature.withFeature { it.showControls() }.also { - if (isPrivate) { - // We need to update styles for private mode programmatically for now: - // https://github.com/mozilla-mobile/android-components/issues/3400 - themeReaderViewControlsForPrivateMode(readerViewControlsBar) - } + readerViewFeature.withFeature { it.showControls() } + if (isPrivate) { + // We need to update styles for private mode programmatically for now: + // https://github.com/mozilla-mobile/android-components/issues/3400 + themeReaderViewControlsForPrivateMode(readerViewControlsBar) } } diff --git a/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt b/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt new file mode 100644 index 000000000..085bae069 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt @@ -0,0 +1,80 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.browser.readermode + +import android.view.View +import io.mockk.Called +import io.mockk.every +import io.mockk.mockk +import io.mockk.spyk +import io.mockk.verify +import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.feature.readerview.ReaderViewFeature +import mozilla.components.support.base.feature.ViewBoundFeatureWrapper +import mozilla.components.support.test.robolectric.testContext +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mozilla.fenix.helpers.FenixRobolectricTestRunner + +@RunWith(FenixRobolectricTestRunner::class) +class DefaultReaderModeControllerTest { + + private lateinit var readerViewFeature: ReaderViewFeature + private lateinit var featureWrapper: ViewBoundFeatureWrapper + private lateinit var readerViewControlsBar: View + + @Before + fun setup() { + val tab = createTab("https://mozilla.org") + val store = BrowserStore( + BrowserState( + tabs = listOf(tab), + selectedTabId = tab.id + ) + ) + readerViewFeature = spyk(ReaderViewFeature(testContext, mockk(), store, mockk())) + + featureWrapper = ViewBoundFeatureWrapper( + feature = readerViewFeature, + owner = mockk(relaxed = true), + view = mockk(relaxed = true) + ) + readerViewControlsBar = mockk(relaxed = true) + + every { readerViewFeature.hideReaderView() } returns Unit + every { readerViewFeature.showReaderView() } returns Unit + every { readerViewFeature.showControls() } returns Unit + } + + @Test + fun testHideReaderView() { + val controller = DefaultReaderModeController(featureWrapper, readerViewControlsBar) + controller.hideReaderView() + verify { readerViewFeature.hideReaderView() } + } + + @Test + fun testShowReaderView() { + val controller = DefaultReaderModeController(featureWrapper, readerViewControlsBar) + controller.showReaderView() + verify { readerViewFeature.showReaderView() } + } + + @Test + fun testShowControlsNormalTab() { + val controller = DefaultReaderModeController( + featureWrapper, + readerViewControlsBar, + isPrivate = false + ) + + controller.showControls() + verify { readerViewFeature.showControls() } + verify { readerViewControlsBar wasNot Called } + } +}