[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