From 157fe2c221dc7d25854a93837276806d726bdd05 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 13 Nov 2022 21:10:57 +0530 Subject: [PATCH] refactor(di): move out Coil configuration to an AppPlugin --- .../msfjarvis/claw/android/ClawApplication.kt | 25 +------------ common/build.gradle.kts | 4 ++ .../claw/common/injection/CoilAppPlugin.kt | 37 +++++++++++++++++++ 3 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 common/src/main/kotlin/dev/msfjarvis/claw/common/injection/CoilAppPlugin.kt diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ClawApplication.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ClawApplication.kt index 28d2c910..5815d1d3 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ClawApplication.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ClawApplication.kt @@ -7,10 +7,6 @@ package dev.msfjarvis.claw.android import android.app.Application -import coil.ImageLoader -import coil.ImageLoaderFactory -import coil.disk.DiskCache -import coil.memory.MemoryCache import dev.msfjarvis.claw.core.injection.AppPlugin import dev.msfjarvis.claw.injection.Components import dev.msfjarvis.claw.injection.scopes.AppScope @@ -19,7 +15,7 @@ import tangle.inject.TangleGraph import tangle.inject.TangleScope @TangleScope(AppScope::class) -class ClawApplication : Application(), ImageLoaderFactory { +class ClawApplication : Application() { @Inject lateinit var plugins: Set<@JvmSuppressWildcards AppPlugin> @@ -31,23 +27,4 @@ class ClawApplication : Application(), ImageLoaderFactory { TangleGraph.inject(this) plugins.forEach { plugin -> plugin.apply(this) } } - - override fun newImageLoader(): ImageLoader { - return ImageLoader.Builder(this) - .memoryCache { MemoryCache.Builder(this).maxSizePercent(MEMORY_CACHE_RATIO).build() } - .diskCache { - DiskCache.Builder() - .directory(cacheDir.resolve("image_cache")) - .maxSizeBytes(DISK_CACHE_MAX_SIZE) - .build() - } - // Show a short crossfade when loading images asynchronously. - .crossfade(true) - .build() - } - - private companion object { - private const val MEMORY_CACHE_RATIO = 0.25 - private const val DISK_CACHE_MAX_SIZE = 25L * 1024 * 1024 // 25 MB - } } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index c17d60e6..cc480065 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -10,13 +10,17 @@ plugins { kotlin("android") id("dev.msfjarvis.claw.kotlin-common") id("dev.msfjarvis.claw.android-library") + alias(libs.plugins.anvil) } +anvil { generateDaggerFactories.set(true) } + androidComponents { beforeVariants { it.enableUnitTest = false } } dependencies { implementation(platform(libs.androidx.compose.bom)) api(libs.napier) + implementation(projects.core) implementation(projects.database) implementation(projects.model) implementation(libs.accompanist.flowlayout) diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/injection/CoilAppPlugin.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/injection/CoilAppPlugin.kt new file mode 100644 index 00000000..1785ea77 --- /dev/null +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/injection/CoilAppPlugin.kt @@ -0,0 +1,37 @@ +/* + * Copyright © 2022 Harsh Shandilya. + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ +package dev.msfjarvis.claw.common.injection + +import android.app.Application +import coil.Coil +import coil.ImageLoader +import coil.disk.DiskCache +import coil.memory.MemoryCache +import dev.msfjarvis.claw.core.injection.AppPlugin + +class CoilAppPlugin : AppPlugin { + override fun apply(application: Application) { + Coil.setImageLoader { + ImageLoader.Builder(application) + .memoryCache { MemoryCache.Builder(application).maxSizePercent(MEMORY_CACHE_RATIO).build() } + .diskCache { + DiskCache.Builder() + .directory(application.cacheDir.resolve("image_cache")) + .maxSizeBytes(DISK_CACHE_MAX_SIZE) + .build() + } + // Show a short crossfade when loading images asynchronously. + .crossfade(true) + .build() + } + } + + private companion object { + private const val MEMORY_CACHE_RATIO = 0.25 + private const val DISK_CACHE_MAX_SIZE = 25L * 1024 * 1024 // 25 MB + } +}