[Android] Allow mocking ML entities for compose previews

Nicolas Pomepuy git at videolan.org
Mon Jun 15 12:40:15 UTC 2026


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Jun 15 09:33:31 2026 +0200| [c31619ba39f2316993eb8161466bf1f7cef1d2ed] | committer: Nicolas Pomepuy

Allow mocking ML entities for compose previews

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

 .../src/org/videolan/medialibrary/MLContextTools.java     |  7 ++++++-
 medialibrary/src/org/videolan/medialibrary/Tools.java     |  8 +++++++-
 .../org/videolan/medialibrary/interfaces/media/Album.java | 11 ++++++++++-
 .../videolan/medialibrary/interfaces/media/Artist.java    | 15 +++++++++++++--
 .../org/videolan/medialibrary/stubs/StubDataSource.java   |  3 +--
 5 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/medialibrary/src/org/videolan/medialibrary/MLContextTools.java b/medialibrary/src/org/videolan/medialibrary/MLContextTools.java
index 7ff6efbc14..7bc6fa4c1b 100644
--- a/medialibrary/src/org/videolan/medialibrary/MLContextTools.java
+++ b/medialibrary/src/org/videolan/medialibrary/MLContextTools.java
@@ -31,7 +31,12 @@ public final class MLContextTools {
     private Context mContext;
 
     public void setContext(Context context) {
-        this.mContext = context.getApplicationContext();
+        if (context == null) {
+            this.mContext = null;
+            return;
+        }
+        Context appContext = context.getApplicationContext();
+        this.mContext = appContext != null ? appContext : context;
     }
 
     public static MLContextTools getInstance() {
diff --git a/medialibrary/src/org/videolan/medialibrary/Tools.java b/medialibrary/src/org/videolan/medialibrary/Tools.java
index 5dc2d4bdfb..6b7c0cb136 100644
--- a/medialibrary/src/org/videolan/medialibrary/Tools.java
+++ b/medialibrary/src/org/videolan/medialibrary/Tools.java
@@ -35,7 +35,13 @@ public class Tools {
         if (!TextUtils.equals(uri.getScheme(), "file") || !uri.getPath().startsWith("/sdcard"))
             return uri;
         String path = uri.toString();
-        return Uri.parse(path.replace("/sdcard", Environment.getExternalStorageDirectory().getPath()));
+        String externalPath;
+        try {
+            externalPath = Environment.getExternalStorageDirectory().getPath();
+        } catch (Exception e) {
+            externalPath = "/sdcard";
+        }
+        return Uri.parse(path.replace("/sdcard", externalPath));
     }
 
     public static boolean isArrayEmpty(@Nullable Object[] array) {
diff --git a/medialibrary/src/org/videolan/medialibrary/interfaces/media/Album.java b/medialibrary/src/org/videolan/medialibrary/interfaces/media/Album.java
index 6e422edd30..9fb64cc20a 100644
--- a/medialibrary/src/org/videolan/medialibrary/interfaces/media/Album.java
+++ b/medialibrary/src/org/videolan/medialibrary/interfaces/media/Album.java
@@ -15,7 +15,16 @@ import org.videolan.medialibrary.media.MediaLibraryItem;
 
 public abstract class Album extends MediaLibraryItem {
     public static class SpecialRes {
-        public static String UNKNOWN_ALBUM = MLContextTools.getInstance().getContext().getString(R.string.unknown_album);
+        public static String UNKNOWN_ALBUM;
+
+        static {
+            android.content.Context context = MLContextTools.getInstance().getContext();
+            if (context != null) {
+                UNKNOWN_ALBUM = context.getString(R.string.unknown_album);
+            } else {
+                UNKNOWN_ALBUM = "Unknown Album";
+            }
+        }
     }
 
     protected int releaseYear;
diff --git a/medialibrary/src/org/videolan/medialibrary/interfaces/media/Artist.java b/medialibrary/src/org/videolan/medialibrary/interfaces/media/Artist.java
index 21e9c92c5a..532d087ccb 100644
--- a/medialibrary/src/org/videolan/medialibrary/interfaces/media/Artist.java
+++ b/medialibrary/src/org/videolan/medialibrary/interfaces/media/Artist.java
@@ -20,8 +20,19 @@ abstract public class Artist extends MediaLibraryItem {
     private int presentTracksCount;
 
     public static class SpecialRes {
-        public static String UNKNOWN_ARTIST = MLContextTools.getInstance().getContext().getString(R.string.unknown_artist);
-        public static String VARIOUS_ARTISTS = MLContextTools.getInstance().getContext().getString(R.string.various_artists);
+        public static String UNKNOWN_ARTIST;
+        public static String VARIOUS_ARTISTS;
+
+        static {
+            android.content.Context context = MLContextTools.getInstance().getContext();
+            if (context != null) {
+                UNKNOWN_ARTIST = context.getString(R.string.unknown_artist);
+                VARIOUS_ARTISTS = context.getString(R.string.various_artists);
+            } else {
+                UNKNOWN_ARTIST = "Unknown Artist";
+                VARIOUS_ARTISTS = "Various Artists";
+            }
+        }
     }
 
     public Artist(long id, String name, String shortBio, String artworkMrl, String musicBrainzId, int albumsCount, int tracksCount, int presentTracksCount, boolean isFavorite) {
diff --git a/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java b/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java
index 65cd2a45b0..1647ebb22c 100644
--- a/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java
+++ b/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java
@@ -10,7 +10,6 @@ import static org.videolan.medialibrary.interfaces.Medialibrary.SORT_INSERTIONDA
 import static org.videolan.medialibrary.interfaces.Medialibrary.SORT_LASTMODIFICATIONDATE;
 import static org.videolan.medialibrary.interfaces.Medialibrary.SORT_RELEASEDATE;
 
-import android.os.Environment;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -55,7 +54,7 @@ public class StubDataSource {
     ArrayList<Folder> mFolders = new ArrayList<>();
     ArrayList<String> mDevices = new ArrayList<>();
 
-    private static String baseMrl = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
+    private static String baseMrl = "/sdcard/";
 
     public static AtomicLong uuid = new AtomicLong(2);
 



More information about the Android mailing list