2020-07-26 21:16:06 +02:00
|
|
|
package sushi.hardcore.droidfs.file_viewers
|
|
|
|
|
2020-08-07 19:25:16 +02:00
|
|
|
import android.view.WindowManager
|
2021-09-01 19:31:25 +02:00
|
|
|
import com.google.android.exoplayer2.*
|
2021-10-17 19:43:03 +02:00
|
|
|
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
|
2021-03-17 21:11:14 +01:00
|
|
|
import com.google.android.exoplayer2.source.MediaSource
|
2020-07-26 21:16:06 +02:00
|
|
|
import com.google.android.exoplayer2.source.ProgressiveMediaSource
|
2021-12-21 10:50:26 +01:00
|
|
|
import com.google.android.exoplayer2.video.VideoSize
|
2023-02-06 10:52:51 +01:00
|
|
|
import sushi.hardcore.droidfs.Constants
|
2020-07-26 21:16:06 +02:00
|
|
|
import sushi.hardcore.droidfs.R
|
2021-11-09 11:12:09 +01:00
|
|
|
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
|
2022-03-05 19:23:48 +01:00
|
|
|
import java.io.File
|
2020-07-26 21:16:06 +02:00
|
|
|
|
|
|
|
abstract class MediaPlayer: FileViewerActivity() {
|
2021-11-09 16:27:59 +01:00
|
|
|
private lateinit var player: ExoPlayer
|
2020-07-26 21:16:06 +02:00
|
|
|
|
|
|
|
override fun viewFile() {
|
2022-03-05 12:51:02 +01:00
|
|
|
supportActionBar?.hide()
|
2020-08-08 14:09:34 +02:00
|
|
|
initializePlayer()
|
2022-03-05 19:23:48 +01:00
|
|
|
refreshFileName()
|
2020-07-26 21:16:06 +02:00
|
|
|
}
|
|
|
|
|
2021-11-09 16:27:59 +01:00
|
|
|
abstract fun bindPlayer(player: ExoPlayer)
|
2022-03-05 19:23:48 +01:00
|
|
|
abstract fun onNewFileName(fileName: String)
|
2021-12-21 10:50:26 +01:00
|
|
|
protected open fun onVideoSizeChanged(width: Int, height: Int) {}
|
2020-07-26 21:16:06 +02:00
|
|
|
|
2021-03-17 21:11:14 +01:00
|
|
|
private fun createMediaSource(filePath: String): MediaSource {
|
2022-06-18 21:13:16 +02:00
|
|
|
val dataSourceFactory = EncryptedVolumeDataSource.Factory(encryptedVolume, filePath)
|
2021-10-17 19:43:03 +02:00
|
|
|
return ProgressiveMediaSource.Factory(dataSourceFactory, DefaultExtractorsFactory())
|
2023-02-06 10:52:51 +01:00
|
|
|
.createMediaSource(MediaItem.fromUri(Constants.FAKE_URI))
|
2021-03-17 21:11:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun initializePlayer(){
|
2022-03-23 14:56:15 +01:00
|
|
|
player = ExoPlayer.Builder(this).setSeekForwardIncrementMs(5000).build()
|
2021-03-17 21:11:14 +01:00
|
|
|
bindPlayer(player)
|
|
|
|
createPlaylist()
|
|
|
|
for (e in mappedPlaylist) {
|
|
|
|
player.addMediaSource(createMediaSource(e.fullPath))
|
|
|
|
}
|
|
|
|
player.repeatMode = Player.REPEAT_MODE_ALL
|
|
|
|
player.seekToDefaultPosition(currentPlaylistIndex)
|
2020-07-26 21:16:06 +02:00
|
|
|
player.playWhenReady = true
|
2021-06-07 13:23:11 +02:00
|
|
|
player.addListener(object : Player.Listener{
|
2021-12-21 10:50:26 +01:00
|
|
|
override fun onVideoSizeChanged(videoSize: VideoSize) {
|
|
|
|
onVideoSizeChanged(videoSize.width, videoSize.height)
|
2021-04-05 12:42:35 +02:00
|
|
|
}
|
2021-09-01 19:31:25 +02:00
|
|
|
override fun onPlayerError(error: PlaybackException) {
|
2023-02-28 22:50:59 +01:00
|
|
|
CustomAlertDialogBuilder(this@MediaPlayer, theme)
|
2021-09-01 19:31:25 +02:00
|
|
|
.setTitle(R.string.error)
|
|
|
|
.setMessage(getString(R.string.playing_failed, error.errorCodeName))
|
|
|
|
.setCancelable(false)
|
|
|
|
.setPositiveButton(R.string.ok) { _, _ -> goBackToExplorer()}
|
|
|
|
.show()
|
2020-07-26 21:16:06 +02:00
|
|
|
}
|
2020-08-07 19:25:16 +02:00
|
|
|
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
|
|
|
if (isPlaying){
|
|
|
|
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|
|
|
} else {
|
|
|
|
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|
|
|
}
|
|
|
|
}
|
2022-09-23 12:09:22 +02:00
|
|
|
|
|
|
|
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
2023-03-13 17:10:06 +01:00
|
|
|
if (player.repeatMode != Player.REPEAT_MODE_ONE) {
|
|
|
|
playlistNext(player.currentMediaItemIndex == (currentPlaylistIndex + 1) % mappedPlaylist.size)
|
|
|
|
refreshFileName()
|
|
|
|
}
|
2021-03-17 21:11:14 +01:00
|
|
|
}
|
2020-07-26 21:16:06 +02:00
|
|
|
})
|
2021-03-17 21:11:14 +01:00
|
|
|
player.prepare()
|
2020-07-26 21:16:06 +02:00
|
|
|
}
|
|
|
|
|
2021-03-17 21:11:14 +01:00
|
|
|
override fun onDestroy() {
|
|
|
|
super.onDestroy()
|
2020-07-26 21:16:06 +02:00
|
|
|
if (::player.isInitialized) {
|
|
|
|
player.release()
|
|
|
|
}
|
|
|
|
}
|
2022-03-05 19:23:48 +01:00
|
|
|
|
|
|
|
private fun refreshFileName() {
|
|
|
|
onNewFileName(File(filePath).name)
|
|
|
|
}
|
2020-07-26 21:16:06 +02:00
|
|
|
}
|