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() { internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
findNavController().navigate( findNavController().navigate(

View file

@ -234,6 +234,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
when { when {
FileUtils.isExtensionImage(path) -> navigateToImageFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled()) FileUtils.isExtensionImage(path) -> navigateToImageFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
FileUtils.isExtensionVideo(path) -> navigateToVideoFileViewer(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.isExtensionPdf(path) -> navigateToPdfFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
FileUtils.isPlainTextFile(path) -> navigateToTextFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled()) FileUtils.isPlainTextFile(path) -> navigateToTextFileViewer(viewModel.chatRoom.currentParams.encryptionEnabled())
else -> openFile(path) 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.files.viewmodels.VideoFileViewModelFactory
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.VideoViewerFragmentBinding import org.linphone.databinding.VideoViewerFragmentBinding
class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() { class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() {
private lateinit var viewModel: VideoFileViewModel private lateinit var viewModel: VideoFileViewModel
private lateinit var sharedViewModel: SharedMainViewModel private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var mediaController: MediaController
override fun getLayoutId(): Int = R.layout.video_viewer_fragment override fun getLayoutId(): Int = R.layout.video_viewer_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
@ -56,7 +59,8 @@ class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() {
)[VideoFileViewModel::class.java] )[VideoFileViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
initVideoControls() mediaController = MediaController(requireContext())
initMediaController()
isSecure = arguments?.getBoolean("Secure") ?: false isSecure = arguments?.getBoolean("Secure") ?: false
} }
@ -68,13 +72,38 @@ class VideoViewerFragment : SecureFragment<VideoViewerFragmentBinding>() {
} }
override fun onPause() { override fun onPause() {
if (mediaController.isShowing) {
mediaController.hide()
}
binding.videoView.pause() binding.videoView.pause()
super.onPause() super.onPause()
} }
private fun initVideoControls() { private fun initMediaController() {
val mediaController = MediaController(requireContext()) val videoView = binding.videoView
viewModel.initMediaController(mediaController, 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 package org.linphone.activities.main.files.viewmodels
import android.widget.MediaController
import android.widget.VideoView
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.core.tools.Log
class VideoFileViewModelFactory(private val filePath: String) : class VideoFileViewModelFactory(private val filePath: String) :
ViewModelProvider.NewInstanceFactory() { ViewModelProvider.NewInstanceFactory() {
@ -34,26 +31,4 @@ class VideoFileViewModelFactory(private val filePath: String) :
} }
} }
class VideoFileViewModel(val filePath: String) : ViewModel() { 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)
}
}