Improved how TextureViews are handled in calls & confs

This commit is contained in:
Sylvain Berfini 2023-05-16 09:42:11 +02:00
parent 76334e03e6
commit 666a4f1ad0
7 changed files with 41 additions and 29 deletions

View file

@ -247,7 +247,7 @@ dependencies {
implementation 'org.linphone:linphone-sdk-android:5.2+'
// Only enable leak canary prior to release
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
}
task generateContactsXml(type: Copy) {

View file

@ -62,8 +62,6 @@ class CallsListFragment : GenericVideoPreviewFragment<VoipCallsListFragmentBindi
binding.controlsViewModel = controlsViewModel
setupLocalViewPreview(binding.localPreviewVideoSurface, binding.switchCamera)
binding.setCancelClickListener {
goBack()
}
@ -96,6 +94,18 @@ class CallsListFragment : GenericVideoPreviewFragment<VoipCallsListFragmentBindi
}
}
override fun onResume() {
super.onResume()
setupLocalVideoPreview(binding.localPreviewVideoSurface, binding.switchCamera)
}
override fun onPause() {
super.onPause()
cleanUpLocalVideoPreview(binding.localPreviewVideoSurface)
}
private fun showCallMenu(anchor: View, callData: CallData) {
val popupView: VoipCallContextMenuBindingImpl = DataBindingUtil.inflate(
LayoutInflater.from(requireContext()),

View file

@ -23,7 +23,6 @@ import android.os.Bundle
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.navigation.navGraphViewModels
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.voip.ConferenceDisplayMode
import org.linphone.activities.voip.viewmodels.ConferenceViewModel
@ -45,8 +44,6 @@ class ConferenceLayoutFragment : GenericVideoPreviewFragment<VoipConferenceLayou
binding.controlsViewModel = controlsViewModel
setupLocalViewPreview(binding.localPreviewVideoSurface, binding.switchCamera)
binding.setCancelClickListener {
goBack()
}
@ -84,7 +81,13 @@ class ConferenceLayoutFragment : GenericVideoPreviewFragment<VoipConferenceLayou
showTooManyParticipantsForMosaicLayoutDialog()
}
coreContext.core.nativePreviewWindowId = binding.localPreviewVideoSurface
setupLocalVideoPreview(binding.localPreviewVideoSurface, binding.switchCamera)
}
override fun onPause() {
super.onPause()
cleanUpLocalVideoPreview(binding.localPreviewVideoSurface)
}
private fun showTooManyParticipantsForMosaicLayoutDialog() {

View file

@ -23,7 +23,6 @@ import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.navigation.navGraphViewModels
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.navigateToAddParticipants
import org.linphone.activities.voip.viewmodels.ConferenceViewModel
@ -49,8 +48,6 @@ class ConferenceParticipantsFragment : GenericVideoPreviewFragment<VoipConferenc
binding.controlsViewModel = controlsViewModel
setupLocalViewPreview(binding.localPreviewVideoSurface, binding.switchCamera)
conferenceViewModel.conferenceExists.observe(
viewLifecycleOwner
) { exists ->
@ -90,12 +87,13 @@ class ConferenceParticipantsFragment : GenericVideoPreviewFragment<VoipConferenc
super.onResume()
skipEvents = false
coreContext.core.nativePreviewWindowId = binding.localPreviewVideoSurface
setupLocalVideoPreview(binding.localPreviewVideoSurface, binding.switchCamera)
}
override fun onPause() {
super.onPause()
skipEvents = true
cleanUpLocalVideoPreview(binding.localPreviewVideoSurface)
}
}

View file

