Using VideoViewer for audio files as well (for now)
This commit is contained in:
parent
d4229711e3
commit
3b8e83e1ed
4 changed files with 44 additions and 30 deletions
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue