ultrasonic-app-subsonic-and.../ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ImageLoaderProvider.kt

59 lines
1.8 KiB
Kotlin
Raw Normal View History

package org.moire.ultrasonic.subsonic
import android.content.Context
import androidx.core.content.res.ResourcesCompat
2021-05-27 12:15:56 +02:00
import org.koin.core.component.KoinComponent
import org.koin.core.component.get
2021-06-07 13:17:00 +02:00
import org.koin.core.qualifier.named
import org.moire.ultrasonic.R
import org.moire.ultrasonic.app.UApp
import org.moire.ultrasonic.imageloader.ImageLoader
import org.moire.ultrasonic.imageloader.ImageLoaderConfig
2021-06-07 13:17:00 +02:00
import org.moire.ultrasonic.util.FileUtil
import org.moire.ultrasonic.util.Util
2021-03-01 17:24:25 +01:00
/**
* Handles the lifetime of the Image Loader
*/
2021-05-27 12:15:56 +02:00
class ImageLoaderProvider(val context: Context) : KoinComponent {
private var imageLoader: ImageLoader? = null
2021-06-07 13:17:00 +02:00
private var serverID: String = get(named("ServerID"))
@Synchronized
fun clearImageLoader() {
imageLoader = null
}
@Synchronized
fun getImageLoader(): ImageLoader {
2021-06-07 13:17:00 +02:00
// We need to generate a new ImageLoader if the server has changed...
val currentID = get<String>(named("ServerID"))
if (imageLoader == null || currentID != serverID) {
imageLoader = get()
serverID = currentID
}
return imageLoader!!
}
2021-06-07 13:17:00 +02:00
companion object {
val config by lazy {
var defaultSize = 0
val fallbackImage = ResourcesCompat.getDrawable(
UApp.applicationContext().resources, R.drawable.unknown_album, null
)
// Determine the density-dependent image sizes by taking the fallback album
// image and querying its size.
if (fallbackImage != null) {
defaultSize = fallbackImage.intrinsicHeight
}
ImageLoaderConfig(
Util.getMaxDisplayMetric(),
defaultSize,
FileUtil.getAlbumArtDirectory()
)
}
}
}