Improved how TextureViews are handled in calls & confs
This commit is contained in:
parent
76334e03e6
commit
666a4f1ad0
7 changed files with 41 additions and 29 deletions
|
@ -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) {
|
||||
|
|
|
@ -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()),
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue