From 4f82495cfc7b7bb6485c01a2630709b975de3702 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 8 May 2024 13:58:25 +0300 Subject: [PATCH] Optimize app initialization --- .../main/kotlin/org/koitharu/kotatsu/core/AppModule.kt | 10 +++++++--- .../main/kotlin/org/koitharu/kotatsu/core/BaseApp.kt | 4 ++-- .../kotatsu/core/parser/favicon/FaviconFetcher.kt | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/AppModule.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/AppModule.kt index 0e7833217..2527dd4f4 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/AppModule.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/AppModule.kt @@ -55,6 +55,7 @@ import org.koitharu.kotatsu.search.ui.MangaSuggestionsProvider import org.koitharu.kotatsu.settings.backup.BackupObserver import org.koitharu.kotatsu.sync.domain.SyncController import org.koitharu.kotatsu.widget.WidgetUpdater +import javax.inject.Provider import javax.inject.Singleton @Module @@ -87,7 +88,7 @@ interface AppModule { @Singleton fun provideCoil( @ApplicationContext context: Context, - @MangaHttpClient okHttpClient: OkHttpClient, + @MangaHttpClient okHttpClientProvider: Provider, mangaRepositoryFactory: MangaRepository.Factory, imageProxyInterceptor: ImageProxyInterceptor, pageFetcherFactory: MangaPageFetcher.Factory, @@ -99,8 +100,11 @@ interface AppModule { .directory(rootDir.resolve(CacheDir.THUMBS.dir)) .build() } + val okHttpClientLazy = lazy { + okHttpClientProvider.get().newBuilder().cache(null).build() + } return ImageLoader.Builder(context) - .okHttpClient(okHttpClient.newBuilder().cache(null).build()) + .okHttpClient { okHttpClientLazy.value } .interceptorDispatcher(Dispatchers.Default) .fetcherDispatcher(Dispatchers.Default) .decoderDispatcher(Dispatchers.IO) @@ -113,7 +117,7 @@ interface AppModule { ComponentRegistry.Builder() .add(SvgDecoder.Factory()) .add(CbzFetcher.Factory()) - .add(FaviconFetcher.Factory(context, okHttpClient, mangaRepositoryFactory)) + .add(FaviconFetcher.Factory(context, okHttpClientLazy, mangaRepositoryFactory)) .add(MangaPageKeyer()) .add(pageFetcherFactory) .add(imageProxyInterceptor) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/BaseApp.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/BaseApp.kt index 9e617f81d..4a31e64b7 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/BaseApp.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/BaseApp.kt @@ -37,7 +37,7 @@ import javax.inject.Provider open class BaseApp : Application(), Configuration.Provider { @Inject - lateinit var databaseObservers: Set<@JvmSuppressWildcards InvalidationTracker.Observer> + lateinit var databaseObserversProvider: Provider> @Inject lateinit var activityLifecycleCallbacks: Set<@JvmSuppressWildcards ActivityLifecycleCallbacks> @@ -123,7 +123,7 @@ open class BaseApp : Application(), Configuration.Provider { @WorkerThread private fun setupDatabaseObservers() { val tracker = database.get().invalidationTracker - databaseObservers.forEach { + databaseObserversProvider.get().forEach { tracker.addObserver(it) } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/favicon/FaviconFetcher.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/favicon/FaviconFetcher.kt index a430f1601..0a0c41e40 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/favicon/FaviconFetcher.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/favicon/FaviconFetcher.kt @@ -170,10 +170,11 @@ class FaviconFetcher( class Factory( context: Context, - private val okHttpClient: OkHttpClient, + okHttpClientLazy: Lazy, private val mangaRepositoryFactory: MangaRepository.Factory, ) : Fetcher.Factory { + private val okHttpClient by okHttpClientLazy private val diskCache = lazy { val rootDir = context.externalCacheDir ?: context.cacheDir DiskCache.Builder()