1
0
Fork 0

Reverts all BrowsingModeManager changes

master
Jeff Boek 2020-02-22 21:46:50 -08:00
parent 0d398f7d44
commit 541bcf072a
20 changed files with 55 additions and 89 deletions

View File

@ -293,7 +293,7 @@ open class FenixApplication : LocaleAwareApplication() {
components.core.store,
onNewTabOverride = {
_, engineSession, url ->
val session = Session(url, components.browsingModeManager.mode.isPrivate)
val session = Session(url)
components.core.sessionManager.add(session, true, engineSession)
session.id
},

View File

@ -41,7 +41,8 @@ import mozilla.components.support.utils.toSafeIntent
import mozilla.components.support.webextensions.WebExtensionPopupFeature
import org.mozilla.fenix.browser.UriOpenedObserver
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.browsingmode.BrowsingModeListener
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.exceptions.ExceptionsFragmentDirections
@ -74,7 +75,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
private var webExtScope: CoroutineScope? = null
lateinit var themeManager: ThemeManager
private val browsingModeManager get() = components.browsingModeManager
lateinit var browsingModeManager: BrowsingModeManager
private var sessionObserver: SessionManager.Observer? = null
@ -99,12 +100,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
)
}
private val browsingModeListener = object : BrowsingModeListener {
override fun onBrowsingModeChange(newMode: BrowsingMode) {
themeManager.currentTheme = newMode
}
}
override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
if (overrideConfiguration != null) {
val uiMode = overrideConfiguration.uiMode
@ -167,16 +162,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
hotStartMonitor.onPostResumeFinalMethodCall()
}
final override fun onStart() {
super.onStart()
browsingModeManager.registerBrowsingModeListener(browsingModeListener)
}
final override fun onStop() {
super.onStop()
browsingModeManager.unregisterBrowsingModeListener(browsingModeListener)
}
final override fun onPause() {
super.onPause()
@ -259,7 +244,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
private fun setupThemeAndBrowsingMode(mode: BrowsingMode) {
settings().lastKnownMode = mode
browsingModeManager.mode = mode
browsingModeManager = createBrowsingModeManager(mode)
themeManager = createThemeManager()
themeManager.setActivityTheme(this)
themeManager.applyStatusBarTheme(this)
@ -394,6 +379,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
browsingModeManager.mode = sessionMode
}
protected open fun createBrowsingModeManager(initialMode: BrowsingMode): BrowsingModeManager {
return DefaultBrowsingModeManager(initialMode) { newMode ->
themeManager.currentTheme = newMode
}
}
protected open fun createThemeManager(): ThemeManager {
return DefaultThemeManager(browsingModeManager.mode, this)
}

View File

@ -173,10 +173,10 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
navController = findNavController(),
readerModeController = DefaultReaderModeController(
readerViewFeature,
requireComponents.browsingModeManager.mode.isPrivate,
(activity as HomeActivity).browsingModeManager.mode.isPrivate,
view.readerViewControlsBar
),
browsingModeManager = requireComponents.browsingModeManager,
browsingModeManager = (activity as HomeActivity).browsingModeManager,
sessionManager = requireComponents.core.sessionManager,
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
browserLayout = view.browserLayout,

View File

@ -31,32 +31,19 @@ interface BrowsingModeManager {
var mode: BrowsingMode
}
interface BrowsingModeListener {
fun onBrowsingModeChange(newMode: BrowsingMode)
}
/**
* Wraps a [BrowsingMode] and executes a callback whenever [mode] is updated.
*/
class DefaultBrowsingModeManager(
private var _mode: BrowsingMode = BrowsingMode.Normal
private var _mode: BrowsingMode,
private val modeDidChange: (BrowsingMode) -> Unit
) : BrowsingModeManager {
private val browsingModeListeners = mutableSetOf<BrowsingModeListener>()
fun registerBrowsingModeListener(browsingModeListener: BrowsingModeListener) {
browsingModeListeners.add(browsingModeListener)
}
fun unregisterBrowsingModeListener(browsingModeListener: BrowsingModeListener) {
browsingModeListeners.remove(browsingModeListener)
}
override var mode: BrowsingMode
get() = _mode
set(value) {
_mode = value
browsingModeListeners.forEach { it.onBrowsingModeChange(value) }
modeDidChange(value)
Settings.instance?.lastKnownMode = value
}
}

View File

@ -12,7 +12,6 @@ import mozilla.components.feature.addons.update.DefaultAddonUpdater
import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import mozilla.components.support.migration.state.MigrationStore
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.test.Mockable
import org.mozilla.fenix.utils.ClipboardHandler
import java.util.concurrent.TimeUnit
@ -72,8 +71,6 @@ class Components(private val context: Context) {
AddonManager(core.store, core.engine, addonCollectionProvider, addonUpdater)
}
val browsingModeManager by lazy { DefaultBrowsingModeManager() }
val tabsUseCases: TabsUseCases by lazy { TabsUseCases(core.sessionManager) }
val analytics by lazy { Analytics(context) }

View File

@ -23,9 +23,11 @@ import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import mozilla.components.concept.storage.BookmarksStorage
import org.mozilla.fenix.Config
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ReleaseChannel
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.Settings
@ -130,8 +132,8 @@ class DefaultToolbarMenu(
private val menuItems by lazy {
// Predicates that are called once, during screen init
val shouldShowSaveToCollection =
context.components.browsingModeManager.mode == BrowsingMode.Normal
val shouldShowSaveToCollection = (context.asActivity() as? HomeActivity)
?.browsingModeManager?.mode == BrowsingMode.Normal
val shouldDeleteDataOnQuit = Settings.getInstance(context)
.shouldDeleteBrowsingDataOnQuit
val shouldShowWebcompatReporter = Config.channel !in setOf(

View File

@ -27,6 +27,7 @@ import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.arch.lifecycle.addObservers
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.BaseBrowserFragment
import org.mozilla.fenix.browser.CustomTabContextMenuCandidate
@ -68,7 +69,7 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler
activity = activity,
engineLayout = view.swipeRefresh,
onItemTapped = { browserInteractor.onBrowserToolbarMenuItemTapped(it) },
isPrivate = requireComponents.browsingModeManager.mode.isPrivate,
isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate,
shouldReverseItems = !activity.settings().shouldUseBottomToolbar
),
owner = this,

View File

@ -105,7 +105,7 @@ class HomeFragment : Fragment() {
}
}
private val browsingModeManager get() = requireComponents.browsingModeManager
private val browsingModeManager get() = (activity as HomeActivity).browsingModeManager
private var homeAppBarOffset = 0
private val singleSessionObserver = object : Session.Observer {
override fun onTitleChanged(session: Session, title: String) {

View File

@ -15,7 +15,6 @@ import org.mozilla.fenix.GlobalDirections
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.ext.alreadyOnDestination
import org.mozilla.fenix.ext.components
/**
* Deep links in the form of `fenix://host` open different parts of the app.
@ -57,7 +56,7 @@ class DeepLinkIntentProcessor(
private fun handleDeepLinkSideEffects(deepLink: Uri) {
when (deepLink.host) {
"enable_private_browsing" -> {
activity.components.browsingModeManager.mode = BrowsingMode.Private
activity.browsingModeManager.mode = BrowsingMode.Private
}
"make_default_browser" -> {
if (SDK_INT >= Build.VERSION_CODES.N) {

View File

@ -5,10 +5,10 @@
package org.mozilla.fenix.library
import androidx.fragment.app.Fragment
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.hideToolbar
import org.mozilla.fenix.ext.requireComponents
abstract class LibraryPageFragment<T> : Fragment() {
@ -24,7 +24,7 @@ abstract class LibraryPageFragment<T> : Fragment() {
}
}
requireComponents.browsingModeManager.mode = BrowsingMode.fromBoolean(private)
(activity as HomeActivity).browsingModeManager.mode = BrowsingMode.fromBoolean(private)
hideToolbar()
}
}

View File

@ -56,7 +56,7 @@ class DefaultBookmarkController(
private val services: Services = activity.components.services
override fun handleBookmarkTapped(item: BookmarkNode) {
openInNewTab(item.url!!, true, BrowserDirection.FromBookmarks, context.components.browsingModeManager.mode)
openInNewTab(item.url!!, true, BrowserDirection.FromBookmarks, activity.browsingModeManager.mode)
}
override fun handleBookmarkExpand(folder: BookmarkNode) {
@ -117,7 +117,7 @@ class DefaultBookmarkController(
) {
invokePendingDeletion.invoke()
with(activity) {
components.browsingModeManager.mode = mode
browsingModeManager.mode = mode
openToBrowserAndLoad(searchTermOrURL, newTab, from)
}
}

View File

@ -169,7 +169,7 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
}
(activity as HomeActivity).apply {
components.browsingModeManager.mode = BrowsingMode.Private
browsingModeManager.mode = BrowsingMode.Private
supportActionBar?.hide()
}
nav(

View File

@ -87,7 +87,7 @@ class DefaultSearchController(
store.dispatch(
SearchFragmentAction.AllowSearchSuggestionsInPrivateModePrompt(
text.isNotEmpty() &&
context.components.browsingModeManager.mode.isPrivate &&
(context as HomeActivity).browsingModeManager.mode.isPrivate &&
!context.settings().shouldShowSearchSuggestionsInPrivate &&
!context.settings().showSearchSuggestionsInPrivateOnboardingFinished
)

View File

@ -85,7 +85,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
)
val showSearchSuggestions =
if (requireComponents.browsingModeManager.mode.isPrivate) {
if ((activity as HomeActivity).browsingModeManager.mode.isPrivate) {
requireContext().settings().shouldShowSearchSuggestions &&
requireContext().settings().shouldShowSearchSuggestionsInPrivate
} else {
@ -127,7 +127,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
view.toolbar_component_wrapper,
searchInteractor,
historyStorageProvider(),
requireComponents.browsingModeManager.mode.isPrivate
(activity as HomeActivity).browsingModeManager.mode.isPrivate
)
val urlView = toolbarView.view

View File

@ -28,7 +28,9 @@ import mozilla.components.feature.session.SessionUseCases
import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.ktx.android.view.hideKeyboard
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.search.SearchEngineSource
import org.mozilla.fenix.search.SearchFragmentState
@ -303,7 +305,10 @@ class AwesomeBarView(
return providersToRemove
}
private fun isBrowsingModePrivate(): Boolean = container.context.components.browsingModeManager.mode.isPrivate
private fun isBrowsingModePrivate(): Boolean {
return (container.context.asActivity() as? HomeActivity)?.browsingModeManager?.mode?.isPrivate
?: false
}
private fun getSelectedSearchSuggestionProvider(state: SearchFragmentState): SearchSuggestionProvider? {
return when (state.searchEngineSource) {

View File

@ -4,42 +4,40 @@
package org.mozilla.fenix.browser.browsingmode
import mozilla.components.support.test.any
import mozilla.components.support.test.mock
import io.mockk.MockKAnnotations
import io.mockk.impl.annotations.MockK
import io.mockk.verify
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
class DefaultBrowsingModeManagerTest {
lateinit var manager: DefaultBrowsingModeManager
@MockK(relaxed = true) lateinit var callback: (BrowsingMode) -> Unit
lateinit var manager: BrowsingModeManager
private val initMode = BrowsingMode.Normal
@Before
fun before() {
manager = DefaultBrowsingModeManager(initMode)
MockKAnnotations.init(this)
manager = DefaultBrowsingModeManager(initMode, callback)
}
@Test
fun `WHEN mode is updated THEN callback is invoked`() {
val browsingModeListener: BrowsingModeListener = mock()
manager.registerBrowsingModeListener(browsingModeListener)
verify(browsingModeListener, times(0)).onBrowsingModeChange(any())
verify(exactly = 0) { callback.invoke(any()) }
manager.mode = BrowsingMode.Private
manager.mode = BrowsingMode.Private
manager.mode = BrowsingMode.Private
verify(browsingModeListener, times(3)).onBrowsingModeChange(any())
verify(exactly = 3) { callback.invoke(any()) }
manager.mode = BrowsingMode.Normal
manager.mode = BrowsingMode.Normal
verify(browsingModeListener, times(5)).onBrowsingModeChange(any())
verify(exactly = 5) { callback.invoke(any()) }
}
@Test

View File

@ -8,7 +8,6 @@ import android.content.Context
import io.mockk.mockk
import mozilla.components.support.test.mock
import org.mockito.Mockito.`when`
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.utils.ClipboardHandler
class TestComponents(private val context: Context) : Components(context) {
@ -39,7 +38,5 @@ class TestComponents(private val context: Context) : Components(context) {
}
override val analytics by lazy { Analytics(context) }
override val browsingModeManager by lazy { DefaultBrowsingModeManager() }
override val clipboardHandler by lazy { ClipboardHandler(context) }
}

View File

@ -8,7 +8,6 @@ import android.content.Intent
import androidx.core.net.toUri
import androidx.navigation.NavController
import io.mockk.Called
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import org.junit.Assert.assertFalse
@ -21,8 +20,6 @@ import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.ext.components
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
@ -117,12 +114,9 @@ class DeepLinkIntentProcessorTest {
@Test
fun `process enable_private_browsing deep link`() {
val browsingModeManager: DefaultBrowsingModeManager = mockk(relaxed = true)
every { activity.components.browsingModeManager } returns browsingModeManager
assertTrue(processor.process(testIntent("fenix://enable_private_browsing"), navController, out))
verify { browsingModeManager.mode = BrowsingMode.Private }
verify { activity.browsingModeManager.mode = BrowsingMode.Private }
verify { navController.navigate(NavGraphDirections.actionGlobalHomeFragment()) }
verify { out wasNot Called }
}

View File

@ -114,16 +114,16 @@ class BookmarkControllerTest {
@Test
fun `handleBookmarkTapped should respect browsing mode`() {
// if in normal mode, should be in normal mode
every { context.components.browsingModeManager.mode } returns BrowsingMode.Normal
every { homeActivity.browsingModeManager.mode } returns BrowsingMode.Normal
controller.handleBookmarkTapped(item)
assertEquals(BrowsingMode.Normal, context.components.browsingModeManager.mode)
assertEquals(BrowsingMode.Normal, homeActivity.browsingModeManager.mode)
// if in private mode, should be in private mode
every { context.components.browsingModeManager.mode } returns BrowsingMode.Private
every { homeActivity.browsingModeManager.mode } returns BrowsingMode.Private
controller.handleBookmarkTapped(item)
assertEquals(BrowsingMode.Private, context.components.browsingModeManager.mode)
assertEquals(BrowsingMode.Private, homeActivity.browsingModeManager.mode)
}
@Test
@ -209,7 +209,7 @@ class BookmarkControllerTest {
verifyOrder {
invokePendingDeletion.invoke()
browsingModeManager.mode = BrowsingMode.Normal
homeActivity.browsingModeManager.mode = BrowsingMode.Normal
homeActivity.openToBrowserAndLoad(item.url!!, true, BrowserDirection.FromBookmarks)
}
}
@ -220,7 +220,7 @@ class BookmarkControllerTest {
verifyOrder {
invokePendingDeletion.invoke()
browsingModeManager.mode = BrowsingMode.Private
homeActivity.browsingModeManager.mode = BrowsingMode.Private
homeActivity.openToBrowserAndLoad(item.url!!, true, BrowserDirection.FromBookmarks)
}
}

View File

@ -24,10 +24,8 @@ import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.FenixApplication
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore.PREF_FILE_SEARCH_ENGINES
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.searchEngineManager
import org.mozilla.fenix.ext.settings
@ -109,9 +107,6 @@ class SearchInteractorTest {
val context: HomeActivity = mockk(relaxed = true)
val settings = testContext.settings().apply { testContext.settings().clear() }
val browsingModeManager: DefaultBrowsingModeManager = mockk(relaxed = true)
every { context.components.browsingModeManager } returns browsingModeManager
mockkObject(Settings)
every { Settings.getInstance(context = context) } returns settings