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() {
|
internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
|
||||||
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
|
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue