From 14fc47913edae76f5bc816c9b81f30494eb96702 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Thu, 31 Dec 2020 19:29:38 -0700 Subject: [PATCH] Disable disk caching when using MediaStore Since the MediaStore covers are already cached by the android system, disable the auto-caching that Coil uses to save space. --- .../java/org/oxycblt/auxio/MainActivity.kt | 4 ++++ .../java/org/oxycblt/auxio/coil/CoilUtils.kt | 22 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 428f2a839..c935d5e3b 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -8,6 +8,8 @@ import android.view.WindowInsets import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.databinding.DataBindingUtil +import coil.Coil +import org.oxycblt.auxio.coil.createImageLoader import org.oxycblt.auxio.databinding.ActivityMainBinding import org.oxycblt.auxio.playback.PlaybackService import org.oxycblt.auxio.settings.SettingsManager @@ -39,6 +41,8 @@ class MainActivity : AppCompatActivity() { if (isEdgeOn()) { doEdgeToEdgeSetup(binding) } + + Coil.setImageLoader(createImageLoader(applicationContext)) } 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 fb22f9baa..99c9caf43 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt @@ -3,10 +3,13 @@ package org.oxycblt.auxio.coil import android.content.Context import android.graphics.Bitmap import android.net.Uri +import android.util.Log import android.widget.ImageView import androidx.core.graphics.drawable.toBitmap import androidx.databinding.BindingAdapter import coil.Coil +import coil.ImageLoader +import coil.request.CachePolicy import coil.request.ImageRequest import org.oxycblt.auxio.R import org.oxycblt.auxio.logE @@ -24,6 +27,25 @@ val settingsManager: SettingsManager by lazy { SettingsManager.getInstance() } +/** + * Create the custom [ImageLoader] used by Auxio, which doesn't cache album art to the disk by default. + */ +fun createImageLoader(context: Context): ImageLoader { + Log.d("createImageLoader", "Creating image loader.") + + val builder = ImageLoader.Builder(context) + .crossfade(true) + + // To save memory/improve speed, allow disc caching when if quality covers are enabled. + if (settingsManager.useQualityCovers) { + builder.diskCachePolicy(CachePolicy.ENABLED) + } else { + builder.diskCachePolicy(CachePolicy.DISABLED) + } + + return builder.build() +} + /** * Get a bitmap for a song. onDone will be called when the bitmap is loaded. * **Do not use this on the UI elements, instead use the Binding Adapters.** diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f44636b4e..4a73c0ce3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,7 +68,7 @@ Turn off to save memory usage Ignore MediaStore covers - Results in higher quality album covers, but causes slower loading times + Results in higher quality album covers at the cost of slower loading times and higher memory usage Use alternate notification action Prefer repeat mode action