From c0b6500b47174581cc7628458fae7d226f355393 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 28 Jun 2018 22:03:47 +0200 Subject: [PATCH] Provide configuration for image load request. Signed-off-by: Yahor Berdnikau --- .../loader/image/SubsonicImageLoader.kt | 39 +++++++++++++++++-- .../subsonic/SubsonicImageLoaderProxy.kt | 11 ++++-- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt b/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt index 6a3225b4..0f73ae2f 100644 --- a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt +++ b/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt @@ -6,15 +6,46 @@ import com.squareup.picasso.Picasso import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient class SubsonicImageLoader( - private val context: Context, + context: Context, apiClient: SubsonicAPIClient ) { private val picasso = Picasso.Builder(context) .addRequestHandler(CoverArtRequestHandler(apiClient)) .build().apply { setIndicatorsEnabled(BuildConfig.DEBUG) } - fun loadCoverArt(entityId: String, view: ImageView) { - picasso.load(createLoadCoverArtRequest(entityId)) - .into(view) + fun load(request: ImageRequest) = when (request) { + is ImageRequest.CoverArt -> loadCoverArt(request) + } + + private fun loadCoverArt(request: ImageRequest.CoverArt) { + picasso.load(createLoadCoverArtRequest(request.entityId)) + .apply { + if (request.placeHolderDrawableRes != null) { + placeholder(request.placeHolderDrawableRes) + } + } + .apply { + if (request.errorDrawableRes != null) { + error(request.errorDrawableRes) + } + } + .into(request.imageView) } } + +sealed class ImageRequest( + val placeHolderDrawableRes: Int? = null, + val errorDrawableRes: Int? = null, + val imageView: ImageView +) { + class CoverArt( + val entityId: String, + imageView: ImageView, + placeHolderDrawableRes: Int? = null, + errorDrawableRes: Int? = null + ) : ImageRequest( + placeHolderDrawableRes, + errorDrawableRes, + imageView + ) +} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/SubsonicImageLoaderProxy.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/SubsonicImageLoaderProxy.kt index 5412cf53..83fb4d83 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/SubsonicImageLoaderProxy.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/SubsonicImageLoaderProxy.kt @@ -2,7 +2,9 @@ package org.moire.ultrasonic.subsonic import android.view.View import android.widget.ImageView +import org.moire.ultrasonic.R 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.LegacyImageLoader @@ -30,10 +32,13 @@ class SubsonicImageLoaderProxy( if (id != null && view != null && view is ImageView) { - subsonicImageLoader.loadCoverArt( - entityId = id, - view = view + val request = ImageRequest.CoverArt( + id, + view, + placeHolderDrawableRes = R.drawable.unknown_album, + errorDrawableRes = R.drawable.unknown_album ) + subsonicImageLoader.load(request) } } }