diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index bcfac0f2b..8cbe6721f 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -790,6 +790,7 @@ class BrowserFragment : Fragment(), BackHandler { viewModel?.saveCollectionStep = viewModel?.tabCollections?.getStepForCollectionsSize() ?: SaveCollectionStep.SelectCollection viewModel?.snackbarAnchorView = nestedScrollQuickAction + viewModel?.previousFragmentId = R.id.browserFragment view?.let { val directions = BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment() nav(R.id.browserFragment, directions) diff --git a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt index 46abd3322..c331a2701 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt @@ -19,6 +19,7 @@ import org.mozilla.fenix.FenixViewModelProvider import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.requireComponents +import org.mozilla.fenix.home.sessioncontrol.Tab import org.mozilla.fenix.home.sessioncontrol.toSessionBundle import org.mozilla.fenix.mvi.ActionBusFactory import org.mozilla.fenix.mvi.getAutoDisposeObservable @@ -121,6 +122,7 @@ class CreateCollectionFragment : DialogFragment() { viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) { context.components.core.tabCollectionStorage.createCollection(it.name, sessionBundle) } + closeTabsIfNecessary(it.tabs) } } is CollectionCreationAction.SelectCollection -> { @@ -131,6 +133,7 @@ class CreateCollectionFragment : DialogFragment() { context.components.core.tabCollectionStorage .addTabsToCollection(it.collection, sessionBundle) } + closeTabsIfNecessary(it.tabs) } } is CollectionCreationAction.RenameCollection -> { @@ -170,4 +173,15 @@ class CreateCollectionFragment : DialogFragment() { } } } + + private fun closeTabsIfNecessary(tabs: List) { + // Only close the tabs if the user is not on the BrowserFragment + if (viewModel.previousFragmentId == R.id.browserFragment) { return } + + tabs.forEach { + requireComponents.core.sessionManager.findSessionById(it.sessionId)?.let { session -> + requireComponents.useCases.tabsUseCases.removeTab.invoke(session) + } + } + } } diff --git a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt index d33a39c21..c99aac7ab 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt @@ -16,6 +16,7 @@ class CreateCollectionViewModel : ViewModel() { var tabCollections = listOf() var selectedTabCollection: TabCollection? = null var snackbarAnchorView: View? = null + var previousFragmentId: Int? = null fun getStepForTabsAndCollectionSize(): SaveCollectionStep = if (tabs.size > 1) SaveCollectionStep.SelectTabs else tabCollections.getStepForCollectionsSize() 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 fc6a6c1b9..8f8ab983b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -702,6 +702,7 @@ class HomeFragment : Fragment(), AccountObserver { viewModel?.selectedTabCollection = selectedTabCollection viewModel?.saveCollectionStep = step ?: viewModel?.getStepForTabsAndCollectionSize() ?: SaveCollectionStep.SelectTabs + viewModel?.previousFragmentId = R.id.homeFragment // Only register the observer right before moving to collection creation requireComponents.core.tabCollectionStorage.register(collectionStorageObserver, this)