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 56964573b..11310a2fe 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -54,6 +54,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { private val windowFeature = ViewBoundFeatureWrapper() private var readerModeAvailable = false + private var openInAppOnboardingObserver: OpenInAppOnboardingObserver? = null override fun onCreateView( inflater: LayoutInflater, @@ -159,15 +160,16 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { } session?.register(toolbarSessionObserver, viewLifecycleOwner, autoPause = true) - if (settings.shouldShowOpenInAppBanner) { - session?.register( - OpenInAppOnboardingObserver( - context = context, - navController = findNavController(), - settings = settings, - appLinksUseCases = context.components.useCases.appLinksUseCases, - container = browserToolbarView.view.parent as ViewGroup - ), + if (settings.shouldShowOpenInAppBanner && session != null) { + openInAppOnboardingObserver = OpenInAppOnboardingObserver( + context = context, + navController = findNavController(), + settings = settings, + appLinksUseCases = context.components.useCases.appLinksUseCases, + container = browserToolbarView.view.parent as ViewGroup + ) + session.register( + openInAppOnboardingObserver!!, owner = this, autoPause = true ) @@ -188,6 +190,16 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { subscribeToTabCollections() } + override fun onStop() { + super.onStop() + // This observer initialized in onStart has a reference to fragment's view. + // Prevent it leaking the view after the latter onDestroyView. + if (openInAppOnboardingObserver != null) { + getSessionById()?.unregister(openInAppOnboardingObserver!!) + openInAppOnboardingObserver = null + } + } + private fun subscribeToTabCollections() { Observer> { requireComponents.core.tabCollectionStorage.cachedTabCollections = it