parent
084fab77d4
commit
718ac5612c
|
@ -55,7 +55,6 @@ import org.mozilla.fenix.collections.SaveCollectionStep
|
|||
import org.mozilla.fenix.components.FenixSnackbar
|
||||
import org.mozilla.fenix.components.TabCollectionStorage
|
||||
import org.mozilla.fenix.components.metrics.Event
|
||||
import org.mozilla.fenix.ext.components
|
||||
import org.mozilla.fenix.ext.nav
|
||||
import org.mozilla.fenix.ext.requireComponents
|
||||
import org.mozilla.fenix.ext.toTab
|
||||
|
@ -376,13 +375,15 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
|||
}
|
||||
}
|
||||
is TabAction.CloseAll -> {
|
||||
if (pendingSessionDeletion?.deletionJob == null) removeAllTabsWithUndo(action.private) else {
|
||||
if (pendingSessionDeletion?.deletionJob == null) removeAllTabsWithUndo(
|
||||
sessionManager.filteredSessions(action.private)
|
||||
) else {
|
||||
pendingSessionDeletion?.deletionJob?.let {
|
||||
launch {
|
||||
it.invoke()
|
||||
}.invokeOnCompletion {
|
||||
pendingSessionDeletion = null
|
||||
removeAllTabsWithUndo(action.private)
|
||||
removeAllTabsWithUndo(sessionManager.filteredSessions(action.private))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -595,15 +596,14 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
|||
return observer
|
||||
}
|
||||
|
||||
private fun removeAllTabsWithUndo(isPrivate: Boolean) {
|
||||
private fun removeAllTabsWithUndo(listOfSessionsToDelete: List<Session>) {
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
val useCases = context?.components?.useCases?.tabsUseCases ?: return
|
||||
|
||||
getManagedEmitter<SessionControlChange>().onNext(SessionControlChange.TabsChange(listOf()))
|
||||
|
||||
val deleteOperation: (suspend () -> Unit) = {
|
||||
sessionManager.sessions.filter { it.private == isPrivate }.forEach {
|
||||
useCases.removeTab.invoke(it)
|
||||
listOfSessionsToDelete.forEach {
|
||||
sessionManager.remove(it)
|
||||
}
|
||||
}
|
||||
deleteAllSessionsJob = deleteOperation
|
||||
|
@ -839,10 +839,17 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver {
|
|||
}
|
||||
}
|
||||
|
||||
private fun SessionManager.filteredSessions(private: Boolean, sessionFilter: (Session) -> Boolean): List<Session> {
|
||||
private fun SessionManager.filteredSessions(
|
||||
private: Boolean,
|
||||
sessionFilter: ((Session) -> Boolean)? = null
|
||||
): List<Session> {
|
||||
return this.sessions
|
||||
.filter { private == it.private }
|
||||
.filter(sessionFilter)
|
||||
.also { list: List<Session> ->
|
||||
sessionFilter?.let {
|
||||
list.filter(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun List<Session>.toTabs(): List<Tab> {
|
||||
|
|
Loading…
Reference in New Issue