[Android] openMediaNoUi: refactor uri to use getMedia(uri)

Duncan McNamara git at videolan.org
Wed Dec 4 09:00:11 UTC 2024


vlc-android | branch: master | Duncan McNamara <dcn.mcnamara at gmail.com> | Fri Nov 29 11:43:52 2024 +0100| [60c07588431d14639451e03934825dc46f52cb45] | committer: Nicolas Pomepuy

openMediaNoUi: refactor uri to use getMedia(uri)

This is to use getMedia and get a MediaWrapper with meta data from the
medialibrary instead of a bland/empty MediaWrapper.

When opening a media from an other app, if the media wasn't previously
indexed, getMedia will return null, hence the additional use of
getAbstractMediaWrapper(uri). If not the player would just stop without
any warning.

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

 application/vlc-android/src/org/videolan/vlc/StartActivity.kt |  6 +++---
 .../vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt      |  2 +-
 .../vlc-android/src/org/videolan/vlc/media/MediaUtils.kt      | 11 ++++++++---
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/StartActivity.kt b/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
index 6c97819a85..c73e4ffc17 100644
--- a/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
@@ -142,7 +142,7 @@ class StartActivity : FragmentActivity() {
                 var uri: Uri? = FileUtils.getUri(item.uri)
                 if (uri == null && item.text != null) uri = item.text.toString().toUri()
                 if (uri != null) {
-                    MediaUtils.openMediaNoUi(uri)
+                    MediaUtils.openMediaNoUi(this, uri)
                     finish()
                     return
                 }
@@ -287,7 +287,7 @@ class StartActivity : FragmentActivity() {
                 startActivityForResult(intent.setClass(this at StartActivity, VideoPlayerActivity::class.java).apply { putExtra(VideoPlayerActivity.FROM_EXTERNAL, true) }, PROPAGATE_RESULT, Util.getFullScreenBundle())
                 return at launch
             } catch (ex: SecurityException) {
-                intent.data?.let { MediaUtils.openMediaNoUi(it) }
+                intent.data?.let { MediaUtils.openMediaNoUi(this at StartActivity, it) }
             }
             intent.data?.authority == getString(R.string.tv_provider_authority) -> MediaUtils.openMediaNoUiFromTvContent(this at StartActivity, intent.data)
             intent.data?.authority == "skip_to" -> PlaybackService.instance?.playIndex(intent.getIntExtra("index", 0))
@@ -296,7 +296,7 @@ class StartActivity : FragmentActivity() {
                 // As the last option, it is safer to reset the player before playing any media
                 if (PlaybackService.instance?.isPlaying == true)
                     PlaybackService.instance?.playlistManager?.player?.stop()
-                MediaUtils.openMediaNoUi(it)
+                MediaUtils.openMediaNoUi(this at StartActivity, it)
             }
         }
         finish()
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
index c15ad4fddf..3f111fbb20 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
@@ -56,7 +56,7 @@ abstract class BaseActivity : AppCompatActivity() {
     private var baseContextWrappingDelegate: AppCompatDelegate? = null
     private var resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
         if (result.resultCode == Activity.RESULT_OK) {
-            FileUtils.getUri(result.data?.data)?.let { MediaUtils.openMediaNoUi(it) }
+            FileUtils.getUri(result.data?.data)?.let { MediaUtils.openMediaNoUi(this, it) }
         }
     }
 
diff --git a/application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt b/application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
index 8e6c94a1cd..a9cd715151 100644
--- a/application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
+++ b/application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
@@ -7,6 +7,7 @@ import android.content.Intent
 import android.net.Uri
 import android.provider.MediaStore
 import android.provider.OpenableColumns
+import android.util.Log
 import androidx.annotation.WorkerThread
 import androidx.appcompat.app.AppCompatActivity
 import androidx.collection.SimpleArrayMap
@@ -169,8 +170,12 @@ object MediaUtils {
         openMediaNoUi(ctx, media)
     }
 
-    fun openMediaNoUi(uri: Uri) = openMediaNoUi(AppContextProvider.appContext, MLServiceLocator.getAbstractMediaWrapper(uri))
-
+    fun openMediaNoUi(ctx: Context, uri: Uri) = AppScope.launch {
+        var media = ctx.getFromMl { getMedia(uri) }
+        if (media == null)
+            media = MLServiceLocator.getAbstractMediaWrapper(uri)
+        openMediaNoUi(ctx, media)
+    }
     fun openMediaNoUi(context: Context?, media: MediaWrapper?) {
         if (media == null || context == null) return
         object : BaseCallBack(context) {
@@ -470,7 +475,7 @@ object MediaUtils {
                     }
                 } ?: return at launch
                 when (mw) {
-                    is MediaWrapper -> openMediaNoUi(mw.uri)
+                    is MediaWrapper -> openMediaNoUi(context, mw.uri)
                     is Album -> playAlbum(context, mw)
                     is Artist -> playArtist(context, mw)
                 }



More information about the Android mailing list