diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt index 808cd37da..eecb1f761 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt @@ -8,7 +8,6 @@ package org.mozilla.fenix.collections import androidx.annotation.VisibleForTesting import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import mozilla.components.browser.session.Session import mozilla.components.browser.session.SessionManager @@ -62,13 +61,21 @@ fun List.toSessionBundle(sessionManager: SessionManager): List { 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( private val store: CollectionCreationStore, private val dismiss: () -> Unit, private val metrics: MetricController, private val tabCollectionStorage: TabCollectionStorage, private val sessionManager: SessionManager, - private val scope: CoroutineScope + private val ioScope: CoroutineScope ) : CollectionCreationController { companion object { @@ -80,7 +87,7 @@ class DefaultCollectionCreationController( dismiss() val sessionBundle = tabs.toSessionBundle(sessionManager) - scope.launch(IO) { + ioScope.launch { tabCollectionStorage.createCollection(name, sessionBundle) } @@ -91,7 +98,7 @@ class DefaultCollectionCreationController( override fun renameCollection(collection: TabCollection, name: String) { dismiss() - scope.launch(IO) { + ioScope.launch { tabCollectionStorage.renameCollection(collection, name) } metrics.track(Event.CollectionRenamed) @@ -121,7 +128,7 @@ class DefaultCollectionCreationController( override fun selectCollection(collection: TabCollection, tabs: List) { dismiss() val sessionBundle = tabs.toList().toSessionBundle(sessionManager) - scope.launch(IO) { + ioScope.launch { tabCollectionStorage .addTabsToCollection(collection, sessionBundle) } diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt index 8c32f3cb0..2149d6bc3 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt @@ -14,7 +14,9 @@ import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs import kotlinx.android.synthetic.main.fragment_create_collection.view.* +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.plus import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.store.BrowserStore import mozilla.components.lib.publicsuffixlist.PublicSuffixList @@ -77,7 +79,7 @@ class CollectionCreationFragment : DialogFragment() { requireComponents.analytics.metrics, requireComponents.core.tabCollectionStorage, requireComponents.core.sessionManager, - scope = lifecycleScope + ioScope = lifecycleScope + Dispatchers.IO ) ) collectionCreationView = CollectionCreationView(