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