Fixed issue with save/restore video preview position

This commit is contained in:
Sylvain Berfini 2025-01-22 11:35:41 +01:00
parent 1ead4d9218
commit 4dd92cddf0
4 changed files with 25 additions and 10 deletions

View file

@ -29,6 +29,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.view.doOnLayout
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
@ -303,7 +304,9 @@ class ActiveConferenceCallFragment : GenericCallFragment() {
override fun onResume() {
super.onResume()
setupVideoPreview(binding.localPreviewVideoSurface)
(binding.root as? ViewGroup)?.doOnLayout {
setupVideoPreview(binding.localPreviewVideoSurface)
}
coreContext.postOnCoreThread {
// Need to be done manually

View file

@ -30,6 +30,7 @@ import android.view.animation.AnimationUtils
import androidx.activity.OnBackPressedCallback
import androidx.annotation.UiThread
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.view.doOnLayout
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
@ -394,7 +395,9 @@ class ActiveCallFragment : GenericCallFragment() {
override fun onResume() {
super.onResume()
setupVideoPreview(binding.localPreviewVideoSurface)
(binding.root as? ViewGroup)?.doOnLayout {
setupVideoPreview(binding.localPreviewVideoSurface)
}
coreContext.postOnCoreThread { core ->
Log.i("$TAG Fragment resuming, setting native video window ID")

View file

@ -25,6 +25,7 @@ import android.view.MotionEvent
import android.view.View
import androidx.annotation.UiThread
import androidx.lifecycle.ViewModelProvider
import org.linphone.core.tools.Log
import org.linphone.ui.GenericFragment
import org.linphone.ui.call.view.RoundCornersTextureView
import org.linphone.ui.call.viewmodel.SharedCallViewModel
@ -46,8 +47,8 @@ abstract class GenericCallFragment : GenericFragment() {
true
}
MotionEvent.ACTION_UP -> {
sharedViewModel.videoPreviewX = view.translationX
sharedViewModel.videoPreviewY = view.translationY
sharedViewModel.videoPreviewX = view.x
sharedViewModel.videoPreviewY = view.y
true
}
MotionEvent.ACTION_MOVE -> {
@ -75,12 +76,17 @@ abstract class GenericCallFragment : GenericFragment() {
@SuppressLint("ClickableViewAccessibility")
protected fun setupVideoPreview(localPreviewVideoSurface: RoundCornersTextureView) {
if (requireActivity().isInPictureInPictureMode) {
Log.i("$TAG Activity is in PiP mode, do not move video preview")
return
}
// To restore video preview position if possible
localPreviewVideoSurface.animate()
.x(sharedViewModel.videoPreviewX)
.y(sharedViewModel.videoPreviewY)
.setDuration(0)
.start()
if (sharedViewModel.videoPreviewX != 0f && sharedViewModel.videoPreviewY != 0f) {
Log.i("$TAG Restoring video preview position with position X [${sharedViewModel.videoPreviewX}] and Y [${sharedViewModel.videoPreviewY}]")
localPreviewVideoSurface.x = sharedViewModel.videoPreviewX
localPreviewVideoSurface.y = sharedViewModel.videoPreviewY
}
localPreviewVideoSurface.setOnTouchListener(videoPreviewTouchListener)
}

View file

@ -24,6 +24,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.core.view.doOnLayout
import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.core.tools.Log
@ -72,7 +73,9 @@ class OutgoingCallFragment : GenericCallFragment() {
override fun onResume() {
super.onResume()
setupVideoPreview(binding.localPreviewVideoSurface)
(binding.root as? ViewGroup)?.doOnLayout {
setupVideoPreview(binding.localPreviewVideoSurface)
}
}
override fun onPause() {