commit a6dd9344d0558cd316703e8caba285eb6e160434 parent 000a7d3ce5ed6a9f9ee5e742f6d1f3315527e3ae Author: John Oberhauser <j.git-global@obez.io> Date: Mon, 22 Dec 2025 18:29:24 +0000 Bug 2006789 - Hiding the privacy notice banner when navigating away instead of when stopping the fragment r=android-reviewers,twhite Differential Revision: https://phabricator.services.mozilla.com/D277053 Diffstat:
6 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -40,6 +40,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope +import androidx.navigation.NavController import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.google.android.material.appbar.AppBarLayout @@ -284,6 +285,13 @@ class HomeFragment : Fragment() { } private val showReviewPromptBinding = ViewBoundFeatureWrapper<ShowReviewPromptBinding>() + private val destinationChangedListener = + NavController.OnDestinationChangedListener { _, destination, _ -> + if (destination.id != R.id.homeFragment) { + privacyNoticeBannerStore.dispatch(PrivacyNoticeBannerAction.OnNavigatedAwayFromHome) + } + } + override fun onCreate(savedInstanceState: Bundle?) { // DO NOT ADD ANYTHING ABOVE THIS getProfilerTime CALL! val profilerStartTime = requireComponents.core.engine.profiler?.getProfilerTime() @@ -1210,6 +1218,8 @@ class HomeFragment : Fragment() { override fun onStart() { super.onStart() + findNavController().addOnDestinationChangedListener(destinationChangedListener) + subscribeToTabCollections() requireComponents.backgroundServices.accountManagerAvailableQueue.runIfReadyOrQueue { @@ -1317,7 +1327,7 @@ class HomeFragment : Fragment() { override fun onStop() { super.onStop() - privacyNoticeBannerStore.dispatch(PrivacyNoticeBannerAction.OnFragmentStopped) + findNavController().removeOnDestinationChangedListener(destinationChangedListener) } private fun subscribeToTabCollections(): Observer<List<TabCollection>> { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddleware.kt @@ -29,7 +29,7 @@ class PrivacyNoticeBannerMiddleware( is PrivacyNoticeBannerAction.OnPrivacyNoticeClicked, is PrivacyNoticeBannerAction.OnLearnMoreClicked, is PrivacyNoticeBannerAction.OnCloseClicked, - is PrivacyNoticeBannerAction.OnFragmentStopped, + is PrivacyNoticeBannerAction.OnNavigatedAwayFromHome, -> { } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerStore.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerStore.kt @@ -36,9 +36,9 @@ sealed interface PrivacyNoticeBannerAction : Action { data object OnLearnMoreClicked : PrivacyNoticeBannerAction /** - * Triggered when the fragment's onStop function is called. + * Triggered when navigating away from the home fragment. */ - data object OnFragmentStopped : PrivacyNoticeBannerAction + data object OnNavigatedAwayFromHome : PrivacyNoticeBannerAction /** * Triggered when the banner is displayed. @@ -64,7 +64,7 @@ private fun reduce( ): PrivacyNoticeBannerState { return when (action) { is PrivacyNoticeBannerAction.OnCloseClicked, - is PrivacyNoticeBannerAction.OnFragmentStopped, + is PrivacyNoticeBannerAction.OnNavigatedAwayFromHome, -> state.copy(visible = false) is PrivacyNoticeBannerAction.OnLearnMoreClicked, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddleware.kt @@ -38,7 +38,7 @@ class PrivacyNoticeBannerTelemetryMiddleware : } // no-ops - is PrivacyNoticeBannerAction.OnFragmentStopped, + is PrivacyNoticeBannerAction.OnNavigatedAwayFromHome, -> { } } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddlewareTest.kt @@ -62,7 +62,7 @@ class PrivacyNoticeBannerMiddlewareTest { middleware.invoke( store = store, next = {}, - action = PrivacyNoticeBannerAction.OnFragmentStopped, + action = PrivacyNoticeBannerAction.OnNavigatedAwayFromHome, ) assertFalse(repository.updatePrivacyNoticeBannerDisplayedPreferenceCalled) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerReducerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerReducerTest.kt @@ -26,7 +26,7 @@ class PrivacyNoticeBannerReducerTest { } @Test - fun `WHEN the OnFragmentStopped action is received THEN the visibility of the banner is set to false`() { + fun `WHEN the OnNavigatedAwayFromHome action is received THEN the visibility of the banner is set to false`() { store = PrivacyNoticeBannerStore( initialState = PrivacyNoticeBannerState( visible = true, @@ -34,7 +34,7 @@ class PrivacyNoticeBannerReducerTest { middleware = emptyList(), ) - store.dispatch(PrivacyNoticeBannerAction.OnFragmentStopped) + store.dispatch(PrivacyNoticeBannerAction.OnNavigatedAwayFromHome) assertFalse(store.state.visible) }