[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