From 485ccba1898943393557e7fe029cd0ca2f3a2e80 Mon Sep 17 00:00:00 2001
From: ValentinTimisica <52956363+ValentinTimisica@users.noreply.github.com>
Date: Mon, 21 Oct 2019 19:57:06 +0300
Subject: [PATCH] Fixes #5323: Show a snackbar while browsing data is deleting.
(#6105)
---
.../mozilla/fenix/browser/BaseBrowserFragment.kt | 10 ++++++++++
.../toolbar/BrowserToolbarController.kt | 4 +++-
.../java/org/mozilla/fenix/home/HomeFragment.kt | 10 +++++++++-
.../settings/deletebrowsingdata/DeleteAndQuit.kt | 7 ++++++-
app/src/main/res/values/strings.xml | 2 ++
.../DefaultBrowserToolbarControllerTest.kt | 8 ++++++--
.../deletebrowsingdata/DeleteAndQuitTest.kt | 15 ++++++++++++---
7 files changed, 48 insertions(+), 8 deletions(-)
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…