Fixed full screen switch after device rotation in media viewer

This commit is contained in:
Sylvain Berfini 2024-07-22 10:25:37 +02:00
parent 2394c701cf
commit 9465593aa6
8 changed files with 25 additions and 21 deletions

1
.gitignore vendored
View file

@ -17,3 +17,4 @@
local.properties
app/debug/
app/release/
.idea/

View file

@ -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

View file

@ -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
}

View file

@ -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
}
}

View file

@ -35,8 +35,6 @@ class MediaListViewModel @UiThread constructor() : AbstractConversationViewModel
val mediaList = MutableLiveData<List<FileModel>>()
val fullScreenMode = MutableLiveData<Boolean>()
val currentlyDisplayedFileName = MutableLiveData<String>()
val currentlyDisplayedFileDateTime = MutableLiveData<String>()
@ -45,10 +43,6 @@ class MediaListViewModel @UiThread constructor() : AbstractConversationViewModel
loadMediaList()
}
init {
fullScreenMode.value = true
}
override fun onCleared() {
super.onCleared()

View file

@ -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

View file

@ -167,6 +167,8 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() {
/* Other */
val mediaViewerFullScreenMode = MutableLiveData<Boolean>()
val listOfSelectedSipUrisEvent: MutableLiveData<Event<ArrayList<String>>> by lazy {
MutableLiveData<Event<ArrayList<String>>>()
}

View file

@ -16,6 +16,9 @@
<variable
name="viewModel"
type="org.linphone.ui.file_viewer.viewmodel.MediaListViewModel" />
<variable
name="sharedViewModel"
type="org.linphone.ui.main.viewmodel.SharedMainViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
@ -26,7 +29,7 @@
<androidx.constraintlayout.widget.Group
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{viewModel.fullScreenMode ? View.GONE : View.VISIBLE}"
android:visibility="@{sharedViewModel.mediaViewerFullScreenMode ? View.GONE : View.VISIBLE}"
app:constraint_referenced_ids="top_bar_background, back, file_name, share, save, date_time"/>
<androidx.constraintlayout.widget.Barrier