From 5d75244515b94a70a1ddebe0528edebf358091ea Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Mon, 7 Aug 2023 14:18:03 -0700 Subject: [PATCH] Bug 1845232 - Adds action to clear private browsing --- .../mozilla/fenix/browser/BrowserFragment.kt | 34 +++++++++++++------ .../toolbar/BrowserToolbarController.kt | 12 +++++++ .../interactor/BrowserToolbarInteractor.kt | 9 +++++ .../org/mozilla/fenix/home/HomeFragment.kt | 6 +++- app/src/main/res/values/strings.xml | 6 +++- .../DefaultBrowserToolbarControllerTest.kt | 12 +++++++ .../DefaultBrowserToolbarInteractorTest.kt | 7 ++++ 7 files changed, 74 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 8f9c59803d..16c4c987f5 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -37,6 +37,7 @@ import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifAnyChanged import org.mozilla.fenix.GleanMetrics.ReaderMode +import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.TabCollectionStorage @@ -96,17 +97,30 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { ) } - val homeAction = BrowserToolbar.Button( - imageDrawable = AppCompatResources.getDrawable( - context, - R.drawable.mozac_ic_home_24, - )!!, - contentDescription = context.getString(R.string.browser_toolbar_home), - iconTintColorResource = ThemeManager.resolveAttribute(R.attr.textPrimary, context), - listener = browserToolbarInteractor::onHomeButtonClicked, - ) + val isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate + val leadingAction = if (isPrivate && context.settings().feltPrivateBrowsingEnabled) { + BrowserToolbar.Button( + imageDrawable = AppCompatResources.getDrawable( + context, + R.drawable.mozac_ic_data_clearance_24, + )!!, + contentDescription = context.getString(R.string.browser_toolbar_erase), + iconTintColorResource = ThemeManager.resolveAttribute(R.attr.textPrimary, context), + listener = browserToolbarInteractor::onEraseButtonClicked, + ) + } else { + BrowserToolbar.Button( + imageDrawable = AppCompatResources.getDrawable( + context, + R.drawable.mozac_ic_home_24, + )!!, + contentDescription = context.getString(R.string.browser_toolbar_home), + iconTintColorResource = ThemeManager.resolveAttribute(R.attr.textPrimary, context), + listener = browserToolbarInteractor::onHomeButtonClicked, + ) + } - browserToolbarView.view.addNavigationAction(homeAction) + browserToolbarView.view.addNavigationAction(leadingAction) updateToolbarActions(isTablet = resources.getBoolean(R.bool.tablet)) 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 08545bfcfd..979afddb33 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 @@ -29,6 +29,7 @@ import org.mozilla.fenix.components.toolbar.interactor.BrowserToolbarInteractor import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.home.HomeFragment import org.mozilla.fenix.home.HomeScreenViewModel /** @@ -47,6 +48,11 @@ interface BrowserToolbarController { * @see [BrowserToolbarInteractor.onHomeButtonClicked] */ fun handleHomeButtonClick() + + /** + * @see [BrowserToolbarInteractor.onEraseButtonClicked] + */ + fun handleEraseButtonClick() } @Suppress("LongParameterList") @@ -180,6 +186,12 @@ class DefaultBrowserToolbarController( } } + override fun handleEraseButtonClick() { + homeViewModel.sessionToDelete = HomeFragment.ALL_PRIVATE_TABS + val directions = BrowserFragmentDirections.actionGlobalHome() + navController.navigate(directions) + } + companion object { internal const val TELEMETRY_BROWSER_IDENTIFIER = "browserMenu" } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt index 9bad624884..ce0f732866 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt @@ -27,6 +27,11 @@ interface BrowserToolbarInteractor { * Navigates to the Home screen. Called when a user taps on the Home button. */ fun onHomeButtonClicked() + + /** + * Deletase all tabs and navigates to the Home screen. Called when a user taps on the erase button. + */ + fun onEraseButtonClicked() } /** @@ -77,4 +82,8 @@ class DefaultBrowserToolbarInteractor( override fun onHomeButtonClicked() { browserToolbarController.handleHomeButtonClick() } + + override fun onEraseButtonClicked() { + browserToolbarController.handleEraseButtonClick() + } } 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 c7c0e1f046..5edb3dd00a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -664,7 +664,11 @@ class HomeFragment : Fragment() { } val snackbarMessage = if (sessionCode == ALL_PRIVATE_TABS) { - getString(R.string.snackbar_private_tabs_closed) + if (requireContext().settings().feltPrivateBrowsingEnabled) { + getString(R.string.snackbar_private_data_deleted) + } else { + getString(R.string.snackbar_private_tabs_closed) + } } else { getString(R.string.snackbar_tabs_closed) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e2149b8c89..c576c360f8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -214,7 +214,9 @@ Home screen - + + Erase browsing history Selected language @@ -1273,6 +1275,8 @@ Private tab closed Private tabs closed + + Private browsing data deleted UNDO diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt index ce652ca7bd..0d3376590a 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt @@ -53,6 +53,7 @@ import org.mozilla.fenix.browser.readermode.ReaderModeController import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.home.HomeFragment import org.mozilla.fenix.home.HomeScreenViewModel @RunWith(FenixRobolectricTestRunner::class) @@ -366,6 +367,17 @@ class DefaultBrowserToolbarControllerTest { assertNotNull(Events.browserToolbarHomeTapped.testGetValue()) } + @Test + fun handleEraseButtonClicked() { + val controller = createController() + controller.handleEraseButtonClick() + + verify { + homeViewModel.sessionToDelete = HomeFragment.ALL_PRIVATE_TABS + navController.navigate(BrowserFragmentDirections.actionGlobalHome()) + } + } + private fun createController( activity: HomeActivity = this.activity, customTabSessionId: String? = null, diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt index e68d763ad5..f6a4107dbd 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt @@ -80,4 +80,11 @@ class DefaultBrowserToolbarInteractorTest { verify { browserToolbarController.handleHomeButtonClick() } } + + @Test + fun onEraseButtonClicked() { + interactor.onEraseButtonClicked() + + verify { browserToolbarController.handleEraseButtonClick() } + } }