MPVPlayer: Improve track selection and some code cleanup
This commit is contained in:
parent
87edeabb9a
commit
0baef5ec2e
4 changed files with 59 additions and 33 deletions
|
@ -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()
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue