[Android] Ensure we always restrict images size

Geoffrey Métais git at videolan.org
Wed Mar 13 11:11:29 CET 2019


vlc-android | branch: 3.1.x | Geoffrey Métais <geoffrey.metais at gmail.com> | Thu Mar  7 17:42:08 2019 +0100| [610de8028bae406c70325ea10e36786715c71cb8] | committer: Geoffrey Métais

Ensure we always restrict images size

> https://code.videolan.org/videolan/vlc-android/commit/610de8028bae406c70325ea10e36786715c71cb8
---

 vlc-android/src/org/videolan/vlc/gui/InfoActivity.java |  4 +++-
 .../src/org/videolan/vlc/gui/PlaylistActivity.java     |  2 +-
 .../src/org/videolan/vlc/gui/audio/AudioPlayer.kt      |  3 ++-
 .../src/org/videolan/vlc/gui/helpers/ImageLoader.kt    | 18 ++++++++++++++----
 .../vlc/gui/tv/audioplayer/AudioPlayerActivity.java    |  4 +++-
 vlc-android/src/org/videolan/vlc/util/Kextensions.kt   |  8 +++++++-
 6 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/vlc-android/src/org/videolan/vlc/gui/InfoActivity.java b/vlc-android/src/org/videolan/vlc/gui/InfoActivity.java
index 8edfdd30a..34ad507dd 100644
--- a/vlc-android/src/org/videolan/vlc/gui/InfoActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/InfoActivity.java
@@ -31,6 +31,7 @@ import org.videolan.vlc.gui.helpers.FloatingActionButtonBehavior;
 import org.videolan.vlc.gui.preferences.PreferencesActivity;
 import org.videolan.vlc.gui.video.MediaInfoAdapter;
 import org.videolan.vlc.media.MediaUtils;
+import org.videolan.vlc.util.KextensionsKt;
 import org.videolan.vlc.util.Strings;
 import org.videolan.vlc.util.VLCInstance;
 import org.videolan.vlc.util.WeakHandler;
