From 089c79f868d893e7c7adb41e7ad74c39a34a6531 Mon Sep 17 00:00:00 2001 From: mcarare Date: Tue, 17 Nov 2020 13:49:06 +0200 Subject: [PATCH] For #16353: Finish onboarding on loading a web page, with exceptions. --- .../fenix/browser/BaseBrowserFragment.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) 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 3fe1a59a8..56a6b2a02 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -117,6 +117,8 @@ import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings import org.mozilla.fenix.home.HomeScreenViewModel import org.mozilla.fenix.home.SharedViewModel +import org.mozilla.fenix.onboarding.FenixOnboarding +import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.utils.allowUndo import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration @@ -174,6 +176,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, protected var webAppToolbarShouldBeVisible = true private val sharedViewModel: SharedViewModel by activityViewModels() + private val onboarding by lazy { FenixOnboarding(requireContext()) } @CallSuper override fun onCreateView( @@ -217,6 +220,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, } observeTabSelection(requireComponents.core.store) + + if (!onboarding.userHasBeenOnboarded()) { + observeTabSource(requireComponents.core.store) + } + requireContext().accessibilityManager.addAccessibilityStateChangeListener(this) } @@ -841,6 +849,25 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, } } + @VisibleForTesting + @Suppress("ComplexCondition") + internal fun observeTabSource(store: BrowserStore) { + consumeFlow(store) { flow -> + flow.mapNotNull { state -> + state.selectedTab + } + .collect { + if (!onboarding.userHasBeenOnboarded() && + it.content.loadRequest?.triggeredByRedirect != true && + it.source !in intentSourcesList && + it.content.url !in onboardingLinksList + ) { + onboarding.finish() + } + } + } + } + private fun handleTabSelected(selectedTab: TabSessionState) { if (!this.isRemoving) { updateThemeForSession(selectedTab) @@ -1206,6 +1233,17 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1 private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2 private const val REQUEST_CODE_APP_PERMISSIONS = 3 + + val onboardingLinksList: List = listOf( + SupportUtils.getMozillaPageUrl(SupportUtils.MozillaPage.PRIVATE_NOTICE), + SupportUtils.getFirefoxAccountSumoUrl() + ) + + val intentSourcesList: List = listOf( + SessionState.Source.ACTION_SEARCH, + SessionState.Source.ACTION_SEND, + SessionState.Source.ACTION_VIEW + ) } override fun onAccessibilityStateChanged(enabled: Boolean) {