From bd7a5375f2be6016dac9e70781fcbcfbfeaef808 Mon Sep 17 00:00:00 2001 From: MarcLeclair Date: Wed, 26 Aug 2020 16:11:46 -0400 Subject: [PATCH] For 11660: fixing nits for previous #11668 (#11821) --- .../main/java/org/mozilla/fenix/FenixApplication.kt | 5 +++-- .../org/mozilla/fenix/components/TopSiteStorage.kt | 11 +++++++++-- app/src/main/java/org/mozilla/fenix/ext/LiveData.kt | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index fc5552856..8f747c51b 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -257,8 +257,9 @@ open class FenixApplication : LocaleAwareApplication(), Provider { // no-op, LeakCanary is disabled by default } - // This is for issue https://github.com/mozilla-mobile/fenix/issues/11660. We prefetch our info for startup - // so that we're sure that we have all the data available as our fragment is launched. + /** + * See [TopsiteStore.prefetch] for details on pre fetching. + */ private fun prefetchForHomeFragment() { StrictMode.allowThreadDiskReads().resetPoliciesAfter { components.core.topSiteStorage.prefetch() diff --git a/app/src/main/java/org/mozilla/fenix/components/TopSiteStorage.kt b/app/src/main/java/org/mozilla/fenix/components/TopSiteStorage.kt index c7c0347bd..854cfa3bc 100644 --- a/app/src/main/java/org/mozilla/fenix/components/TopSiteStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/TopSiteStorage.kt @@ -14,7 +14,7 @@ import mozilla.components.feature.top.sites.TopSite import mozilla.components.feature.top.sites.TopSiteStorage import mozilla.components.support.locale.LocaleManager import org.mozilla.fenix.R -import org.mozilla.fenix.ext.observeOnce +import org.mozilla.fenix.ext.observeOnceAndRemoveObserver import org.mozilla.fenix.ext.settings import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.advanced.getSelectedLocale @@ -88,8 +88,15 @@ class TopSiteStorage(private val context: Context) { } } + /** + * This is for issue https://github.com/mozilla-mobile/fenix/issues/11660. We prefetch the top + * sites for startup so that we're sure that we have all the data available as our fragment is + * launched to make sure that we can display everything on the home screen on the first drawing pass. + * This method doesn't negatively affect performance since the [getTopSites] runs on the a + * background thread. + */ fun prefetch() { - getTopSites().observeOnce { + getTopSites().observeOnceAndRemoveObserver { cachedTopSites = it } } diff --git a/app/src/main/java/org/mozilla/fenix/ext/LiveData.kt b/app/src/main/java/org/mozilla/fenix/ext/LiveData.kt index 718385219..5b082f2fc 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/LiveData.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/LiveData.kt @@ -10,11 +10,11 @@ import androidx.lifecycle.Observer /** * Observe a LiveData once and unregister from it as soon as the live data returns a value */ -fun LiveData.observeOnce(observer: (T) -> Unit) { +fun LiveData.observeOnceAndRemoveObserver(callback: (T) -> Unit) { observeForever(object : Observer { override fun onChanged(value: T) { removeObserver(this) - observer(value) + callback(value) } }) }