@@ -48,6 +49,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 
 public class InfoActivity extends AudioPlayerContainerActivity implements View.OnClickListener {
 
+    public final static String TAG = "VLC/InfoActivity";
     public final static String TAG_ITEM = "ML_ITEM";
     public final static String TAG_FAB_VISIBILITY= "FAB";
 
@@ -89,7 +91,7 @@ public class InfoActivity extends AudioPlayerContainerActivity implements View.O
             WorkersKt.runIO(new Runnable() {
                 @Override
                 public void run() {
-                    final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mItem.getArtworkMrl()), 0);
+                    final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mItem.getArtworkMrl()), KextensionsKt.getScreenWidth(InfoActivity.this));
                     if (cover != null) {
                         mBinding.setCover(new BitmapDrawable(InfoActivity.this.getResources(), cover));
                         WorkersKt.runOnMainThread(new Runnable() {
diff --git a/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.java b/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.java
index f94737913..70596cf55 100644
--- a/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.java
@@ -128,7 +128,7 @@ public class PlaylistActivity extends AudioPlayerContainerActivity implements IE
             WorkersKt.runIO(new Runnable() {
                 @Override
                 public void run() {
-                    final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mPlaylist.getArtworkMrl()), 0);
+                    final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mPlaylist.getArtworkMrl()), getResources().getDimensionPixelSize(R.dimen.audio_browser_item_size));
                     if (cover != null) {
                         mBinding.setCover(new BitmapDrawable(PlaylistActivity.this.getResources(), cover));
                         WorkersKt.runOnMainThread(new Runnable() {
diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt b/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt
index 7e0e98fdf..25afb234e 100644
--- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.kt
@@ -263,7 +263,8 @@ class AudioPlayer : Fragment(), PlaylistAdapter.IPlayer, TextWatcher {
                 if (TextUtils.isEmpty(mw.artworkMrl)) {
                     setDefaultBackground()
                 } else {
-                    val blurredCover = withContext(Dispatchers.IO) { UiTools.blurBitmap(AudioUtil.readCoverBitmap(Uri.decode(mw.artworkMrl), binding.contentLayout.width)) }
+                    val width = if (binding.contentLayout.width > 0) binding.contentLayout.width else activity?.getScreenWidth() ?: return at launch
+                    val blurredCover = withContext(Dispatchers.IO) { UiTools.blurBitmap(AudioUtil.readCoverBitmap(Uri.decode(mw.artworkMrl), width)) }
                     if (blurredCover !== null) {
                         val activity = activity as? AudioPlayerContainerActivity
                         if (activity === null) return at launch
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt
index 2493b334e..3724b31d7 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt
@@ -30,6 +30,8 @@ import org.videolan.vlc.util.ThumbnailsProvider
 
 private val sBitmapCache = BitmapCache.getInstance()
 private val sMedialibrary = VLCApplication.getMLInstance()
+ at Volatile
+private var defaultImageWidth = 0
 private const val TAG = "ImageLoader"
 
 @MainThread
@@ -110,15 +112,23 @@ private suspend fun getImage(v: View, item: MediaLibraryItem, binding: ViewDataB
         binding.executePendingBindings()
         binding.addOnRebindCallback(rebindCallbacks!!)
     }
-    val image = if (!bindChanged) obtainBitmap(item, v.width) else null
+    val width = when {
+        v.width > 0 -> v.width
+        defaultImageWidth > 0 -> defaultImageWidth
+        else -> {
+            defaultImageWidth = v.context.resources.getDimensionPixelSize(if (v is ImageCardView) R.dimen.tv_grid_card_thumb_width else R.dimen.audio_browser_item_size)
+            defaultImageWidth
+        }
+    }
+    val image = if (!bindChanged) obtainBitmap(item, width) else null
     if (!bindChanged) updateImageView(image, v, binding)
     binding?.removeOnRebindCallback(rebindCallbacks!!)
 }
 
 private suspend fun obtainBitmap(item: MediaLibraryItem, width: Int) = withContext(Dispatchers.IO) {
-    when {
-        item is MediaWrapper -> ThumbnailsProvider.getMediaThumbnail(item, width)
-        item is Folder -> ThumbnailsProvider.getFolderThumbnail(item, width)
+    when (item) {
+        is MediaWrapper -> ThumbnailsProvider.getMediaThumbnail(item, width)
+        is Folder -> ThumbnailsProvider.getFolderThumbnail(item, width)
         else -> AudioUtil.readCoverBitmap(Uri.decode(item.artworkMrl), width)
     }
 }
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java b/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
index 312f32a23..74185ccc9 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
@@ -43,6 +43,7 @@ import org.videolan.vlc.gui.tv.browser.BaseTvActivity;
 import org.videolan.vlc.media.MediaUtils;
 import org.videolan.vlc.util.AndroidDevices;
 import org.videolan.vlc.util.Constants;
+import org.videolan.vlc.util.KextensionsKt;
 import org.videolan.vlc.util.Settings;
 import org.videolan.vlc.util.WorkersKt;
 import org.videolan.vlc.viewmodels.PlayerState;
@@ -132,10 +133,11 @@ public class AudioPlayerActivity extends BaseTvActivity {
     }
 
     private void updateBackground() {
+        final int width = mBinding.albumCover.getWidth() > 0 ? mBinding.albumCover.getWidth() : KextensionsKt.getScreenWidth(this);
         WorkersKt.runIO(new Runnable() {
             @Override
             public void run() {
-                final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mCurrentCoverArt), mBinding.albumCover.getWidth());
+                final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mCurrentCoverArt), width);
                 final Bitmap blurredCover = cover != null ? UiTools.blurBitmap(cover) : null;
                 WorkersKt.runOnMainThread(new Runnable() {
                     @Override
diff --git a/vlc-android/src/org/videolan/vlc/util/Kextensions.kt b/vlc-android/src/org/videolan/vlc/util/Kextensions.kt
index 8e5dd56ca..ffd9f0899 100644
--- a/vlc-android/src/org/videolan/vlc/util/Kextensions.kt
+++ b/vlc-android/src/org/videolan/vlc/util/Kextensions.kt
@@ -1,9 +1,11 @@
 package org.videolan.vlc.util
 
+import android.app.Activity
 import android.content.Context
 import android.content.SharedPreferences
 import android.content.res.Resources
 import android.net.Uri
+import android.util.DisplayMetrics
 import android.widget.TextView
 import androidx.appcompat.widget.AppCompatTextView
 import androidx.core.text.PrecomputedTextCompat
@@ -25,7 +27,6 @@ import java.net.URI
 import java.net.URISyntaxException
 import java.util.*
 import kotlin.coroutines.resume
-import android.util.DisplayMetrics
 
 
 
@@ -158,3 +159,8 @@ fun Int.toPixel(): Int {
     val px = toFloat() * (metrics.densityDpi / 160f)
     return Math.round(px)
 }
+
+fun Activity.getScreenWidth() : Int {
+    val dm = DisplayMetrics().also { windowManager.defaultDisplay.getMetrics(it) }
+    return dm.widthPixels
+}



More information about the Android mailing list