From a0ccbdf27e00c2b713983f684cae9d2fa61a423f Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Wed, 26 Apr 2023 16:09:18 +0200 Subject: [PATCH] Add attended transfer call in VoipExtraButtonsView --- Classes/Swift/Voip/Theme/VoipTexts.swift | 1 + .../Fragments/VoipExtraButtonsView.swift | 50 +++++++++++++++--- Resources/fr.lproj/Localizable.strings | Bin 76244 -> 76330 bytes 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/Classes/Swift/Voip/Theme/VoipTexts.swift b/Classes/Swift/Voip/Theme/VoipTexts.swift index cc88a086f..204dc2057 100644 --- a/Classes/Swift/Voip/Theme/VoipTexts.swift +++ b/Classes/Swift/Voip/Theme/VoipTexts.swift @@ -38,6 +38,7 @@ import UIKit @objc static let call_context_action_pause = NSLocalizedString("Pause call",comment:"") @objc static let call_context_action_resume = NSLocalizedString("Resume call",comment:"") @objc static let call_context_action_transfer = NSLocalizedString("Transfer call",comment:"") + @objc static let call_context_action_attended_transfer = NSLocalizedString("Attended transfer",comment:"") @objc static let call_error_declined = NSLocalizedString("Call has been declined",comment:"") @objc static let call_error_generic = NSLocalizedString("Error: %s",comment:"") @objc static let call_error_incompatible_media_params = NSLocalizedString("Incompatible media parameters",comment:"") diff --git a/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift b/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift index 5b70663d7..c49729aa6 100644 --- a/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift +++ b/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift @@ -84,11 +84,15 @@ class VoipExtraButtonsView: UIStackView { row2.distribution = .fillEqually row2.alignment = .center - let transfer = VoipExtraButton(text: VoipTexts.call_action_transfer_call, buttonTheme: VoipTheme.call_action("voip_call_forward"),onClickAction: { - let view: DialerView = self.VIEW(DialerView.compositeViewDescription()); - view.setAddress("") - CallManager.instance().nextCallIsTransfer = true - PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) + var transfer = VoipExtraButton(text: CallsViewModel.shared.inactiveCallsCount.value! < 1 ? VoipTexts.call_action_transfer_call : VoipTexts.call_context_action_attended_transfer, buttonTheme: VoipTheme.call_action("voip_call_forward"),onClickAction: { + if CallsViewModel.shared.inactiveCallsCount.value! < 1 { + let view: DialerView = self.VIEW(DialerView.compositeViewDescription()); + view.setAddress("") + CallManager.instance().nextCallIsTransfer = true + PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) + }else{ + self.attendedTransfer() + } }) row2.addArrangedSubview(transfer) @@ -127,6 +131,9 @@ class VoipExtraButtonsView: UIStackView { addcall.isHidden = isIn == true } + CallsViewModel.shared.inactiveCallsCount.readCurrentAndObserve { title in + transfer.setTitle(title! < 1 ? VoipTexts.call_action_transfer_call : VoipTexts.call_context_action_attended_transfer, for: .normal) + } } func refresh() { @@ -134,6 +141,37 @@ class VoipExtraButtonsView: UIStackView { CallsViewModel.shared.inactiveCallsCount.notifyValue() } - + func attendedTransfer() { + var core = CallManager.instance().lc + var currentCall = core?.currentCall + if (currentCall == nil) { + Log.e("[Call Controls] Can't do an attended transfer without a current call") + return + } + + if let callsNb = core?.callsNb, callsNb <= 1 { + Log.e("[Call Controls] Need at least two calls to do an attended transfer") + return + } + + var callToTransferTo = core!.calls.last { call in + call.state == Call.State.Paused + } + + if (callToTransferTo == nil) { + Log.e("[Call Controls] Couldn't find a call in Paused state to transfer current call to") + return + } + + Log.i( + "[Call Controls] Doing an attended transfer between active call [${currentCall.remoteAddress.asStringUriOnly()}] and paused call [${callToTransferTo.remoteAddress.asStringUriOnly()}]" + ) + + do{ + try callToTransferTo?.transferToAnother(dest: currentCall!) + }catch{ + Log.e("[Call Controls] Attended transfer failed!") + } + } } diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index e34aa7adef769f5bfd7e6fa4ad6bfa215351f970..bae2c8070f3cc075c18b2f1da03392daa01a5d0a 100644 GIT binary patch delta 76 zcmca|nPt@#mJQRs$(JycFr+f%F{A*=6b1z#uZSTL$S-C{1Bw()PW&c3Sz!r_XbDiR Xn4y%R03^y##*hi*z1-aW&C?hFm0%YU delta 14 WcmZ2=h2_d+mJQRsZGQ93&KLkc>IiTE