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…