Using VideoViewer for audio files as well (for now)

This commit is contained in:
Sylvain Berfini 2021-03-31 17:52:50 +02:00
parent d4229711e3
commit 3b8e83e1ed
4 changed files with 44 additions and 30 deletions

View file

@ -384,6 +384,15 @@ internal fun DetailChatRoomFragment.navigateToVideoFileViewer(secure: Boolean) {
)
}
internal fun DetailChatRoomFragment.navigateToAudioFileViewer(secure: Boolean) {
val bundle = bundleOf("Secure" to secure)
findMasterNavController().navigate(
R.id.action_global_videoViewerFragment,
bundle,
getRightToLeftAnimationNavOptions()
)
}
internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
findNavController().navigate(

View file

@ -234,6 +234,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
when {
FileUtils.isExtensionImage(path) -> navigateToImageFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
FileUtils.isExtensionVideo(path) -> navigateToVideoFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
FileUtils.isExtensionAudio(path) -> navigateToAudioFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
FileUtils.isExtensionPdf(path) -> navigateToPdfFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
FileUtils.isPlainTextFile(path) -> navigateToTextFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
else -> openFile(path)

View file

@ -27,12 +27,15 @@ import org.linphone.activities.main.files.viewmodels.VideoFileViewModel
import org.linphone.activities.main.files.viewmodels.VideoFileViewModelFactory
import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.VideoViewerFragmentBinding
class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() {
private lateinit var viewModel: VideoFileViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var mediaController: MediaController
override fun getLayoutId(): Int = R.layout.video_viewer_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
@ -56,7 +59,8 @@ class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() {
)[VideoFileViewModel::class.java]
binding.viewModel = viewModel
initVideoControls()
mediaController = MediaController(requireContext())
initMediaController()
isSecure = arguments?.getBoolean("Secure") ?: false
}
@ -68,13 +72,38 @@ class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() {
}
override fun onPause() {
if (mediaController.isShowing) {
mediaController.hide()
}
binding.videoView.pause()
super.onPause()
}
private fun initVideoControls() {
val mediaController = MediaController(requireContext())
viewModel.initMediaController(mediaController, binding.videoView)
private fun initMediaController() {
val videoView = binding.videoView
videoView.setOnPreparedListener { mediaPlayer ->
mediaPlayer.setOnVideoSizeChangedListener { _, _, _ ->
videoView.setMediaController(mediaController)
// The following will make the video controls above the video
// mediaController.setAnchorView(videoView)
// This will make the controls visible right away for 3 seconds
// If 0 as timeout, they will stay visible mediaController.hide() is called
mediaController.show()
}
}
videoView.setOnCompletionListener { mediaPlayer ->
mediaPlayer.release()
}
videoView.setOnErrorListener { _, what, extra ->
Log.e("[Video Viewer] Error: $what ($extra)")
false
}
videoView.setVideoPath(viewModel.filePath)
}
}

View file

@ -19,11 +19,8 @@
*/
package org.linphone.activities.main.files.viewmodels
import android.widget.MediaController
import android.widget.VideoView
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import org.linphone.core.tools.Log
class VideoFileViewModelFactory(private val filePath: String) :
ViewModelProvider.NewInstanceFactory() {
@ -34,26 +31,4 @@ class VideoFileViewModelFactory(private val filePath: String) :
}
}
class VideoFileViewModel(val filePath: String) : ViewModel() {
fun initMediaController(mediaController: MediaController, videoView: VideoView) {
videoView.setOnPreparedListener { mediaPlayer ->
mediaPlayer.setOnVideoSizeChangedListener { _, _, _ ->
videoView.setMediaController(mediaController)
// The following will make the video controls above the video
// mediaController.setAnchorView(videoView)
}
}
videoView.setOnCompletionListener { mediaPlayer ->
mediaPlayer.release()
}
videoView.setOnErrorListener { _, what, extra ->
Log.e("[Video Viewer] Error: $what ($extra)")
false
}
videoView.setVideoPath(filePath)
}
}
class VideoFileViewModel(val filePath: String) : ViewModel()