MPVPlayer: Improve track selection and some code cleanup

This commit is contained in:
jarnedemeulemeester 2021-09-17 11:55:35 +02:00
parent 87edeabb9a
commit 0baef5ec2e
No known key found for this signature in database
GPG key ID: B61B7B150DB6A6D2
4 changed files with 59 additions and 33 deletions

View file

@ -48,6 +48,12 @@ class PlayerActivity : AppCompatActivity() {
val audioButton = binding.playerView.findViewById<ImageButton>(R.id.btn_audio_track)
val subtitleButton = binding.playerView.findViewById<ImageButton>(R.id.btn_subtitle)
audioButton.isEnabled = false
audioButton.imageAlpha = 75
subtitleButton.isEnabled = false
subtitleButton.imageAlpha = 75
audioButton.setOnClickListener {
when (viewModel.player) {
is MPVPlayer -> {
@ -110,6 +116,15 @@ class PlayerActivity : AppCompatActivity() {
}
}
viewModel.fileLoaded.observe(this, {
if (it) {
audioButton.isEnabled = true
audioButton.imageAlpha = 255
subtitleButton.isEnabled = true
subtitleButton.imageAlpha = 255
}
})
viewModel.navigateBack.observe(this, {
if (it) {
onBackPressed()

View file

@ -11,40 +11,50 @@ import java.lang.IllegalStateException
class TrackSelectionDialogFragment(
private val type: String,
private val viewModel: PlayerActivityViewModel
): DialogFragment() {
) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val trackNames: List<String>
when (type) {
TrackType.AUDIO -> {
trackNames = viewModel.currentAudioTracks.map {
if (it.title.isEmpty()) {
"${it.lang} - ${it.codec}"
trackNames = viewModel.currentAudioTracks.map { track ->
if (track.title.isEmpty()) {
"${track.lang} - ${track.codec}"
} else {
"${it.title} - ${it.lang} - ${it.codec}"
"${track.title} - ${track.lang} - ${track.codec}"
}
}
return activity?.let {
val builder = AlertDialog.Builder(it)
return activity?.let { activity ->
val builder = AlertDialog.Builder(activity)
builder.setTitle("Select audio track")
.setItems(trackNames.toTypedArray()) { _, which ->
viewModel.switchToTrack(TrackType.AUDIO, viewModel.currentAudioTracks[which])
.setSingleChoiceItems(
trackNames.toTypedArray(),
viewModel.currentAudioTracks.indexOfFirst { it.selected }) { _, which ->
viewModel.switchToTrack(
TrackType.AUDIO,
viewModel.currentAudioTracks[which]
)
}
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
TrackType.SUBTITLE -> {
trackNames = viewModel.currentSubtitleTracks.map {
if (it.title.isEmpty()) {
"${it.lang} - ${it.codec}"
trackNames = viewModel.currentSubtitleTracks.map { track ->
if (track.title.isEmpty()) {
"${track.lang} - ${track.codec}"
} else {
"${it.title} - ${it.lang} - ${it.codec}"
"${track.title} - ${track.lang} - ${track.codec}"
}
}
return activity?.let {
val builder = AlertDialog.Builder(it)
return activity?.let { activity ->
val builder = AlertDialog.Builder(activity)
builder.setTitle("Select subtitle track")
.setItems(trackNames.toTypedArray()) { _, which ->
viewModel.switchToTrack(TrackType.SUBTITLE, viewModel.currentSubtitleTracks[which])
.setSingleChoiceItems(
trackNames.toTypedArray(),
viewModel.currentSubtitleTracks.indexOfFirst { it.selected }) { _, which ->
viewModel.switchToTrack(
TrackType.SUBTITLE,
viewModel.currentSubtitleTracks[which]
)
}
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")

View file

@ -1285,7 +1285,8 @@ class MPVPlayer(
COMMAND_GET_MEDIA_ITEMS_METADATA,
COMMAND_CHANGE_MEDIA_ITEMS,
COMMAND_SET_VIDEO_SURFACE,
COMMAND_SEEK_FORWARD
COMMAND_SEEK_FORWARD,
COMMAND_SEEK_BACK
)
.build()

View file

@ -39,6 +39,9 @@ constructor(
var currentAudioTracks: MutableList<MPVPlayer.Companion.Track> = mutableListOf()
var currentSubtitleTracks: MutableList<MPVPlayer.Companion.Track> = mutableListOf()
private val _fileLoaded = MutableLiveData(false)
val fileLoaded: LiveData<Boolean> = _fileLoaded
private var items: Array<PlayerItem> = arrayOf()
val trackSelector = DefaultTrackSelector(application)
@ -96,16 +99,17 @@ constructor(
Timber.e(e)
}
val useMpv = sp.getBoolean("mpv_player", false)
if (useMpv) {
player.setMediaItem(mediaItems[0])
player.prepare()
player.play()
} else {
player.setMediaItems(mediaItems, currentWindow, items[0].playbackPosition)
player.playWhenReady = playWhenReady
player.prepare()
when (player) {
is MPVPlayer -> {
player.setMediaItem(mediaItems[0])
player.prepare()
player.play()
}
is SimpleExoPlayer -> {
player.setMediaItems(mediaItems, currentWindow, items[0].playbackPosition)
player.playWhenReady = playWhenReady
player.prepare()
}
}
}
@ -198,10 +202,8 @@ constructor(
}
}
}
is SimpleExoPlayer -> {
Timber.d(player.currentTrackGroups.length.toString())
}
}
_fileLoaded.value = true
}
ExoPlayer.STATE_ENDED -> {
stateString = "ExoPlayer.STATE_ENDED -"
@ -220,8 +222,6 @@ constructor(
fun switchToTrack(trackType: String, track: MPVPlayer.Companion.Track) {
if (player is MPVPlayer) {
player.selectTrack(trackType, isExternal = false, index = track.ffIndex)
} else if (player is SimpleExoPlayer) {
}
}
}