diff --git a/app/src/main/java/org/linphone/ui/call/conference/fragment/ActiveConferenceCallFragment.kt b/app/src/main/java/org/linphone/ui/call/conference/fragment/ActiveConferenceCallFragment.kt index 9b262c046..078afa3b6 100644 --- a/app/src/main/java/org/linphone/ui/call/conference/fragment/ActiveConferenceCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/conference/fragment/ActiveConferenceCallFragment.kt @@ -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 diff --git a/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt index d94373971..72ed16cc2 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt @@ -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") diff --git a/app/src/main/java/org/linphone/ui/call/fragment/GenericCallFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/GenericCallFragment.kt index 7a4e3bedb..010e13ca0 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/GenericCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/GenericCallFragment.kt @@ -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) } diff --git a/app/src/main/java/org/linphone/ui/call/fragment/OutgoingCallFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/OutgoingCallFragment.kt index a3d561b5f..954ef7ea4 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/OutgoingCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/OutgoingCallFragment.kt @@ -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() {