Browse Source

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.
merge-requests/2174/head
Duncan McNamara 1 year ago
committed by Nicolas Pomepuy
parent
commit
60c0758843
  1. 6
      application/vlc-android/src/org/videolan/vlc/StartActivity.kt
  2. 2
      application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
  3. 11
      application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt

6
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@StartActivity, VideoPlayerActivity::class.java).apply { putExtra(VideoPlayerActivity.FROM_EXTERNAL, true) }, PROPAGATE_RESULT, Util.getFullScreenBundle())
return@launch
} catch (ex: SecurityException) {
intent.data?.let { MediaUtils.openMediaNoUi(it) }
intent.data?.let { MediaUtils.openMediaNoUi(this@StartActivity, it) }
}
intent.data?.authority == getString(R.string.tv_provider_authority) -> MediaUtils.openMediaNoUiFromTvContent(this@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@StartActivity, it)
}
}
finish()

2
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) }
}
}

11
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@launch
when (mw) {
is MediaWrapper -> openMediaNoUi(mw.uri)
is MediaWrapper -> openMediaNoUi(context, mw.uri)
is Album -> playAlbum(context, mw)
is Artist -> playArtist(context, mw)
}

Loading…
Cancel
Save