diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index 5d0f39793..dfea6eceb 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -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( diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index ce914cb5b..02b36ddf2 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -234,6 +234,7 @@ class DetailChatRoomFragment : MasterFragment 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) diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt index 6a880474d..74dc905ff 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt @@ -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() { 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() { )[VideoFileViewModel::class.java] binding.viewModel = viewModel - initVideoControls() + mediaController = MediaController(requireContext()) + initMediaController() isSecure = arguments?.getBoolean("Secure") ?: false } @@ -68,13 +72,38 @@ class VideoViewerFragment : SecureFragment() { } 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) } } diff --git a/app/src/main/java/org/linphone/activities/main/files/viewmodels/VideoFileViewModel.kt b/app/src/main/java/org/linphone/activities/main/files/viewmodels/VideoFileViewModel.kt index f568720bb..cdea1b695 100644 --- a/app/src/main/java/org/linphone/activities/main/files/viewmodels/VideoFileViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/files/viewmodels/VideoFileViewModel.kt @@ -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()