@ -34,7 +34,6 @@ abstract class GenericVideoPreviewFragment<T : ViewDataBinding> : GenericFragmen
private var switchY: Float = 0f
private var switchCameraImageView: ImageView? = null
private lateinit var videoPreviewTextureView: TextureView
private val previewTouchListener = View.OnTouchListener { view, event ->
when (event.action) {
@ -67,17 +66,13 @@ abstract class GenericVideoPreviewFragment<T : ViewDataBinding> : GenericFragmen
}
}
protected fun setupLocalViewPreview(localVideoPreview: TextureView, switchCamera: ImageView?) {
videoPreviewTextureView = localVideoPreview
protected fun setupLocalVideoPreview(localVideoPreview: TextureView, switchCamera: ImageView?) {
switchCameraImageView = switchCamera
videoPreviewTextureView.setOnTouchListener(previewTouchListener)
localVideoPreview.setOnTouchListener(previewTouchListener)
coreContext.core.nativePreviewWindowId = localVideoPreview
}
override fun onResume() {
super.onResume()
if (::videoPreviewTextureView.isInitialized) {
coreContext.core.nativePreviewWindowId = videoPreviewTextureView
}
protected fun cleanUpLocalVideoPreview(localVideoPreview: TextureView) {
localVideoPreview.setOnTouchListener(null)
}
}

View file

@ -24,7 +24,6 @@ import android.os.SystemClock
import android.view.View
import android.widget.Chronometer
import androidx.navigation.navGraphViewModels
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.navigateToActiveCall
import org.linphone.activities.voip.viewmodels.CallsViewModel
@ -46,8 +45,6 @@ class OutgoingCallFragment : GenericVideoPreviewFragment<VoipCallOutgoingFragmen
binding.callsViewModel = callsViewModel
setupLocalViewPreview(binding.localPreviewVideoSurface, binding.switchCamera)
callsViewModel.callConnectedEvent.observe(
viewLifecycleOwner
) {
@ -79,7 +76,7 @@ class OutgoingCallFragment : GenericVideoPreviewFragment<VoipCallOutgoingFragmen
viewLifecycleOwner
) {
if (it) {
coreContext.core.nativePreviewWindowId = binding.localPreviewVideoSurface
setupLocalVideoPreview(binding.localPreviewVideoSurface, binding.switchCamera)
}
}
}
@ -87,11 +84,17 @@ class OutgoingCallFragment : GenericVideoPreviewFragment<VoipCallOutgoingFragmen
// We don't want the proximity sensor to turn screen OFF in this fragment
override fun onResume() {
super.onResume()
controlsViewModel.forceDisableProximitySensor.value = true
if (controlsViewModel.isOutgoingEarlyMedia.value == true) {
setupLocalVideoPreview(binding.localPreviewVideoSurface, binding.switchCamera)
}
}
override fun onPause() {
controlsViewModel.forceDisableProximitySensor.value = false
super.onPause()
controlsViewModel.forceDisableProximitySensor.value = false
cleanUpLocalVideoPreview(binding.localPreviewVideoSurface)
}
}

View file

@ -67,8 +67,6 @@ class SingleCallFragment : GenericVideoPreviewFragment<VoipSingleCallFragmentBin
binding.lifecycleOwner = viewLifecycleOwner
setupLocalViewPreview(binding.localPreviewVideoSurface, binding.switchCamera)
binding.controlsViewModel = controlsViewModel
binding.callsViewModel = callsViewModel
@ -193,15 +191,20 @@ class SingleCallFragment : GenericVideoPreviewFragment<VoipSingleCallFragmentBin
startActivity(intent)
}
}
}
override fun onResume() {
super.onResume()
coreContext.core.nativeVideoWindowId = binding.remoteVideoSurface
coreContext.core.nativePreviewWindowId = binding.localPreviewVideoSurface
setupLocalVideoPreview(binding.localPreviewVideoSurface, binding.switchCamera)
}
override fun onPause() {
super.onPause()
controlsViewModel.hideExtraButtons(true)
cleanUpLocalVideoPreview(binding.localPreviewVideoSurface)
}
private fun showCallVideoUpdateDialog(call: Call) {