diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 716716204..bc4bf7de1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -213,6 +213,9 @@
android:exported="false"
android:theme="@style/Theme.AppCompat.DayNight.DarkActionBar"/>
+
+
?, publicSuffixList: PublicSuffixList): List {
+fun SessionManager.getTabs(
+ tabIds: Array?,
+ store: BrowserStore,
+ publicSuffixList: PublicSuffixList
+): List {
return tabIds
?.mapNotNull { this.findSessionById(it) }
- ?.map { it.toTab(publicSuffixList) }
+ ?.map { it.toTab(store, publicSuffixList) }
?: emptyList()
}
diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationView.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationView.kt
index a7bc79f69..252b13a8b 100644
--- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationView.kt
+++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationView.kt
@@ -20,8 +20,20 @@ import androidx.transition.AutoTransition
import androidx.transition.Transition
import androidx.transition.TransitionManager
import kotlinx.android.extensions.LayoutContainer
-import kotlinx.android.synthetic.main.component_collection_creation.*
-import kotlinx.android.synthetic.main.component_collection_creation.view.*
+import kotlinx.android.synthetic.main.component_collection_creation.back_button
+import kotlinx.android.synthetic.main.component_collection_creation.collection_constraint_layout
+import kotlinx.android.synthetic.main.component_collection_creation.name_collection_edittext
+import kotlinx.android.synthetic.main.component_collection_creation.save_button
+import kotlinx.android.synthetic.main.component_collection_creation.select_all_button
+import kotlinx.android.synthetic.main.component_collection_creation.view.bottom_bar_icon_button
+import kotlinx.android.synthetic.main.component_collection_creation.view.bottom_bar_text
+import kotlinx.android.synthetic.main.component_collection_creation.view.bottom_button_bar_layout
+import kotlinx.android.synthetic.main.component_collection_creation.view.collection_constraint_layout
+import kotlinx.android.synthetic.main.component_collection_creation.view.collections_list
+import kotlinx.android.synthetic.main.component_collection_creation.view.name_collection_edittext
+import kotlinx.android.synthetic.main.component_collection_creation.view.select_all_button
+import kotlinx.android.synthetic.main.component_collection_creation.view.tab_list
+import mozilla.components.browser.state.state.MediaState
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.support.ktx.android.view.hideKeyboard
import mozilla.components.support.ktx.android.view.showKeyboard
@@ -253,7 +265,8 @@ class CollectionCreationView(
tab.id.toString(),
tab.url,
tab.url.toShortUrl(view.context.components.publicSuffixList),
- tab.title
+ tab.title,
+ mediaState = MediaState.State.NONE
)
}.let { tabs ->
collectionCreationTabListAdapter.updateData(tabs, tabs.toSet(), true)
diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt
index e1557cfec..df8580180 100644
--- a/app/src/main/java/org/mozilla/fenix/components/Core.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt
@@ -27,9 +27,8 @@ import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.mediaquery.PreferredColorScheme
import mozilla.components.concept.fetch.Client
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
-import mozilla.components.feature.media.MediaFeature
import mozilla.components.feature.media.RecordingDevicesNotificationFeature
-import mozilla.components.feature.media.state.MediaStateMachine
+import mozilla.components.feature.media.middleware.MediaMiddleware
import mozilla.components.feature.pwa.ManifestStorage
import mozilla.components.feature.pwa.WebAppShortcutManager
import mozilla.components.feature.session.HistoryDelegate
@@ -44,6 +43,7 @@ import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.settings
+import org.mozilla.fenix.media.MediaService
import org.mozilla.fenix.test.Mockable
import java.util.concurrent.TimeUnit
@@ -66,7 +66,7 @@ class Core(private val context: Context) {
preferredColorScheme = getPreferredColorScheme(),
automaticFontSizeAdjustment = context.settings().shouldUseAutoSize,
fontInflationEnabled = context.settings().shouldUseAutoSize,
- suspendMediaWhenInactive = !FeatureFlags.mediaIntegration,
+ suspendMediaWhenInactive = false,
forceUserScalableContent = context.settings().forceEnableZoom
)
@@ -97,7 +97,11 @@ class Core(private val context: Context) {
* The [BrowserStore] holds the global [BrowserState].
*/
val store by lazy {
- BrowserStore()
+ BrowserStore(
+ middleware = listOf(
+ MediaMiddleware(context, MediaService::class.java)
+ )
+ )
}
/**
@@ -150,14 +154,6 @@ class Core(private val context: Context) {
.whenSessionsChange()
}
- if (FeatureFlags.mediaIntegration) {
- MediaStateMachine.start(sessionManager)
-
- // Enable media features like showing an ongoing notification with media controls when
- // media in web content is playing.
- MediaFeature(context).enable()
- }
-
WebNotificationFeature(
context, engine, icons, R.drawable.ic_status_logo,
HomeActivity::class.java
diff --git a/app/src/main/java/org/mozilla/fenix/ext/Session.kt b/app/src/main/java/org/mozilla/fenix/ext/Session.kt
index 1474de5ea..af8155a9e 100644
--- a/app/src/main/java/org/mozilla/fenix/ext/Session.kt
+++ b/app/src/main/java/org/mozilla/fenix/ext/Session.kt
@@ -6,21 +6,36 @@ package org.mozilla.fenix.ext
import android.content.Context
import mozilla.components.browser.session.Session
-import mozilla.components.feature.media.state.MediaState
+import mozilla.components.browser.state.state.MediaState
+import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import org.mozilla.fenix.home.Tab
-fun Session.toTab(context: Context, selected: Boolean? = null, mediaState: MediaState? = null): Tab =
- this.toTab(context.components.publicSuffixList, selected, mediaState)
+fun Session.toTab(context: Context, selected: Boolean? = null): Tab =
+ this.toTab(
+ context.components.core.store,
+ context.components.publicSuffixList,
+ selected
+ )
-fun Session.toTab(publicSuffixList: PublicSuffixList, selected: Boolean? = null, mediaState: MediaState? = null): Tab {
+fun Session.toTab(store: BrowserStore, publicSuffixList: PublicSuffixList, selected: Boolean? = null): Tab {
return Tab(
sessionId = this.id,
url = this.url,
hostname = this.url.toShortUrl(publicSuffixList),
title = this.title,
selected = selected,
- mediaState = mediaState,
- icon = this.icon
+ icon = this.icon,
+ mediaState = getMediaStateForSession(store, this)
)
}
+
+private fun getMediaStateForSession(store: BrowserStore, session: Session): MediaState.State {
+ // For now we are looking up the media state for this session in the BrowserStore. Eventually
+ // we will migrate away from Session(Manager) and can use BrowserStore and BrowserState directly.
+ return if (store.state.media.aggregate.activeTabId == session.id) {
+ store.state.media.aggregate.state
+ } else {
+ MediaState.State.NONE
+ }
+}
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 98e968c13..a21090373 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
@@ -56,25 +56,27 @@ import kotlinx.android.synthetic.main.fragment_home.view.sessionControlRecyclerV
import kotlinx.android.synthetic.main.fragment_home.view.toolbar
import kotlinx.android.synthetic.main.fragment_home.view.toolbarLayout
import kotlinx.android.synthetic.main.fragment_home.view.toolbar_wrapper
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
-import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import mozilla.appservices.places.BookmarkRoot
import mozilla.components.browser.menu.ext.getHighlight
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
+import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.sync.AccountObserver
import mozilla.components.concept.sync.AuthType
import mozilla.components.concept.sync.OAuthAccount
-import mozilla.components.feature.media.ext.getSession
-import mozilla.components.feature.media.state.MediaState
-import mozilla.components.feature.media.state.MediaStateMachine
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.top.sites.TopSite
+import mozilla.components.lib.state.ext.flowScoped
import mozilla.components.support.ktx.android.util.dpToPx
+import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
@@ -108,7 +110,6 @@ import org.mozilla.fenix.whatsnew.WhatsNew
import kotlin.math.abs
import kotlin.math.min
-@ExperimentalCoroutinesApi
@SuppressWarnings("TooManyFunctions", "LargeClass")
class HomeFragment : Fragment() {
private val homeViewModel: HomeScreenViewModel by viewModels {
@@ -165,7 +166,11 @@ class HomeFragment : Fragment() {
super.onCreate(savedInstanceState)
postponeEnterTransition()
- val sessionObserver = BrowserSessionsObserver(sessionManager, singleSessionObserver) {
+ val sessionObserver = BrowserSessionsObserver(
+ sessionManager,
+ requireComponents.core.store,
+ singleSessionObserver
+ ) {
emitSessionChanges()
}
@@ -205,8 +210,9 @@ class HomeFragment : Fragment() {
sessionControlInteractor = SessionControlInteractor(
DefaultSessionControlController(
+ store = requireComponents.core.store,
activity = activity,
- store = homeFragmentStore,
+ fragmentStore = homeFragmentStore,
navController = findNavController(),
browsingModeManager = browsingModeManager,
lifecycleScope = viewLifecycleOwner.lifecycleScope,
@@ -277,7 +283,6 @@ class HomeFragment : Fragment() {
}
}
- @ExperimentalCoroutinesApi
@SuppressWarnings("LongMethod")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -895,16 +900,9 @@ class HomeFragment : Fragment() {
private fun List.toTabs(): List {
val selected = sessionManager.selectedSession
- val mediaStateSession = MediaStateMachine.state.getSession()
- return this.map {
- val mediaState = if (mediaStateSession?.id == it.id) {
- MediaStateMachine.state
- } else {
- null
- }
-
- it.toTab(requireContext(), it == selected, mediaState)
+ return map {
+ it.toTab(requireContext(), it == selected)
}
}
@@ -973,18 +971,24 @@ class HomeFragment : Fragment() {
*/
private class BrowserSessionsObserver(
private val manager: SessionManager,
+ private val store: BrowserStore,
private val observer: Session.Observer,
private val onChanged: () -> Unit
) : LifecycleObserver {
+ private var scope: CoroutineScope? = null
/**
* Start observing
*/
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
- MediaStateMachine.register(managerObserver)
manager.register(managerObserver)
subscribeToAll()
+
+ scope = store.flowScoped { flow ->
+ flow.ifChanged { it.media.aggregate }
+ .collect { onChanged() }
+ }
}
/**
@@ -992,7 +996,7 @@ private class BrowserSessionsObserver(
*/
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
- MediaStateMachine.unregister(managerObserver)
+ scope?.cancel()
manager.unregister(managerObserver)
unsubscribeFromAll()
}
@@ -1013,11 +1017,7 @@ private class BrowserSessionsObserver(
session.unregister(observer)
}
- private val managerObserver = object : SessionManager.Observer, MediaStateMachine.Observer {
- override fun onStateChanged(state: MediaState) {
- onChanged()
- }
-
+ private val managerObserver = object : SessionManager.Observer {
override fun onSessionAdded(session: Session) {
subscribeTo(session)
onChanged()
diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragmentStore.kt
index 1a29fb83a..0b1c0bacb 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragmentStore.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragmentStore.kt
@@ -7,7 +7,7 @@ package org.mozilla.fenix.home
import android.graphics.Bitmap
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
-import mozilla.components.feature.media.state.MediaState
+import mozilla.components.browser.state.state.MediaState
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.top.sites.TopSite
import mozilla.components.lib.state.Action
@@ -29,8 +29,8 @@ data class Tab(
val hostname: String,
val title: String,
val selected: Boolean? = null,
- var mediaState: MediaState? = null,
- val icon: Bitmap? = null
+ val icon: Bitmap? = null,
+ val mediaState: MediaState.State
)
data class TopSiteItem(
diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
index 9ee67d35d..2d8241f0b 100644
--- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
@@ -15,7 +15,6 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.tab_list_row.*
-import mozilla.components.feature.media.state.MediaState
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.top.sites.TopSite
import org.mozilla.fenix.home.OnboardingState
@@ -256,7 +255,7 @@ class SessionControlAdapter(
}
if (it.shouldUpdateSelected) { holder.updateSelected(it.tab.selected ?: false) }
if (it.shouldUpdateMediaState) {
- holder.updatePlayPauseButton(it.tab.mediaState ?: MediaState.None)
+ holder.updatePlayPauseButton(it.tab.mediaState)
}
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
index 33f7005c4..940e80899 100644
--- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
@@ -10,10 +10,10 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import mozilla.components.browser.session.SessionManager
+import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.feature.media.ext.pauseIfPlaying
import mozilla.components.feature.media.ext.playIfPaused
-import mozilla.components.feature.media.state.MediaStateMachine
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.tab.collections.ext.restore
import mozilla.components.feature.top.sites.TopSite
@@ -157,8 +157,9 @@ interface SessionControlController {
@SuppressWarnings("TooManyFunctions", "LargeClass")
class DefaultSessionControlController(
+ private val store: BrowserStore,
private val activity: HomeActivity,
- private val store: HomeFragmentStore,
+ private val fragmentStore: HomeFragmentStore,
private val navController: NavController,
private val browsingModeManager: BrowsingModeManager,
private val lifecycleScope: CoroutineScope,
@@ -266,11 +267,11 @@ class DefaultSessionControlController(
}
override fun handlePauseMediaClicked() {
- MediaStateMachine.state.pauseIfPlaying()
+ store.state.media.pauseIfPlaying()
}
override fun handlePlayMediaClicked() {
- MediaStateMachine.state.playIfPaused()
+ store.state.media.playIfPaused()
}
override fun handlePrivateBrowsingLearnMoreClicked() {
@@ -358,7 +359,7 @@ class DefaultSessionControlController(
}
override fun handleToggleCollectionExpanded(collection: TabCollection, expand: Boolean) {
- store.dispatch(HomeFragmentAction.CollectionExpanded(collection, expand))
+ fragmentStore.dispatch(HomeFragmentAction.CollectionExpanded(collection, expand))
}
override fun handleonOpenNewTabClicked() {
diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt
index d29d8ebfe..d6e020db7 100644
--- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt
@@ -12,7 +12,7 @@ import androidx.appcompat.content.res.AppCompatResources
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.tab_list_row.*
-import mozilla.components.feature.media.state.MediaState
+import mozilla.components.browser.state.state.MediaState
import mozilla.components.support.ktx.android.util.dpToFloat
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
@@ -50,15 +50,19 @@ class TabViewHolder(
play_pause_button.setOnClickListener {
when (tab?.mediaState) {
- is MediaState.Playing -> {
+ MediaState.State.PLAYING -> {
it.context.components.analytics.metrics.track(Event.TabMediaPause)
interactor.onPauseMediaClicked()
}
- is MediaState.Paused -> {
+ MediaState.State.PAUSED -> {
it.context.components.analytics.metrics.track(Event.TabMediaPlay)
interactor.onPlayMediaClicked()
}
+
+ MediaState.State.NONE -> throw AssertionError(
+ "Play/Pause button clicked without play/pause state."
+ )
}
}
@@ -82,20 +86,20 @@ class TabViewHolder(
updateHostname(tab.hostname)
updateFavIcon(tab.url, tab.icon)
updateSelected(tab.selected ?: false)
- updatePlayPauseButton(tab.mediaState ?: MediaState.None)
+ updatePlayPauseButton(tab.mediaState)
item_tab.transitionName = "$TAB_ITEM_TRANSITION_NAME${tab.sessionId}"
updateCloseButtonDescription(tab.title)
}
- internal fun updatePlayPauseButton(mediaState: MediaState) {
+ internal fun updatePlayPauseButton(mediaState: MediaState.State) {
with(play_pause_button) {
- visibility = if (mediaState is MediaState.Playing || mediaState is MediaState.Paused) {
+ visibility = if (mediaState == MediaState.State.PLAYING || mediaState == MediaState.State.PAUSED) {
View.VISIBLE
} else {
View.GONE
}
- if (mediaState is MediaState.Playing) {
+ if (mediaState == MediaState.State.PLAYING) {
play_pause_button.contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_pause)
setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.pause_with_background))
diff --git a/app/src/main/java/org/mozilla/fenix/media/MediaService.kt b/app/src/main/java/org/mozilla/fenix/media/MediaService.kt
new file mode 100644
index 000000000..32a1ce2da
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/media/MediaService.kt
@@ -0,0 +1,16 @@
+/* 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.media
+
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.feature.media.service.AbstractMediaService
+import org.mozilla.fenix.ext.components
+
+/**
+ * [AbstractMediaService] implementation for injecting [BrowserStore] singleton.
+ */
+class MediaService : AbstractMediaService() {
+ override val store: BrowserStore by lazy { components.core.store }
+}
diff --git a/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt
index dae8d4e15..dcbe0ea11 100644
--- a/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt
+++ b/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt
@@ -19,6 +19,8 @@ import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.async
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.feature.tab.collections.Tab
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import org.junit.Assert.assertEquals
@@ -44,6 +46,7 @@ class CollectionCreationFragmentTest {
@MockK private lateinit var sessionManager: SessionManager
@MockK private lateinit var publicSuffixList: PublicSuffixList
+ @MockK private lateinit var store: BrowserStore
private val sessionMozilla = Session(initialUrl = URL_MOZILLA, id = SESSION_ID_MOZILLA)
private val sessionBcc = Session(initialUrl = URL_BCC, id = SESSION_ID_BCC)
@@ -57,6 +60,7 @@ class CollectionCreationFragmentTest {
every { sessionManager.findSessionById(SESSION_ID_BAD_2) } answers { null }
every { publicSuffixList.stripPublicSuffix(URL_MOZILLA) } answers { GlobalScope.async { URL_MOZILLA } }
every { publicSuffixList.stripPublicSuffix(URL_BCC) } answers { GlobalScope.async { URL_BCC } }
+ every { store.state } answers { BrowserState() }
}
@Test
@@ -80,7 +84,7 @@ class CollectionCreationFragmentTest {
@Test
fun `GIVEN tabs are present in session manager WHEN getTabs is called THEN tabs will be returned`() {
val tabs = sessionManager
- .getTabs(arrayOf(SESSION_ID_MOZILLA, SESSION_ID_BCC), publicSuffixList)
+ .getTabs(arrayOf(SESSION_ID_MOZILLA, SESSION_ID_BCC), store, publicSuffixList)
val hosts = tabs.map { it.hostname }
@@ -91,7 +95,7 @@ class CollectionCreationFragmentTest {
@Test
fun `GIVEN some tabs are present in session manager WHEN getTabs is called THEN only valid tabs will be returned`() {
val tabs = sessionManager
- .getTabs(arrayOf(SESSION_ID_MOZILLA, SESSION_ID_BAD_1), publicSuffixList)
+ .getTabs(arrayOf(SESSION_ID_MOZILLA, SESSION_ID_BAD_1), store, publicSuffixList)
val hosts = tabs.map { it.hostname }
@@ -102,7 +106,7 @@ class CollectionCreationFragmentTest {
@Test
fun `GIVEN tabs are not present in session manager WHEN getTabs is called THEN an empty list will be returned`() {
val tabs = sessionManager
- .getTabs(arrayOf(SESSION_ID_BAD_1, SESSION_ID_BAD_2), publicSuffixList)
+ .getTabs(arrayOf(SESSION_ID_BAD_1, SESSION_ID_BAD_2), store, publicSuffixList)
assertEquals(emptyList(), tabs)
}
@@ -110,7 +114,7 @@ class CollectionCreationFragmentTest {
@Test
fun `WHEN getTabs is called will null tabIds THEN an empty list will be returned`() {
val tabs = sessionManager
- .getTabs(null, publicSuffixList)
+ .getTabs(null, store, publicSuffixList)
assertEquals(emptyList(), tabs)
}
diff --git a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt
index 063e13ee9..21419794c 100644
--- a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt
+++ b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt
@@ -17,6 +17,7 @@ import kotlinx.coroutines.newSingleThreadContext
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.setMain
import mozilla.components.browser.session.SessionManager
+import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.Engine
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.tabs.TabsUseCases
@@ -38,8 +39,9 @@ import mozilla.components.feature.tab.collections.Tab as ComponentTab
class DefaultSessionControlControllerTest {
private val mainThreadSurrogate = newSingleThreadContext("UI thread")
+ private val store: BrowserStore = mockk(relaxed = true)
private val activity: HomeActivity = mockk(relaxed = true)
- private val store: HomeFragmentStore = mockk(relaxed = true)
+ private val fragmentStore: HomeFragmentStore = mockk(relaxed = true)
private val navController: NavController = mockk(relaxed = true)
private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true)
private val closeTab: (sessionId: String) -> Unit = mockk(relaxed = true)
@@ -71,7 +73,7 @@ class DefaultSessionControlControllerTest {
every { activity.components.core.tabCollectionStorage } returns tabCollectionStorage
every { activity.components.useCases.tabsUseCases } returns tabsUseCases
- every { store.state } returns state
+ every { fragmentStore.state } returns state
every { state.collections } returns emptyList()
every { state.expandedCollections } returns emptySet()
every { state.mode } returns Mode.Normal
@@ -79,8 +81,9 @@ class DefaultSessionControlControllerTest {
every { activity.components.analytics.metrics } returns metrics
controller = DefaultSessionControlController(
- activity = activity,
store = store,
+ activity = activity,
+ fragmentStore = fragmentStore,
navController = navController,
browsingModeManager = browsingModeManager,
lifecycleScope = MainScope(),
@@ -235,6 +238,6 @@ class DefaultSessionControlControllerTest {
fun handleToggleCollectionExpanded() {
val collection: TabCollection = mockk(relaxed = true)
controller.handleToggleCollectionExpanded(collection, true)
- verify { store.dispatch(HomeFragmentAction.CollectionExpanded(collection, true)) }
+ verify { fragmentStore.dispatch(HomeFragmentAction.CollectionExpanded(collection, true)) }
}
}
diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt
index d619f4ad2..fd253e865 100644
--- a/buildSrc/src/main/java/AndroidComponents.kt
+++ b/buildSrc/src/main/java/AndroidComponents.kt
@@ -3,5 +3,5 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
object AndroidComponents {
- const val VERSION = "38.0.20200326160141"
+ const val VERSION = "38.0.20200327101347"
}