diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
index 9f76b2033..81f795c37 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
@@ -80,6 +80,7 @@ import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.settings
+import org.mozilla.fenix.ext.getRootView
import org.mozilla.fenix.isInExperiment
import org.mozilla.fenix.quickactionsheet.QuickActionSheetBehavior
import org.mozilla.fenix.settings.SupportUtils
@@ -165,8 +166,17 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs
return getSessionById()?.also { session ->
+ // We need to show the snackbar while the browsing data is deleting(if "Delete
+ // browsing data on quit" is activated). After the deletion is over, the snackbar
+ // is dismissed.
+ val snackbar: FenixSnackbar? = requireActivity().getRootView()?.let { v ->
+ FenixSnackbar.make(v, Snackbar.LENGTH_INDEFINITE)
+ .setText(v.context.getString(R.string.deleting_browsing_data_in_progress))
+ }
+
val browserToolbarController = DefaultBrowserToolbarController(
requireActivity(),
+ snackbar,
findNavController(),
(activity as HomeActivity).browsingModeManager,
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt
index ea5acc084..2d358d88f 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt
@@ -32,6 +32,7 @@ import org.mozilla.fenix.browser.BrowserFragmentDirections
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.collections.CreateCollectionViewModel
+import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.nav
@@ -54,6 +55,7 @@ interface BrowserToolbarController {
@Suppress("LargeClass")
class DefaultBrowserToolbarController(
private val activity: Activity,
+ private val snackbar: FenixSnackbar?,
private val navController: NavController,
private val browsingModeManager: BrowsingModeManager,
private val findInPageLauncher: () -> Unit,
@@ -206,7 +208,7 @@ class DefaultBrowserToolbarController(
// Close this activity since it is no longer displaying any session
activity.finish()
}
- ToolbarMenu.Item.Quit -> deleteAndQuit(activity, scope)
+ ToolbarMenu.Item.Quit -> deleteAndQuit(activity, scope, snackbar)
}
}
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 a32bee99f..5d83e974f 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
@@ -693,10 +693,18 @@ class HomeFragment : Fragment() {
from = BrowserDirection.FromHome
)
}
+ // We need to show the snackbar while the browsing data is deleting(if "Delete
+ // browsing data on quit" is activated). After the deletion is over, the snackbar
+ // is dismissed.
HomeMenu.Item.Quit -> activity?.let { activity ->
deleteAndQuit(
activity,
- lifecycleScope
+ lifecycleScope,
+ view?.let { view ->
+ FenixSnackbar.make(view, Snackbar.LENGTH_INDEFINITE)
+ .setText(view.context.getString(R.string.deleting_browsing_data_in_progress))
+ .setAnchorView(bottom_bar)
+ }
)
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt
index a6eab0d4b..c140c9c77 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt
@@ -10,16 +10,19 @@ import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.joinAll
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.ext.settings
/**
* Deletes selected browsing data and finishes the activity.
*/
-fun deleteAndQuit(activity: Activity, coroutineScope: CoroutineScope) {
+fun deleteAndQuit(activity: Activity, coroutineScope: CoroutineScope, snackbar: FenixSnackbar?) {
coroutineScope.launch {
val settings = activity.settings()
val controller = DefaultDeleteBrowsingDataController(activity, coroutineContext)
+ snackbar?.show()
+
DeleteBrowsingDataOnQuitType.values().map { type ->
launch {
if (settings.getDeleteDataOnQuit(type)) {
@@ -28,6 +31,8 @@ fun deleteAndQuit(activity: Activity, coroutineScope: CoroutineScope) {
}
}.joinAll()
+ snackbar?.dismiss()
+
activity.finish()
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e7969b993..7fc4c23e2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -740,6 +740,8 @@
Delete
Browsing data deleted
+
+ Deleting browsing data…