From 7268b0649994da2aead7061607916be4793368ce Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 12 Mar 2020 15:05:06 -0700 Subject: [PATCH 1/2] Rename ImageLoaderProvider to ImageLoaderFactory. --- coil-default/src/main/java/coil/Coil.kt | 39 ++++++++++--------- .../src/main/java/coil/ImageLoaderFactory.kt | 18 +++++++++ .../src/main/java/coil/ImageLoaderProvider.kt | 17 -------- .../src/main/java/coil/sample/Application.kt | 6 +-- 4 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 coil-default/src/main/java/coil/ImageLoaderFactory.kt delete mode 100644 coil-default/src/main/java/coil/ImageLoaderProvider.kt diff --git a/coil-default/src/main/java/coil/Coil.kt b/coil-default/src/main/java/coil/Coil.kt index a36cbd88c0..f456b4e4f6 100644 --- a/coil-default/src/main/java/coil/Coil.kt +++ b/coil-default/src/main/java/coil/Coil.kt @@ -12,7 +12,7 @@ import coil.util.CoilContentProvider object Coil { private var imageLoader: ImageLoader? = null - private var imageLoaderProvider: ImageLoaderProvider? = null + private var imageLoaderFactory: ImageLoaderFactory? = null /** @see imageLoader */ @Deprecated( @@ -26,29 +26,29 @@ object Coil { * Get the default [ImageLoader]. Creates a new instance if none has been set. */ @JvmStatic - fun imageLoader(context: Context): ImageLoader = imageLoader ?: buildImageLoader(context) + fun imageLoader(context: Context): ImageLoader = imageLoader ?: newImageLoader(context) /** * Set the default [ImageLoader]. Shutdown the current instance if there is one. */ @JvmStatic fun setImageLoader(loader: ImageLoader) { - setImageLoader(object : ImageLoaderProvider { - override fun getImageLoader() = loader + setImageLoader(object : ImageLoaderFactory { + override fun newImageLoader() = loader }) } /** - * Set a lazy callback to create the default [ImageLoader]. Shutdown the current instance if there is one. - * The [provider] is guaranteed to be called at most once. + * Set the [ImageLoaderFactory] that will be used to create the default [ImageLoader]. + * Shutdown the current instance if there is one. The [factory] is guaranteed to be called at most once. * - * Using this method to set an explicit [provider] takes precedence over an [Application] that - * implements [ImageLoaderProvider]. + * Using this method to set an explicit [factory] takes precedence over an [Application] that + * implements [ImageLoaderFactory]. */ @JvmStatic @Synchronized - fun setImageLoader(provider: ImageLoaderProvider) { - imageLoaderProvider = provider + fun setImageLoader(factory: ImageLoaderFactory) { + imageLoaderFactory = factory // Shutdown the image loader after clearing the reference. val loader = imageLoader @@ -66,26 +66,27 @@ object Coil { /** @see setImageLoader */ @Deprecated( - message = "Migrate to setDefaultImageLoader(ImageLoaderProvider).", - replaceWith = ReplaceWith("setImageLoader(object : ImageLoaderProvider { override fun getImageLoader() = provider() })") + message = "Migrate to setDefaultImageLoader(ImageLoaderFactory).", + replaceWith = ReplaceWith("setImageLoader(object : ImageLoaderFactory { override fun getImageLoader() = initializer() })") ) @JvmStatic - fun setDefaultImageLoader(provider: () -> ImageLoader) { - setImageLoader(object : ImageLoaderProvider { - override fun getImageLoader() = provider() + fun setDefaultImageLoader(initializer: () -> ImageLoader) { + setImageLoader(object : ImageLoaderFactory { + override fun newImageLoader() = initializer() }) } + /** Create and set the new default [ImageLoader]. */ @Synchronized - private fun buildImageLoader(context: Context): ImageLoader { + private fun newImageLoader(context: Context): ImageLoader { // Check again in case imageLoader was just set. imageLoader?.let { return it } // Create a new ImageLoader. - val loader = imageLoaderProvider?.getImageLoader() - ?: (context.applicationContext as? ImageLoaderProvider)?.getImageLoader() + val loader = imageLoaderFactory?.newImageLoader() + ?: (context.applicationContext as? ImageLoaderFactory)?.newImageLoader() ?: ImageLoader(context) - imageLoaderProvider = null + imageLoaderFactory = null setImageLoader(loader) return loader } diff --git a/coil-default/src/main/java/coil/ImageLoaderFactory.kt b/coil-default/src/main/java/coil/ImageLoaderFactory.kt new file mode 100644 index 0000000000..7ad29243a5 --- /dev/null +++ b/coil-default/src/main/java/coil/ImageLoaderFactory.kt @@ -0,0 +1,18 @@ +package coil + +import android.app.Application + +/** + * A factory that creates new [ImageLoader] instances. + * + * To configure how the default [ImageLoader] is created **either**: + * - Implement [ImageLoaderFactory] in your [Application]. + * - Or call [Coil.setImageLoader] with your [ImageLoaderFactory]. + */ +interface ImageLoaderFactory { + + /** + * Return a new [ImageLoader]. + */ + fun newImageLoader(): ImageLoader +} diff --git a/coil-default/src/main/java/coil/ImageLoaderProvider.kt b/coil-default/src/main/java/coil/ImageLoaderProvider.kt deleted file mode 100644 index aa11b82317..0000000000 --- a/coil-default/src/main/java/coil/ImageLoaderProvider.kt +++ /dev/null @@ -1,17 +0,0 @@ -package coil - -import android.app.Application - -/** - * A class that can provide the default [ImageLoader]. - * - * Either implement [ImageLoaderProvider] on your [Application] **or** call [Coil.setImageLoader] - * with your [ImageLoaderProvider] to provide the default [ImageLoader]. - */ -interface ImageLoaderProvider { - - /** - * Return the default [ImageLoader]. - */ - fun getImageLoader(): ImageLoader -} diff --git a/coil-sample/src/main/java/coil/sample/Application.kt b/coil-sample/src/main/java/coil/sample/Application.kt index 29fec6dc2b..c50ef1b622 100644 --- a/coil-sample/src/main/java/coil/sample/Application.kt +++ b/coil-sample/src/main/java/coil/sample/Application.kt @@ -6,7 +6,7 @@ import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION_CODES.P import androidx.multidex.MultiDexApplication import coil.ImageLoader -import coil.ImageLoaderProvider +import coil.ImageLoaderFactory import coil.decode.GifDecoder import coil.decode.ImageDecoderDecoder import coil.decode.SvgDecoder @@ -17,14 +17,14 @@ import okhttp3.Cache import okhttp3.OkHttpClient import java.io.File -class Application : MultiDexApplication(), ImageLoaderProvider { +class Application : MultiDexApplication(), ImageLoaderFactory { init { // Enable logging to the standard Android log if this is a debug build. CoilLogger.setEnabled(BuildConfig.DEBUG) } - override fun getImageLoader(): ImageLoader { + override fun newImageLoader(): ImageLoader { return ImageLoader.Builder(this) .availableMemoryPercentage(0.5) // Use 50% of the application's available memory. .crossfade(true) // Show a short crossfade when loading images from network or disk. From a9d727d0b7711328824b8a0f3f8d1f0c8c73c0cf Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 12 Mar 2020 15:16:01 -0700 Subject: [PATCH 2/2] Emphasize. --- coil-default/src/main/java/coil/ImageLoaderFactory.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coil-default/src/main/java/coil/ImageLoaderFactory.kt b/coil-default/src/main/java/coil/ImageLoaderFactory.kt index 7ad29243a5..221b9d5450 100644 --- a/coil-default/src/main/java/coil/ImageLoaderFactory.kt +++ b/coil-default/src/main/java/coil/ImageLoaderFactory.kt @@ -7,7 +7,7 @@ import android.app.Application * * To configure how the default [ImageLoader] is created **either**: * - Implement [ImageLoaderFactory] in your [Application]. - * - Or call [Coil.setImageLoader] with your [ImageLoaderFactory]. + * - **Or** call [Coil.setImageLoader] with your [ImageLoaderFactory]. */ interface ImageLoaderFactory {