[Android] Display the images in the cards and backdrop for images files on TV
Nicolas Pomepuy
git at videolan.org
Tue Dec 3 17:57:43 UTC 2024
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Dec 3 12:46:05 2024 +0100| [1b5f2fa2463d3d9c415e8a72d34d63f9d3dca80b] | committer: Nicolas Pomepuy
Display the images in the cards and backdrop for images files on TV
> https://code.videolan.org/videolan/vlc-android/commit/1b5f2fa2463d3d9c415e8a72d34d63f9d3dca80b
---
.../org/videolan/television/ui/CardPresenter.kt | 27 +++++++++++++++++++---
.../main/java/org/videolan/television/ui/TvUtil.kt | 9 ++++++++
2 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/application/television/src/main/java/org/videolan/television/ui/CardPresenter.kt b/application/television/src/main/java/org/videolan/television/ui/CardPresenter.kt
index 0932ad0e33..45f2bf810c 100644
--- a/application/television/src/main/java/org/videolan/television/ui/CardPresenter.kt
+++ b/application/television/src/main/java/org/videolan/television/ui/CardPresenter.kt
@@ -32,11 +32,16 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.content.ContextCompat
+import androidx.fragment.app.FragmentActivity
import androidx.leanback.widget.ImageCardView
import androidx.leanback.widget.Presenter
+import androidx.lifecycle.lifecycleScope
import androidx.vectordrawable.graphics.drawable.Animatable2Compat
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import org.videolan.medialibrary.Tools
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.DummyItem
@@ -52,7 +57,7 @@ import org.videolan.vlc.gui.helpers.*
public const val FAVORITE_FLAG = 1000
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
-class CardPresenter(private val context: Activity, private val isPoster: Boolean = false, private val fromHistory:Boolean = false) : Presenter() {
+class CardPresenter(private val context: FragmentActivity, private val isPoster: Boolean = false, private val fromHistory:Boolean = false) : Presenter() {
private var seenMediaMarkerVisible = true
private var sDefaultCardImage: Drawable? = VectorDrawableCompat.create(context.resources, R.drawable.ic_default_cone, context.theme)
@@ -94,8 +99,24 @@ class CardPresenter(private val context: Activity, private val isPoster: Boolean
loadPlaylistImageWithWidth(cardView.mainImageView, item, imageDefaultWidth.toInt(), true)
}
noArt -> {
- cardView.mainImageView.scaleType = ImageView.ScaleType.CENTER_INSIDE
- cardView.mainImage = BitmapDrawable(cardView.resources, getDefaultImage(item))
+ if (item is MediaWrapper) {
+ context.lifecycleScope.launch {
+ val bitmap = withContext(Dispatchers.IO) {
+ AudioUtil.fetchCoverBitmap(item.uri.toString(), 512)
+ }?.let { BitmapDrawable(cardView.resources, it) }
+ if (bitmap != null) {
+ cardView.mainImageView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ cardView.mainImage = bitmap
+ } else {
+ cardView.mainImageView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ cardView.mainImage = BitmapDrawable(cardView.resources, getDefaultImage(item))
+ }
+ }
+ } else {
+ cardView.mainImageView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ cardView.mainImage =
+ BitmapDrawable(cardView.resources, getDefaultImage(item))
+ }
}
else -> loadImage(cardView, item)
}
diff --git a/application/television/src/main/java/org/videolan/television/ui/TvUtil.kt b/application/television/src/main/java/org/videolan/television/ui/TvUtil.kt
index 3a598dc9f0..c897e01f8f 100644
--- a/application/television/src/main/java/org/videolan/television/ui/TvUtil.kt
+++ b/application/television/src/main/java/org/videolan/television/ui/TvUtil.kt
@@ -311,6 +311,15 @@ fun CoroutineScope.updateBackground(activity: Activity, bm: BackgroundManager?,
}
if (!isActive) return at launch
blurred?.let { bm.drawable = BitmapDrawable(activity.resources, it) }
+ } else if (item is MediaWrapper && item.type == MediaWrapper.TYPE_ALL) {
+ val blurred = withContext(Dispatchers.IO) {
+ var cover: Bitmap? = AudioUtil.fetchCoverBitmap(item.uri.toString(), 512)
+ ?: return at withContext null
+ cover = cover?.let { BitmapUtil.centerCrop(it, it.width, (it.width / screenRatio).toInt()) }
+ UiTools.blurBitmap(cover, 10f)
+ }
+ if (!isActive) return at launch
+ blurred?.let { bm.drawable = BitmapDrawable(activity.resources, it) }
}
} else if (item is MediaMetadataWithImages) launch {
val blurred = withContext(Dispatchers.IO) {
More information about the Android
mailing list