From 2f2531e3bfb09382ea9f6e2a569f750ad988b26b Mon Sep 17 00:00:00 2001 From: Grisha Kruglov Date: Thu, 16 Apr 2020 18:06:57 -0700 Subject: [PATCH] Use HomeFragment's viewLifecycleOwner as the lifecycle for accountManager observer registry If we just use the HomeFragment itself, we end up with a memory leak since the lifecycle events that would clean up the registry (e.g. destroy) won't run (if the fragment is retained in the backstack, for example). --- .../main/java/org/mozilla/fenix/home/HomeFragment.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 1a549a836e0f..d4ffdfe0ec7c 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -379,11 +379,12 @@ class HomeFragment : Fragment() { ) requireComponents.backgroundServices.accountManagerAvailableQueue.runIfReadyOrQueue { - // By the time this code runs, we may not be attached to a context. - if ((this@HomeFragment).context == null) { + // By the time this code runs, we may not be attached to a context or have a view lifecycle owner. + if ((this@HomeFragment).view?.context == null) { return@runIfReadyOrQueue } - requireComponents.backgroundServices.accountManager.register(currentMode, owner = this@HomeFragment) + + requireComponents.backgroundServices.accountManager.register(currentMode, owner = this@HomeFragment.viewLifecycleOwner) requireComponents.backgroundServices.accountManager.register(object : AccountObserver { override fun onAuthenticated(account: OAuthAccount, authType: AuthType) { if (authType != AuthType.Existing) { @@ -398,7 +399,7 @@ class HomeFragment : Fragment() { } } } - }, owner = this@HomeFragment) + }, owner = this@HomeFragment.viewLifecycleOwner) } if (context.settings().showPrivateModeContextualFeatureRecommender && @@ -618,7 +619,7 @@ class HomeFragment : Fragment() { @SuppressWarnings("ComplexMethod", "LongMethod") private fun createHomeMenu(context: Context, menuButtonView: WeakReference) = HomeMenu( - this, + this.viewLifecycleOwner, context, onItemTapped = { when (it) {