From ebadbdb3522fc777e388ca1241e0287e89fec111 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Thu, 12 Nov 2020 11:52:59 -0500 Subject: [PATCH] For #14920 - Show a Tabs Tray CFR Banner for grid view tip (#16466) --- .../fenix/tabtray/TabTrayController.kt | 4 +-- .../tabtray/TabTrayFragmentInteractor.kt | 9 ++++--- .../org/mozilla/fenix/tabtray/TabTrayView.kt | 26 +++++++++++++++++-- .../java/org/mozilla/fenix/utils/Settings.kt | 5 ++++ app/src/main/res/values/preference_keys.xml | 3 +++ app/src/main/res/values/strings.xml | 7 +++++ .../tabtray/DefaultTabTrayControllerTest.kt | 2 +- .../tabtray/TabTrayFragmentInteractorTest.kt | 6 ++--- 8 files changed, 50 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayController.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayController.kt index 201ef8573..d5f2c4816 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayController.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayController.kt @@ -52,7 +52,7 @@ interface TabTrayController { fun handleOpenTab(tab: Tab) fun handleEnterMultiselect() fun handleRecentlyClosedClicked() - fun handleSetUpAutoCloseTabsClicked() + fun handleGoToTabsSettingClicked() } /** @@ -239,7 +239,7 @@ class DefaultTabTrayController( navController.navigate(directions) } - override fun handleSetUpAutoCloseTabsClicked() { + override fun handleGoToTabsSettingClicked() { val directions = TabTrayDialogFragmentDirections.actionGlobalTabSettingsFragment() navController.navigate(directions) } diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractor.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractor.kt index 4ca0bc882..8dc718225 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractor.kt @@ -70,9 +70,10 @@ interface TabTrayInteractor { fun onModeRequested(): TabTrayDialogFragmentState.Mode /** - * Called when user clicks on the "set it up" prompt for automatically closing tabs + * Called when user clicks on the action button prompt in the info banner CFR for + * automatically closing tabs or changing the layout of open tabs. */ - fun onSetUpAutoCloseTabsClicked() + fun onGoToTabsSettings() /** * Called when a tab should be opened in the browser. @@ -173,7 +174,7 @@ class TabTrayFragmentInteractor(private val controller: TabTrayController) : Tab controller.handleEnterMultiselect() } - override fun onSetUpAutoCloseTabsClicked() { - controller.handleSetUpAutoCloseTabsClicked() + override fun onGoToTabsSettings() { + controller.handleGoToTabsSettingClicked() } } diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index f54055aaf..ed6494e4c 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -270,7 +270,29 @@ class TabTrayView( adjustNewTabButtonsForNormalMode() + @Suppress("ComplexCondition") if ( + view.context.settings().showGridViewInTabsSettings && + view.context.settings().shouldShowGridViewBanner && + view.context.settings().canShowCfr && + tabs.size >= TAB_COUNT_SHOW_CFR + ) { + InfoBanner( + context = view.context, + message = view.context.getString(R.string.tab_tray_grid_view_banner_message), + dismissText = view.context.getString(R.string.tab_tray_grid_view_banner_negative_button_text), + actionText = view.context.getString(R.string.tab_tray_grid_view_banner_positive_button_text), + container = view.infoBanner, + dismissByHiding = true, + dismissAction = { view.context.settings().shouldShowGridViewBanner = false } + ) { + interactor.onGoToTabsSettings() + view.context.settings().shouldShowGridViewBanner = false + }.apply { + view.infoBanner.visibility = View.VISIBLE + showBanner() + } + } else if ( view.context.settings().shouldShowAutoCloseTabsBanner && view.context.settings().canShowCfr && tabs.size >= TAB_COUNT_SHOW_CFR @@ -284,7 +306,7 @@ class TabTrayView( dismissByHiding = true, dismissAction = { view.context.settings().shouldShowAutoCloseTabsBanner = false } ) { - interactor.onSetUpAutoCloseTabsClicked() + interactor.onGoToTabsSettings() view.context.settings().shouldShowAutoCloseTabsBanner = false }.apply { view.infoBanner.visibility = View.VISIBLE @@ -713,7 +735,7 @@ class TabTrayView( layoutManager?.scrollToPosition(recyclerViewIndex) smoothScrollBy( 0, - - resources.getDimensionPixelSize(R.dimen.tab_tray_tab_item_height) / 2 + -resources.getDimensionPixelSize(R.dimen.tab_tray_tab_item_height) / 2 ) } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index a5548c34c..7f221c328 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -682,6 +682,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = true ) + var shouldShowGridViewBanner by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_should_show_grid_view_banner), + default = true + ) + @VisibleForTesting(otherwise = PRIVATE) internal val trackingProtectionOnboardingCount = counterPreference( appContext.getPreferenceKey(R.string.pref_key_tracking_protection_onboarding), diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 5a839202c..b035a92f5 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -197,6 +197,9 @@ pref_key_should_show_auto_close_tabs_banner + + pref_key_should_show_grid_view_banner + pref_key_migrating_from_fenix_nightly_tip pref_key_migrating_from_firefox_nightly_tip pref_key_migrating_from_fenix_tip diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f8e6f2614..04aeb1d43 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -92,6 +92,13 @@ Dismiss + + Change the layout of open tabs. Go to settings and select grid under tab view. + + Go to settings + + Dismiss + New tab diff --git a/app/src/test/java/org/mozilla/fenix/tabtray/DefaultTabTrayControllerTest.kt b/app/src/test/java/org/mozilla/fenix/tabtray/DefaultTabTrayControllerTest.kt index 8f3e01040..7648cf96b 100644 --- a/app/src/test/java/org/mozilla/fenix/tabtray/DefaultTabTrayControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabtray/DefaultTabTrayControllerTest.kt @@ -315,7 +315,7 @@ class DefaultTabTrayControllerTest { @Test fun handleSetUpAutoCloseTabsClicked() { - controller.handleSetUpAutoCloseTabsClicked() + controller.handleGoToTabsSettingClicked() val directions = TabTrayDialogFragmentDirections.actionGlobalTabSettingsFragment() verify { diff --git a/app/src/test/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractorTest.kt index 2d626a3b9..a0e50b017 100644 --- a/app/src/test/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabtray/TabTrayFragmentInteractorTest.kt @@ -135,8 +135,8 @@ class TabTrayFragmentInteractorTest { } @Test - fun onSetUpAutoCloseTabsClicked() { - interactor.onSetUpAutoCloseTabsClicked() - verify { controller.handleSetUpAutoCloseTabsClicked() } + fun onGoToTabsSettingClicked() { + interactor.onGoToTabsSettings() + verify { controller.handleGoToTabsSettingClicked() } } }