From 9465593aa6c57255a3b55f663f542a2ecda89f5c Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 22 Jul 2024 10:25:37 +0200 Subject: [PATCH] Fixed full screen switch after device rotation in media viewer --- .gitignore | 1 + .../linphone/ui/file_viewer/MediaViewerActivity.kt | 13 ++++++++++--- .../ui/file_viewer/adapter/MediaListAdapter.kt | 5 +---- .../ui/file_viewer/fragment/MediaViewerFragment.kt | 8 +++----- .../ui/file_viewer/viewmodel/MediaListViewModel.kt | 6 ------ .../ui/file_viewer/viewmodel/MediaViewModel.kt | 6 ++++-- .../ui/main/viewmodel/SharedMainViewModel.kt | 2 ++ .../main/res/layout/file_media_viewer_activity.xml | 5 ++++- 8 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 19acc0284..f7247d082 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ local.properties app/debug/ app/release/ +.idea/ diff --git a/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt b/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt index f0f5c6e91..a9bdcf04f 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt @@ -24,6 +24,7 @@ import org.linphone.ui.GenericActivity import org.linphone.ui.file_viewer.adapter.MediaListAdapter import org.linphone.ui.file_viewer.viewmodel.MediaListViewModel import org.linphone.ui.main.chat.model.FileModel +import org.linphone.ui.main.viewmodel.SharedMainViewModel import org.linphone.utils.AppUtils import org.linphone.utils.FileUtils @@ -41,6 +42,8 @@ class MediaViewerActivity : GenericActivity() { private lateinit var viewPager: ViewPager2 + private lateinit var sharedViewModel: SharedMainViewModel + private val pageListener = object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { val list = viewModel.mediaList.value.orEmpty() @@ -66,12 +69,16 @@ class MediaViewerActivity : GenericActivity() { WindowInsetsCompat.CONSUMED } + sharedViewModel = run { + ViewModelProvider(this)[SharedMainViewModel::class.java] + } + binding.sharedViewModel = sharedViewModel + sharedViewModel.mediaViewerFullScreenMode.value = true + viewModel = ViewModelProvider(this)[MediaListViewModel::class.java] binding.viewModel = viewModel - adapter = MediaListAdapter(this, viewModel) { fullScreen -> - viewModel.fullScreenMode.value = fullScreen - } + adapter = MediaListAdapter(this, viewModel) viewPager = binding.mediaViewPager viewPager.adapter = adapter diff --git a/app/src/main/java/org/linphone/ui/file_viewer/adapter/MediaListAdapter.kt b/app/src/main/java/org/linphone/ui/file_viewer/adapter/MediaListAdapter.kt index d5c28dd89..cdee1bc83 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/adapter/MediaListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/adapter/MediaListAdapter.kt @@ -29,8 +29,7 @@ import org.linphone.ui.file_viewer.viewmodel.MediaListViewModel class MediaListAdapter( fragmentActivity: FragmentActivity, - private val viewModel: MediaListViewModel, - private val lambda: ((fullScreen: Boolean) -> Unit) + private val viewModel: MediaListViewModel ) : FragmentStateAdapter(fragmentActivity) { companion object { @@ -51,12 +50,10 @@ class MediaListAdapter( override fun createFragment(position: Int): Fragment { val fragment = MediaViewerFragment() - fragment.fullScreenChanged = lambda fragment.arguments = Bundle().apply { val path = viewModel.mediaList.value.orEmpty().getOrNull(position)?.path Log.d("$TAG Path is [$path] for position [$position]") putString("path", path) - putBoolean("fullScreen", viewModel.fullScreenMode.value == true) } return fragment } diff --git a/app/src/main/java/org/linphone/ui/file_viewer/fragment/MediaViewerFragment.kt b/app/src/main/java/org/linphone/ui/file_viewer/fragment/MediaViewerFragment.kt index 11ab44dd7..d48ea451d 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/fragment/MediaViewerFragment.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/fragment/MediaViewerFragment.kt @@ -45,8 +45,6 @@ class MediaViewerFragment : GenericMainFragment() { private lateinit var viewModel: MediaViewModel - var fullScreenChanged: ((fullScreen: Boolean) -> Unit)? = null - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -64,7 +62,7 @@ class MediaViewerFragment : GenericMainFragment() { } viewModel = ViewModelProvider(this)[MediaViewModel::class.java] - viewModel.fullScreenMode.value = arguments?.getBoolean("fullScreen", true) ?: true + viewModel.fullScreenMode.value = sharedViewModel.mediaViewerFullScreenMode.value == true binding.lifecycleOwner = viewLifecycleOwner binding.viewModel = viewModel @@ -85,8 +83,8 @@ class MediaViewerFragment : GenericMainFragment() { viewModel.loadFile(path) binding.setToggleFullScreenModeClickListener { - viewModel.toggleFullScreen() - fullScreenChanged?.invoke(viewModel.fullScreenMode.value == true) + val fullScreenMode = viewModel.toggleFullScreen() + sharedViewModel.mediaViewerFullScreenMode.value = fullScreenMode } } diff --git a/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaListViewModel.kt b/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaListViewModel.kt index 133f547da..8c309f693 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaListViewModel.kt @@ -35,8 +35,6 @@ class MediaListViewModel @UiThread constructor() : AbstractConversationViewModel val mediaList = MutableLiveData>() - val fullScreenMode = MutableLiveData() - val currentlyDisplayedFileName = MutableLiveData() val currentlyDisplayedFileDateTime = MutableLiveData() @@ -45,10 +43,6 @@ class MediaListViewModel @UiThread constructor() : AbstractConversationViewModel loadMediaList() } - init { - fullScreenMode.value = true - } - override fun onCleared() { super.onCleared() diff --git a/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaViewModel.kt b/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaViewModel.kt index 0d4cd39b5..5781d8901 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaViewModel.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/viewmodel/MediaViewModel.kt @@ -107,8 +107,10 @@ class MediaViewModel @UiThread constructor() : GenericViewModel() { } @UiThread - fun toggleFullScreen() { - fullScreenMode.value = fullScreenMode.value != true + fun toggleFullScreen(): Boolean { + val newValue = fullScreenMode.value != true + fullScreenMode.value = newValue + return newValue } @UiThread diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt index 1af2ee669..a5a4baf25 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt @@ -167,6 +167,8 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() { /* Other */ + val mediaViewerFullScreenMode = MutableLiveData() + val listOfSelectedSipUrisEvent: MutableLiveData>> by lazy { MutableLiveData>>() } diff --git a/app/src/main/res/layout/file_media_viewer_activity.xml b/app/src/main/res/layout/file_media_viewer_activity.xml index a095e3c79..74b4dd773 100644 --- a/app/src/main/res/layout/file_media_viewer_activity.xml +++ b/app/src/main/res/layout/file_media_viewer_activity.xml @@ -16,6 +16,9 @@ +