97 lines
2.9 KiB
Kotlin
97 lines
2.9 KiB
Kotlin
package org.moire.ultrasonic.subsonic
|
|
|
|
import android.view.View
|
|
import android.widget.ImageView
|
|
import androidx.core.content.res.ResourcesCompat
|
|
import org.moire.ultrasonic.R
|
|
import org.moire.ultrasonic.app.UApp
|
|
import org.moire.ultrasonic.domain.MusicDirectory
|
|
import org.moire.ultrasonic.subsonic.loader.image.ImageRequest
|
|
import org.moire.ultrasonic.subsonic.loader.image.SubsonicImageLoader
|
|
import org.moire.ultrasonic.util.ImageLoader
|
|
import org.moire.ultrasonic.util.Util
|
|
|
|
/**
|
|
* Proxy between [SubsonicImageLoader] and the main App.
|
|
* Needed to calculate values like the maximum image size,
|
|
* which we can't outside the main package.
|
|
*/
|
|
|
|
class SubsonicImageLoaderProxy(
|
|
private val subsonicImageLoader: SubsonicImageLoader
|
|
) : ImageLoader {
|
|
|
|
private var imageSizeLarge = Util.getMaxDisplayMetric()
|
|
private var imageSizeDefault = 0
|
|
|
|
override fun loadImage(
|
|
view: View?,
|
|
entry: MusicDirectory.Entry?,
|
|
large: Boolean,
|
|
size: Int,
|
|
crossFade: Boolean,
|
|
highQuality: Boolean
|
|
) {
|
|
return loadImage(view, entry, large, size, crossFade, highQuality, -1)
|
|
}
|
|
|
|
override fun loadImage(
|
|
view: View?,
|
|
entry: MusicDirectory.Entry?,
|
|
large: Boolean,
|
|
size: Int,
|
|
crossFade: Boolean,
|
|
highQuality: Boolean,
|
|
defaultResourceId: Int
|
|
) {
|
|
val id = entry?.coverArt
|
|
var requestedSize = size
|
|
val unknownImageId =
|
|
if (defaultResourceId == -1) R.drawable.unknown_album
|
|
else defaultResourceId
|
|
|
|
if (requestedSize <= 0) {
|
|
requestedSize = if (large) imageSizeLarge else imageSizeDefault
|
|
}
|
|
|
|
if (id != null && id.isNotEmpty() && view is ImageView) {
|
|
val request = ImageRequest.CoverArt(
|
|
id, view, requestedSize,
|
|
placeHolderDrawableRes = unknownImageId,
|
|
errorDrawableRes = unknownImageId
|
|
)
|
|
subsonicImageLoader.load(request)
|
|
}
|
|
}
|
|
|
|
override fun loadAvatarImage(
|
|
view: View?,
|
|
username: String?,
|
|
large: Boolean,
|
|
size: Int,
|
|
crossFade: Boolean,
|
|
highQuality: Boolean
|
|
) {
|
|
if (username != null && username.isNotEmpty() && view is ImageView) {
|
|
val request = ImageRequest.Avatar(
|
|
username, view,
|
|
placeHolderDrawableRes = R.drawable.ic_contact_picture,
|
|
errorDrawableRes = R.drawable.ic_contact_picture
|
|
)
|
|
subsonicImageLoader.load(request)
|
|
}
|
|
}
|
|
|
|
init {
|
|
val default = 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 (default != null) {
|
|
imageSizeDefault = default.intrinsicHeight
|
|
}
|
|
}
|
|
}
|