Unverified Commit bd7a5375 authored by MarcLeclair's avatar MarcLeclair Committed by GitHub
Browse files

For 11660: fixing nits for previous #11668 (#11821)

parent 92886121
......@@ -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()
......
......@@ -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
}
}
......
......@@ -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 <T> LiveData<T>.observeOnce(observer: (T) -> Unit) {
fun <T> LiveData<T>.observeOnceAndRemoveObserver(callback: (T) -> Unit) {
observeForever(object : Observer<T> {
override fun onChanged(value: T) {
removeObserver(this)
observer(value)
callback(value)
}
})
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment