For #14903 - Prevent BrowserFragment's view leak

pull/101/head
Mugurell 4 years ago
parent 2e38635781
commit a6a50d78e0

@ -54,6 +54,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
private val windowFeature = ViewBoundFeatureWrapper<WindowFeature>() private val windowFeature = ViewBoundFeatureWrapper<WindowFeature>()
private var readerModeAvailable = false private var readerModeAvailable = false
private var openInAppOnboardingObserver: OpenInAppOnboardingObserver? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -159,15 +160,16 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
} }
session?.register(toolbarSessionObserver, viewLifecycleOwner, autoPause = true) session?.register(toolbarSessionObserver, viewLifecycleOwner, autoPause = true)
if (settings.shouldShowOpenInAppBanner) { if (settings.shouldShowOpenInAppBanner && session != null) {
session?.register( openInAppOnboardingObserver = OpenInAppOnboardingObserver(
OpenInAppOnboardingObserver( context = context,
context = context, navController = findNavController(),
navController = findNavController(), settings = settings,
settings = settings, appLinksUseCases = context.components.useCases.appLinksUseCases,
appLinksUseCases = context.components.useCases.appLinksUseCases, container = browserToolbarView.view.parent as ViewGroup
container = browserToolbarView.view.parent as ViewGroup )
), session.register(
openInAppOnboardingObserver!!,
owner = this, owner = this,
autoPause = true autoPause = true
) )
@ -188,6 +190,16 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
subscribeToTabCollections() 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() { private fun subscribeToTabCollections() {
Observer<List<TabCollection>> { Observer<List<TabCollection>> {
requireComponents.core.tabCollectionStorage.cachedTabCollections = it requireComponents.core.tabCollectionStorage.cachedTabCollections = it

Loading…
Cancel
Save