diff --git a/app/src/main/java/org/linphone/ui/call/conference/fragment/ConferenceParticipantsListFragment.kt b/app/src/main/java/org/linphone/ui/call/conference/fragment/ConferenceParticipantsListFragment.kt index 74ff2398f..cefc3b11e 100644 --- a/app/src/main/java/org/linphone/ui/call/conference/fragment/ConferenceParticipantsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/conference/fragment/ConferenceParticipantsListFragment.kt @@ -30,10 +30,12 @@ import android.view.ViewGroup import android.view.animation.Animation import android.view.animation.AnimationUtils import android.widget.PopupWindow +import androidx.core.view.doOnLayout import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.core.Participant import org.linphone.core.tools.Log @@ -129,6 +131,32 @@ class ConferenceParticipantsListFragment : GenericCallFragment() { showKickParticipantDialog(displayName, participant) } } + + viewModel.isSendingVideo.observe(viewLifecycleOwner) { sending -> + coreContext.postOnCoreThread { core -> + core.nativePreviewWindowId = if (sending) { + Log.i("$TAG We are sending video, setting capture preview surface") + binding.localPreviewVideoSurface + } else { + Log.i("$TAG We are not sending video, clearing capture preview surface") + null + } + } + } + } + + override fun onResume() { + super.onResume() + + (binding.root as? ViewGroup)?.doOnLayout { + setupVideoPreview(binding.localPreviewVideoSurface) + } + } + + override fun onPause() { + super.onPause() + + cleanVideoPreview(binding.localPreviewVideoSurface) } private fun showKickParticipantDialog(displayName: String, participant: Participant) { diff --git a/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt index 7d3c5b621..32caa563a 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt @@ -23,14 +23,17 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.doOnLayout import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.tools.Log import org.linphone.databinding.CallsListFragmentBinding import org.linphone.ui.call.adapter.CallsListAdapter import org.linphone.ui.call.viewmodel.CallsViewModel +import org.linphone.ui.call.viewmodel.CurrentCallViewModel import org.linphone.utils.ConfirmationDialogModel import org.linphone.utils.DialogUtils @@ -43,6 +46,8 @@ class CallsListFragment : GenericCallFragment() { private lateinit var viewModel: CallsViewModel + private lateinit var callViewModel: CurrentCallViewModel + private lateinit var adapter: CallsListAdapter private var bottomSheetDialog: BottomSheetDialogFragment? = null @@ -73,6 +78,11 @@ class CallsListFragment : GenericCallFragment() { binding.viewModel = viewModel observeToastEvents(viewModel) + callViewModel = requireActivity().run { + ViewModelProvider(this)[CurrentCallViewModel::class.java] + } + observeToastEvents(callViewModel) + binding.callsList.setHasFixedSize(true) binding.callsList.layoutManager = LinearLayoutManager(requireContext()) @@ -101,6 +111,18 @@ class CallsListFragment : GenericCallFragment() { showMergeCallsIntoConferenceConfirmationDialog() } + callViewModel.isSendingVideo.observe(viewLifecycleOwner) { sending -> + coreContext.postOnCoreThread { core -> + core.nativePreviewWindowId = if (sending) { + Log.i("$TAG We are sending video, setting capture preview surface") + binding.localPreviewVideoSurface + } else { + Log.i("$TAG We are not sending video, clearing capture preview surface") + null + } + } + } + viewModel.calls.observe(viewLifecycleOwner) { Log.i("$TAG Calls list updated with [${it.size}] items") adapter.submitList(it) @@ -113,11 +135,21 @@ class CallsListFragment : GenericCallFragment() { } } + override fun onResume() { + super.onResume() + + (binding.root as? ViewGroup)?.doOnLayout { + setupVideoPreview(binding.localPreviewVideoSurface) + } + } + override fun onPause() { super.onPause() bottomSheetDialog?.dismiss() bottomSheetDialog = null + + cleanVideoPreview(binding.localPreviewVideoSurface) } private fun showMergeCallsIntoConferenceConfirmationDialog() { diff --git a/app/src/main/res/layout/call_conference_participants_list_fragment.xml b/app/src/main/res/layout/call_conference_participants_list_fragment.xml index 5242d263e..bd4736758 100644 --- a/app/src/main/res/layout/call_conference_participants_list_fragment.xml +++ b/app/src/main/res/layout/call_conference_participants_list_fragment.xml @@ -82,6 +82,19 @@ app:layout_constraintTop_toBottomOf="@id/title" app:layout_constraintBottom_toBottomOf="parent"/> + + + + \ No newline at end of file