From 6a4ef41ab564a38adb9ec3c94b791e5f9f4c5781 Mon Sep 17 00:00:00 2001 From: Christophe Deschamps Date: Wed, 23 Nov 2022 08:59:42 +0100 Subject: [PATCH] Various fixes in view model update propagation --- Classes/Swift/Voip/ViewModels/CallData.swift | 8 ++++++++ .../SingleCallView.swift | 3 +++ .../Fragments/ActiveCall/ActiveCallView.swift | 19 ++++++++++--------- .../VoipConferenceActiveSpeakerView.swift | 2 ++ 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Classes/Swift/Voip/ViewModels/CallData.swift b/Classes/Swift/Voip/ViewModels/CallData.swift index 05cd032d3..10e70c286 100644 --- a/Classes/Swift/Voip/ViewModels/CallData.swift +++ b/Classes/Swift/Voip/ViewModels/CallData.swift @@ -199,5 +199,13 @@ class CallData { isPaused.value = isCallPaused() } + func isOngoingSingleCall() -> Bool { + return !isOutGoing() && !isInComing() && call.conference == nil && call.callLog?.wasConference() != true + } + + func isOngoingConference() -> Bool { + return !isOutGoing() && !isInComing() && (call.conference != nil || call.callLog?.wasConference() == true) + } + } diff --git a/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift b/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift index bfa606c9a..f525012b7 100644 --- a/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift +++ b/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift @@ -39,6 +39,9 @@ import linphonesw currentCallView = ActiveCallView() fullScreenMutableContainerView.addSubview(currentCallView!) CallsViewModel.shared.currentCallData.readCurrentAndObserve { (currentCallData) in + guard currentCallData??.isOngoingSingleCall() == true else { + return + } self.currentCallView!.callData = currentCallData != nil ? currentCallData! : nil currentCallData??.isRemotelyPaused.readCurrentAndObserve { remotelyPaused in self.callPausedByRemoteView?.isHidden = remotelyPaused != true diff --git a/Classes/Swift/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift b/Classes/Swift/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift index 93c8ccb41..8aae7bb6f 100644 --- a/Classes/Swift/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift +++ b/Classes/Swift/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift @@ -57,8 +57,11 @@ class ActiveCallView: UIView { // = currentCall var callData: CallData? = nil { didSet { - duration.call = callData?.call - callData?.call.remoteAddress.map { + guard let callData = callData else { + return + } + duration.call = callData.call + callData.call.remoteAddress.map { avatar.fillFromAddress(address: $0) if let displayName = $0.addressBookEnhancedDisplayName() { displayNameTop.text = displayName+" - " @@ -66,13 +69,13 @@ class ActiveCallView: UIView { // = currentCall } sipAddress.text = $0.asStringUriOnly() } - self.remotelyRecordedIndicator.isRemotelyRecorded = callData?.isRemotelyRecorded - callData?.isRecording.readCurrentAndObserve { (selected) in + self.remotelyRecordedIndicator.isRemotelyRecorded = callData.isRemotelyRecorded + callData.isRecording.readCurrentAndObserve { (selected) in self.recordCallButtons.forEach { $0.isSelected = selected == true } } - callData?.isPaused.readCurrentAndObserve { (paused) in + callData.isPaused.readCurrentAndObserve { (paused) in self.pauseCallButtons.forEach { $0.isSelected = paused == true } @@ -80,13 +83,11 @@ class ActiveCallView: UIView { // = currentCall self.localVideo.isHidden = true } } - callData?.isRemotelyRecorded.readCurrentAndObserve { (remotelyRecorded) in + callData.isRemotelyRecorded.readCurrentAndObserve { (remotelyRecorded) in self.centerSection.removeConstraints().matchParentSideBorders().alignUnder(view:remotelyRecorded == true ? self.remotelyRecordedIndicator : self.upperSection ,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done() self.setNeedsLayout() } - - - + Core.get().nativeVideoWindow = remoteVideo Core.get().nativePreviewWindowId = UnsafeMutableRawPointer(Unmanaged.passRetained(localVideo).toOpaque()) diff --git a/Classes/Swift/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift b/Classes/Swift/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift index 88d82def8..8873dc9e2 100644 --- a/Classes/Swift/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift +++ b/Classes/Swift/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift @@ -63,6 +63,8 @@ class VoipConferenceActiveSpeakerView: UIView, UICollectionViewDataSource, UICol var conferenceViewModel: ConferenceViewModel? = nil { didSet { if let model = conferenceViewModel { + self.activeSpeakerVideoView.isHidden = true + self.activeSpeakerVideoViewAlone.isHidden = true self.setJoininngSpeakerState(enabled: false) self.activeSpeakerAvatar.showAsAvatarIcon() model.subject.readCurrentAndObserve { (subject) in