parent
df49db6adb
commit
4f6f0785c5
|
@ -8,7 +8,6 @@ package org.mozilla.fenix.collections
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import mozilla.components.browser.session.Session
|
import mozilla.components.browser.session.Session
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
|
@ -62,13 +61,21 @@ fun List<Tab>.toSessionBundle(sessionManager: SessionManager): List<Session> {
|
||||||
return this.mapNotNull { sessionManager.findSessionById(it.sessionId) }
|
return this.mapNotNull { sessionManager.findSessionById(it.sessionId) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param store Store used to hold in-memory collection state.
|
||||||
|
* @param dismiss Callback to dismiss the collection creation dialog.
|
||||||
|
* @param metrics Controller that handles telemetry events.
|
||||||
|
* @param tabCollectionStorage Storage used to save tab collections to disk.
|
||||||
|
* @param sessionManager Used to query and serialize tabs.
|
||||||
|
* @param ioScope Coroutine scope that launches on the IO thread.
|
||||||
|
*/
|
||||||
class DefaultCollectionCreationController(
|
class DefaultCollectionCreationController(
|
||||||
private val store: CollectionCreationStore,
|
private val store: CollectionCreationStore,
|
||||||
private val dismiss: () -> Unit,
|
private val dismiss: () -> Unit,
|
||||||
private val metrics: MetricController,
|
private val metrics: MetricController,
|
||||||
private val tabCollectionStorage: TabCollectionStorage,
|
private val tabCollectionStorage: TabCollectionStorage,
|
||||||
private val sessionManager: SessionManager,
|
private val sessionManager: SessionManager,
|
||||||
private val scope: CoroutineScope
|
private val ioScope: CoroutineScope
|
||||||
) : CollectionCreationController {
|
) : CollectionCreationController {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -80,7 +87,7 @@ class DefaultCollectionCreationController(
|
||||||
dismiss()
|
dismiss()
|
||||||
|
|
||||||
val sessionBundle = tabs.toSessionBundle(sessionManager)
|
val sessionBundle = tabs.toSessionBundle(sessionManager)
|
||||||
scope.launch(IO) {
|
ioScope.launch {
|
||||||
tabCollectionStorage.createCollection(name, sessionBundle)
|
tabCollectionStorage.createCollection(name, sessionBundle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +98,7 @@ class DefaultCollectionCreationController(
|
||||||
|
|
||||||
override fun renameCollection(collection: TabCollection, name: String) {
|
override fun renameCollection(collection: TabCollection, name: String) {
|
||||||
dismiss()
|
dismiss()
|
||||||
scope.launch(IO) {
|
ioScope.launch {
|
||||||
tabCollectionStorage.renameCollection(collection, name)
|
tabCollectionStorage.renameCollection(collection, name)
|
||||||
}
|
}
|
||||||
metrics.track(Event.CollectionRenamed)
|
metrics.track(Event.CollectionRenamed)
|
||||||
|
@ -121,7 +128,7 @@ class DefaultCollectionCreationController(
|
||||||
override fun selectCollection(collection: TabCollection, tabs: List<Tab>) {
|
override fun selectCollection(collection: TabCollection, tabs: List<Tab>) {
|
||||||
dismiss()
|
dismiss()
|
||||||
val sessionBundle = tabs.toList().toSessionBundle(sessionManager)
|
val sessionBundle = tabs.toList().toSessionBundle(sessionManager)
|
||||||
scope.launch(IO) {
|
ioScope.launch {
|
||||||
tabCollectionStorage
|
tabCollectionStorage
|
||||||
.addTabsToCollection(collection, sessionBundle)
|
.addTabsToCollection(collection, sessionBundle)
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,9 @@ import androidx.fragment.app.DialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import kotlinx.android.synthetic.main.fragment_create_collection.view.*
|
import kotlinx.android.synthetic.main.fragment_create_collection.view.*
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.plus
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
import mozilla.components.browser.state.store.BrowserStore
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
|
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
|
||||||
|
@ -77,7 +79,7 @@ class CollectionCreationFragment : DialogFragment() {
|
||||||
requireComponents.analytics.metrics,
|
requireComponents.analytics.metrics,
|
||||||
requireComponents.core.tabCollectionStorage,
|
requireComponents.core.tabCollectionStorage,
|
||||||
requireComponents.core.sessionManager,
|
requireComponents.core.sessionManager,
|
||||||
scope = lifecycleScope
|
ioScope = lifecycleScope + Dispatchers.IO
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
collectionCreationView = CollectionCreationView(
|
collectionCreationView = CollectionCreationView(
|
||||||
|
|
Loading…
Reference in New Issue