From 7b0a69f8c0ace03b1c3d6c1b71f8ee59e78e7798 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Fri, 1 Jan 2021 10:37:36 -0700 Subject: [PATCH] Dont clear ImageLoader on recreation Make it so that the ImageLoader is only refreshed when the configuration needs to be changed, instead of on every recreation. --- .../java/org/oxycblt/auxio/MainActivity.kt | 6 ++-- .../java/org/oxycblt/auxio/coil/CoilUtils.kt | 31 ++++++++++++------- .../org/oxycblt/auxio/coil/MosaicFetcher.kt | 2 +- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index c935d5e3b..f5ea24daf 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -23,8 +23,6 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // --- UI SETUP --- - val binding = DataBindingUtil.setContentView( this, R.layout.activity_main ) @@ -42,7 +40,9 @@ class MainActivity : AppCompatActivity() { doEdgeToEdgeSetup(binding) } - Coil.setImageLoader(createImageLoader(applicationContext)) + createImageLoader(applicationContext)?.let { + Coil.setImageLoader(it) + } } override fun onStart() { diff --git a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt b/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt index 7a8060a18..72095d5f9 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt @@ -26,24 +26,31 @@ val settingsManager: SettingsManager by lazy { } /** - * Create the custom [ImageLoader] used by Auxio, which automates some convienence things. + * Create the custom [ImageLoader] used by Auxio. Primarily handles whether disk-caching should be done. + * @return A new [ImageLoader], null if the current loader already satisfies what is needed. */ -fun createImageLoader(context: Context): ImageLoader { +fun createImageLoader(context: Context): ImageLoader? { Log.d("createImageLoader", "Creating image loader.") val builder = ImageLoader.Builder(context) - .crossfade(true) - .placeholder(android.R.color.transparent) + val currentLoader = Coil.imageLoader(context) - // To save memory/improve speed, allow disc caching when if quality covers are enabled. + // Enable disk caching if quality covers are being used so that its more efficient. + // Don't bother if not however, as the covers are already cached on-disk. if (settingsManager.useQualityCovers) { - builder.diskCachePolicy(CachePolicy.ENABLED) - } else { - // Otherwise disable it since the covers are already cached, really. - builder.diskCachePolicy(CachePolicy.DISABLED) - } + if (currentLoader.defaults.diskCachePolicy != CachePolicy.ENABLED) { + builder.diskCachePolicy(CachePolicy.ENABLED) - return builder.build() + return builder.build() + } + } else { + if (currentLoader.defaults.diskCachePolicy != CachePolicy.DISABLED) { + builder.diskCachePolicy(CachePolicy.DISABLED) + + return builder.build() + } + } + return null } /** @@ -223,5 +230,7 @@ fun ImageRequest.Builder.doCoverSetup(context: Context, data: BaseModel): ImageR */ private fun ImageView.getDefaultRequest(): ImageRequest.Builder { return ImageRequest.Builder(context) + .crossfade(true) + .placeholder(android.R.color.transparent) .target(this) } diff --git a/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt b/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt index f59b5a194..328f22daa 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/MosaicFetcher.kt @@ -31,7 +31,7 @@ class MosaicFetcher(private val context: Context) : Fetcher> { val streams = mutableListOf() // Load the streams, the lower-quality MediaStore covers are used simply because using - // the raw ones would make loading far too long. Its not that noticable either. + // the raw ones would make loading far too long. Its not that noticeable either. data.forEach { val stream: InputStream? = context.contentResolver.openInputStream(it)