[Android] Always resize single cover art image and draw overlay icon, if specified

Robert Stone git at videolan.org
Fri Nov 13 07:31:03 CET 2020


vlc-android | branch: 3.3.x | Robert Stone <rhstone at gmail.com> | Wed Nov  4 20:17:27 2020 -0800| [5e11a193d1e58df3449797b3b2a731cea2c7caec] | committer: Nicolas Pomepuy

Always resize single cover art image and draw overlay icon, if specified
Consistently mosaic cover art with two tracks, one with artwork, and one without.

(cherry picked from commit 43292a0e0f27f1d1f39ee74da2599a4ee21bd3e1)

> https://code.videolan.org/videolan/vlc-android/commit/5e11a193d1e58df3449797b3b2a731cea2c7caec
---

 .../org/videolan/vlc/media/MediaSessionBrowser.kt  |  4 +-
 .../org/videolan/vlc/util/ThumbnailsProvider.kt    | 86 ++++++++++++----------
 2 files changed, 49 insertions(+), 41 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt b/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
index 3f8656bad..d78dfd5d2 100644
--- a/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
+++ b/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
@@ -517,13 +517,13 @@ class MediaSessionBrowser : ExtensionManagerActivity {
                 }
                 if (tracks.any { it.artworkMrl != null && it.artworkMrl.isNotEmpty() }) {
                     cover = runBlocking(Dispatchers.IO) {
-                        val iconAddtion = when (key) {
+                        val iconAddition = when (key) {
                             "shuffleAll"-> getBitmapFromDrawable(context, R.drawable.ic_auto_shuffle_circle)
                             "lastAdded"-> getBitmapFromDrawable(context, R.drawable.ic_auto_new_circle)
                             "history"-> getBitmapFromDrawable(context, R.drawable.ic_auto_history_circle)
                             else -> null
                         }
-                        ThumbnailsProvider.getPlaylistImage(key, tracks, 256, iconAddtion)
+                        ThumbnailsProvider.getPlaylistImage(key, tracks, 256, iconAddition)
                     }
                 }
             }
diff --git a/application/vlc-android/src/org/videolan/vlc/util/ThumbnailsProvider.kt b/application/vlc-android/src/org/videolan/vlc/util/ThumbnailsProvider.kt
index 1738f483a..0344d207d 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/ThumbnailsProvider.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/ThumbnailsProvider.kt
@@ -119,57 +119,65 @@ object ThumbnailsProvider {
         val url = mediaList[0].artworkURL
         val isAllSameImage = !mediaList.any { it.artworkURL != url }
 
-        if (isAllSameImage) {
+        val sameImage = if (isAllSameImage) obtainBitmap(mediaList[0], width)
+                ?: return null else null
 
-            return obtainBitmap(mediaList[0], width)
-        }
-
-        val artworks = ArrayList<MediaWrapper>()
-        for (mediaWrapper in mediaList) {
-
-            val artworkAlreadyHere = artworks.any { it.artworkURL == mediaWrapper.artworkURL }
+        val cs = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888)
+        val comboImage = Canvas(cs)
 
-            if (mediaWrapper.artworkURL != null && mediaWrapper.artworkURL.isNotBlank() && !artworkAlreadyHere) {
-                artworks.add(mediaWrapper)
+        if (sameImage != null) {
+            /* Scale the cover art, as obtainBitmap may return a larger or smaller image size */
+            comboImage.drawBitmap(sameImage, Rect(0, 0, sameImage.width, sameImage.height), Rect(0, 0, width, width), null)
+        } else {
+            val artworks = ArrayList<MediaWrapper>()
+            for (mediaWrapper in mediaList) {
+
+                val artworkAlreadyHere = artworks.any { it.artworkURL == mediaWrapper.artworkURL }
+
+                if (mediaWrapper.artworkURL != null && mediaWrapper.artworkURL.isNotBlank() && !artworkAlreadyHere) {
+                    artworks.add(mediaWrapper)
+                }
+                if (artworks.size > 3) {
+                    break
+                }
             }
-            if (artworks.size > 3) {
-                break
+
+            if (artworks.size == 2) {
+                artworks.add(artworks[1])
+                artworks.add(artworks[0])
+            } else if (artworks.size == 3) {
+                artworks.add(artworks[0])
             }
-        }
 
-        if (artworks.size == 2) {
-            artworks.add(artworks[1])
-            artworks.add(artworks[0])
-        } else if (artworks.size == 3) {
-            artworks.add(artworks[0])
-        }
 
+            val images = ArrayList<Bitmap>(4)
+            artworks.forEach {
+                val image = obtainBitmap(it, width / 2)
+                if (image != null) {
+                    images.add(image)
+                }
+                if (images.size >= 4) {
+                    return at forEach
+                }
 
-        val images = ArrayList<Bitmap>(4)
-        artworks.forEach {
-            val image = obtainBitmap(it, width / 2)
-            if (image != null) {
-                images.add(image)
             }
-            if (images.size >= 4) {
-                return at forEach
-            }
-
-        }
 
 
-        for (i in 0..3) {
-            if (images.size < i + 1) {
-                images.add(UiTools.getDefaultAudioDrawable(AppContextProvider.appContext).bitmap)
+            for (i in 0..3) {
+                if (images.size < i + 1) {
+                    images.add(UiTools.getDefaultAudioDrawable(AppContextProvider.appContext).bitmap)
+                    /* Place the first image on the diagonal */
+                    if (images.size == 3) {
+                        images.add(images[0])
+                    }
+                }
             }
-        }
 
-        val cs = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888)
-        val comboImage = Canvas(cs)
-        comboImage.drawBitmap(images[0], Rect(0, 0, images[0].width, images[0].height), Rect(0, 0, width / 2, width / 2), null)
-        comboImage.drawBitmap(images[1], Rect(0, 0, images[1].width, images[1].height), Rect(width / 2, 0, width, width / 2), null)
-        comboImage.drawBitmap(images[2], Rect(0, 0, images[2].width, images[2].height), Rect(0, width / 2, width / 2, width), null)
-        comboImage.drawBitmap(images[3], Rect(0, 0, images[3].width, images[3].height), Rect(width / 2, width / 2, width, width), null)
+            comboImage.drawBitmap(images[0], Rect(0, 0, images[0].width, images[0].height), Rect(0, 0, width / 2, width / 2), null)
+            comboImage.drawBitmap(images[1], Rect(0, 0, images[1].width, images[1].height), Rect(width / 2, 0, width, width / 2), null)
+            comboImage.drawBitmap(images[2], Rect(0, 0, images[2].width, images[2].height), Rect(0, width / 2, width / 2, width), null)
+            comboImage.drawBitmap(images[3], Rect(0, 0, images[3].width, images[3].height), Rect(width / 2, width / 2, width, width), null)
+        }
 
         iconAddition?.let {
             comboImage.drawBitmap(iconAddition, (comboImage.width.toFloat() - iconAddition.width) / 2, (comboImage.height.toFloat() - iconAddition.height) / 2, null)



More information about the Android mailing list