From 9e2b52b4d2fed9a64d2612e4c438bdacd7361b35 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 30 May 2022 16:28:36 +0200 Subject: [PATCH] Added full-screen support for image & video viewers --- CHANGELOG.md | 1 + .../java/org/linphone/activities/main/MainActivity.kt | 4 ++++ .../main/files/fragments/ImageViewerFragment.kt | 9 +++++++++ .../main/files/fragments/VideoViewerFragment.kt | 9 +++++++++ .../main/files/viewmodels/FileViewerViewModel.kt | 7 +++++++ app/src/main/res/layout/file_image_viewer_fragment.xml | 2 ++ app/src/main/res/layout/file_video_viewer_fragment.xml | 4 +++- 7 files changed, 35 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7127a8aa1..3e2354d8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Group changes to describe their impact on the project, as follows: ### Added - Conference creation with scheduling, video, different layouts, showing who is speaking and who is muted, etc... - Chat rooms can be individually muted (no notification when receiving a chat message) +- Image & Video in-app viewers allow for full-screen display ### Changed - In-call views have been re-designed diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index dc8e6b868..8914a8832 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -246,6 +246,10 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin currentFocus?.hideKeyboard() } + fun hideStatusFragment(hide: Boolean) { + statusFragment.visibility = if (hide) View.GONE else View.VISIBLE + } + private fun updateTabsFragmentVisibility() { tabsFragment.visibility = if (tabsFragmentVisible1 && tabsFragmentVisible2) View.VISIBLE else View.GONE } diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt index 2bab58d08..3939a0c1b 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt @@ -25,8 +25,10 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.files.viewmodels.ImageFileViewModel import org.linphone.activities.main.files.viewmodels.ImageFileViewModelFactory +import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log import org.linphone.databinding.FileImageViewerFragmentBinding @@ -53,5 +55,12 @@ class ImageViewerFragment : GenericViewerFragment + Compatibility.hideAndroidSystemUI(hide, requireActivity().window) + (requireActivity() as MainActivity).hideStatusFragment(hide) + } } } 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 f82711429..aaead627a 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 @@ -26,8 +26,10 @@ import android.widget.MediaController import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.files.viewmodels.VideoFileViewModel import org.linphone.activities.main.files.viewmodels.VideoFileViewModelFactory +import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log import org.linphone.databinding.FileVideoViewerFragmentBinding @@ -67,6 +69,13 @@ class VideoViewerFragment : GenericViewerFragment + Compatibility.hideAndroidSystemUI(hide, requireActivity().window) + (requireActivity() as MainActivity).hideStatusFragment(hide) + } } override fun onResume() { diff --git a/app/src/main/java/org/linphone/activities/main/files/viewmodels/FileViewerViewModel.kt b/app/src/main/java/org/linphone/activities/main/files/viewmodels/FileViewerViewModel.kt index 45db338c4..3903bedf9 100644 --- a/app/src/main/java/org/linphone/activities/main/files/viewmodels/FileViewerViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/files/viewmodels/FileViewerViewModel.kt @@ -19,6 +19,7 @@ */ package org.linphone.activities.main.files.viewmodels +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import org.linphone.core.Content import org.linphone.core.tools.Log @@ -28,6 +29,8 @@ open class FileViewerViewModel(val content: Content) : ViewModel() { val filePath: String private val deleteAfterUse: Boolean = content.isFileEncrypted + val fullScreenMode = MutableLiveData() + init { filePath = if (deleteAfterUse) { Log.i("[File Viewer] Content is encrypted, requesting plain file path") @@ -45,4 +48,8 @@ open class FileViewerViewModel(val content: Content) : ViewModel() { super.onCleared() } + + fun toggleFullScreen() { + fullScreenMode.value = fullScreenMode.value != true + } } diff --git a/app/src/main/res/layout/file_image_viewer_fragment.xml b/app/src/main/res/layout/file_image_viewer_fragment.xml index d8d896db6..f50ba5bf4 100644 --- a/app/src/main/res/layout/file_image_viewer_fragment.xml +++ b/app/src/main/res/layout/file_image_viewer_fragment.xml @@ -20,6 +20,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" + android:visibility="@{viewModel.fullScreenMode ? View.GONE : View.VISIBLE}" tools:layout="@layout/file_viewer_top_bar_fragment" /> diff --git a/app/src/main/res/layout/file_video_viewer_fragment.xml b/app/src/main/res/layout/file_video_viewer_fragment.xml index ddead1670..fa4c27f96 100644 --- a/app/src/main/res/layout/file_video_viewer_fragment.xml +++ b/app/src/main/res/layout/file_video_viewer_fragment.xml @@ -20,6 +20,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" + android:visibility="@{viewModel.fullScreenMode ? View.GONE : View.VISIBLE}" tools:layout="@layout/file_viewer_top_bar_fragment" /> + android:layout_centerInParent="true" + android:onClick="@{() -> viewModel.toggleFullScreen()}"/>