From a1d32127abc76423e2dfd323405655e252470684 Mon Sep 17 00:00:00 2001 From: Sawyer Blatz Date: Wed, 22 May 2019 10:26:06 -0700 Subject: [PATCH] For #2655: Adds undo snackbar for closing all tabs --- .../org/mozilla/fenix/home/HomeFragment.kt | 28 ++++++++++++++++++- app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 658f1cb14..98f6e4dd4 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -80,6 +80,7 @@ class HomeFragment : Fragment(), CoroutineScope { private var homeMenu: HomeMenu? = null + var deleteAllSessionsJob: (suspend () -> Unit)? = null var deleteSessionJob: (suspend () -> Unit)? = null var deleteCollectionJob: (suspend () -> Unit)? = null @@ -299,7 +300,7 @@ class HomeFragment : Fragment(), CoroutineScope { } } is TabAction.CloseAll -> { - requireComponents.useCases.tabsUseCases.removeAllTabsOfType.invoke(action.private) + removeAllTabsWithUndo(action.private) } is TabAction.PrivateBrowsingLearnMore -> { (activity as HomeActivity).openToBrowserAndLoad( @@ -333,6 +334,14 @@ class HomeFragment : Fragment(), CoroutineScope { } } + deleteAllSessionsJob?.let { + launch { + it.invoke() + }.invokeOnCompletion { + deleteAllSessionsJob = null + } + } + deleteCollectionJob?.let { launch { it.invoke() @@ -493,6 +502,23 @@ class HomeFragment : Fragment(), CoroutineScope { return observer } + private fun removeAllTabsWithUndo(isPrivate: Boolean) { + getManagedEmitter().onNext(SessionControlChange.TabsChange(listOf())) + deleteAllSessionsJob = { + requireComponents.useCases.tabsUseCases.removeAllTabsOfType.invoke(isPrivate) + } + + CoroutineScope(Dispatchers.Main).allowUndo( + view!!, getString(R.string.snackbar_tabs_deleted), + getString(R.string.snackbar_deleted_undo), { + deleteAllSessionsJob = null + emitSessionChanges() + } + ) { + requireComponents.useCases.tabsUseCases.removeAllTabsOfType.invoke(isPrivate) + } + } + private fun removeTabWithUndo(sessionId: String) { val sessionManager = requireComponents.core.sessionManager diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index feb7695d9..3399aea99 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -484,6 +484,8 @@ Collection renamed Tab deleted + + Tabs deleted UNDO