From 9eb2e5609e5ece5c61fab80b5b2fed141d96c71d Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Thu, 4 May 2023 15:46:55 +0200 Subject: [PATCH] Disable video feature in config RC --- Classes/SettingsView.m | 6 ++++++ .../ViewModels/ConferenceWaitingRoomViewModel.swift | 2 +- .../Conference/Views/ConferenceWaitingRoomView.swift | 3 +++ .../Extensions/LinphoneCore/CallExtensions.swift | 4 ++-- Classes/Swift/Voip/ViewModels/CallsViewModel.swift | 2 +- .../Swift/Voip/ViewModels/ConferenceViewModel.swift | 2 +- Classes/Swift/Voip/ViewModels/ControlsViewModel.swift | 4 ++-- .../CompositeViewControllers/SingleCallView.swift | 5 ++++- Classes/Swift/Voip/Views/Fragments/ControlsView.swift | 3 ++- .../Voip/Views/Fragments/VoipExtraButtonsView.swift | 11 ++++++++++- Resources/linphonerc | 1 + 11 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Classes/SettingsView.m b/Classes/SettingsView.m index 8b92e1b28..5154ab222 100644 --- a/Classes/SettingsView.m +++ b/Classes/SettingsView.m @@ -673,6 +673,12 @@ void update_hash_cbs(LinphoneAccountCreator *creator, LinphoneAccountCreatorStat if ([LinphoneManager.instance lpConfigBoolForKey:@"disable_chat_feature"]){ [hiddenKeys addObject:@"message_menu"]; } + + if ([LinphoneManager.instance lpConfigBoolForKey:@"disable_video_feature"]) { + [hiddenKeys addObject:@"enable_video_preference"]; + [hiddenKeys addObject:@"video_menu"]; + } + #ifndef DEBUG [hiddenKeys addObject:@"debug_actions_group"]; [hiddenKeys addObject:@"release_button"]; diff --git a/Classes/Swift/Conference/ViewModels/ConferenceWaitingRoomViewModel.swift b/Classes/Swift/Conference/ViewModels/ConferenceWaitingRoomViewModel.swift index 14b34a5eb..22aef7205 100644 --- a/Classes/Swift/Conference/ViewModels/ConferenceWaitingRoomViewModel.swift +++ b/Classes/Swift/Conference/ViewModels/ConferenceWaitingRoomViewModel.swift @@ -45,7 +45,7 @@ class ConferenceWaitingRoomViewModel: ControlsViewModel { isMuteMicrophoneEnabled.value = true isSpeakerSelected.value = true isVideoEnabled.value = false - isVideoAvailable.value = core.videoCaptureEnabled + isVideoAvailable.value = core.videoCaptureEnabled && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false showLayoutPicker.value = false } diff --git a/Classes/Swift/Conference/Views/ConferenceWaitingRoomView.swift b/Classes/Swift/Conference/Views/ConferenceWaitingRoomView.swift index 13d85cd53..b585bdff4 100644 --- a/Classes/Swift/Conference/Views/ConferenceWaitingRoomView.swift +++ b/Classes/Swift/Conference/Views/ConferenceWaitingRoomView.swift @@ -146,6 +146,9 @@ import linphonesw //self.localVideo.isHidden = joining == true (UX question as video window goes black by the core, better black or hidden ?) self.noVideoLabel.isHidden = joining == true self.layoutPicker?.isHidden = joining == true + if (Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == true) { + self.layoutPicker!.isHidden = true + } if (joining == true) { self.view.addSubview(self.conferenceJoinSpinner) self.conferenceJoinSpinner.square(AbstractIncomingOutgoingCallView.spinner_size).center().done() diff --git a/Classes/Swift/Extensions/LinphoneCore/CallExtensions.swift b/Classes/Swift/Extensions/LinphoneCore/CallExtensions.swift index ed0fcdecf..12096e830 100644 --- a/Classes/Swift/Extensions/LinphoneCore/CallExtensions.swift +++ b/Classes/Swift/Extensions/LinphoneCore/CallExtensions.swift @@ -28,8 +28,8 @@ extension Call { } if (accept) { params.videoEnabled = true - core?.videoCaptureEnabled = true - core?.videoDisplayEnabled = true + core?.videoCaptureEnabled = true && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false + core?.videoDisplayEnabled = true && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false } else { params.videoEnabled = false } diff --git a/Classes/Swift/Voip/ViewModels/CallsViewModel.swift b/Classes/Swift/Voip/ViewModels/CallsViewModel.swift index f7590b58a..f46a5408e 100644 --- a/Classes/Swift/Voip/ViewModels/CallsViewModel.swift +++ b/Classes/Swift/Voip/ViewModels/CallsViewModel.swift @@ -65,7 +65,7 @@ class CallsViewModel { let localVideo = call.currentParams?.videoEnabled == true let autoAccept = call.core?.videoActivationPolicy?.automaticallyAccept == true if (remoteVideo && !localVideo && !autoAccept) { - if (core.videoCaptureEnabled || core.videoDisplayEnabled) { + if (core.videoCaptureEnabled || core.videoDisplayEnabled) && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false { try?call.deferUpdate() self.callUpdateEvent.value = call } else { diff --git a/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift b/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift index b74d60939..7f6bdb0dd 100644 --- a/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift +++ b/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift @@ -267,7 +267,7 @@ class ConferenceViewModel { private func updateConferenceLayout(conference: Conference) { if let call = conference.call, let params = call.params { - conferenceDisplayMode.value = !params.videoEnabled ? ConferenceDisplayMode.AudioOnly : params.conferenceVideoLayout == .Grid ? .Grid : .ActiveSpeaker + conferenceDisplayMode.value = !params.videoEnabled || Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == true ? ConferenceDisplayMode.AudioOnly : params.conferenceVideoLayout == .Grid ? .Grid : .ActiveSpeaker let list = sortDevicesDataList(devices: conferenceParticipantDevices.value!) conferenceParticipantDevices.value = list Log.i("[Conference] Conference current layout is: \(conferenceDisplayMode.value)") diff --git a/Classes/Swift/Voip/ViewModels/ControlsViewModel.swift b/Classes/Swift/Voip/ViewModels/ControlsViewModel.swift index e83760788..e4f3b8e61 100644 --- a/Classes/Swift/Voip/ViewModels/ControlsViewModel.swift +++ b/Classes/Swift/Voip/ViewModels/ControlsViewModel.swift @@ -201,10 +201,10 @@ class ControlsViewModel { private func updateVideoAvailable() { let currentCall = core.currentCall isVideoAvailable.value = - (core.videoCaptureEnabled || core.videoPreviewEnabled) && + ((core.videoCaptureEnabled || core.videoPreviewEnabled) && currentCall?.state != .Paused && currentCall?.state != .PausedByRemote && - ((currentCall != nil && currentCall?.mediaInProgress() != true) || (core.conference?.isIn == true)) + ((currentCall != nil && currentCall?.mediaInProgress() != true) || (core.conference?.isIn == true))) && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false } private func updateVideoEnabled() { diff --git a/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift b/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift index 6d902dd2d..4ac1a624e 100644 --- a/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift +++ b/Classes/Swift/Voip/Views/CompositeViewControllers/SingleCallView.swift @@ -80,7 +80,7 @@ import linphonesw self.videoAcceptDialog?.removeFromSuperview() self.videoAcceptDialog = nil } else if (call?.state == .UpdatedByRemote) { - if (core.videoCaptureEnabled || core.videoDisplayEnabled) { + if ((core.videoCaptureEnabled || core.videoDisplayEnabled) && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false) { if (call?.currentParams?.videoEnabled != call?.remoteParams?.videoEnabled) { let accept = ButtonAttributes(text:VoipTexts.dialog_accept, action: {call?.answerVideoUpdateRequest(accept: true)}, isDestructive:false) let cancel = ButtonAttributes(text:VoipTexts.dialog_decline, action: {call?.answerVideoUpdateRequest(accept: false)}, isDestructive:true) @@ -88,6 +88,9 @@ import linphonesw self.videoAcceptDialog?.show() } } else { + if (Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == true) { + call?.answerVideoUpdateRequest(accept: false) + } Log.w("[Call] Video display & capture are disabled, don't show video dialog") } } diff --git a/Classes/Swift/Voip/Views/Fragments/ControlsView.swift b/Classes/Swift/Voip/Views/Fragments/ControlsView.swift index 387acb0a6..5f2de5832 100644 --- a/Classes/Swift/Voip/Views/Fragments/ControlsView.swift +++ b/Classes/Swift/Voip/Views/Fragments/ControlsView.swift @@ -19,6 +19,7 @@ import Foundation import UIKit +import linphonesw class ControlsView: UIStackView { @@ -73,7 +74,7 @@ class ControlsView: UIStackView { } // Video - if (showVideo) { + if (showVideo && Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == false) { let video = CallControlButton(buttonTheme: VoipTheme.call_video, onClickAction: { if AVCaptureDevice.authorizationStatus(for: .video) == .authorized { controlsViewModel.toggleVideo() diff --git a/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift b/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift index c49729aa6..2568daa17 100644 --- a/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift +++ b/Classes/Swift/Voip/Views/Fragments/VoipExtraButtonsView.swift @@ -115,7 +115,16 @@ class VoipExtraButtonsView: UIStackView { ControlsViewModel.shared.goToConferenceLayoutSettings.notifyAllObservers(with: true) }) row2.addArrangedSubview(layoutselect) - + + if (Core.get().config?.getBool(section: "app", key: "disable_video_feature", defaultValue: false) == true) { + layoutselect.isEnabled = false + layoutselect.setTitleColor(.gray, for: .disabled) + if #available(iOS 13.0, *) { + layoutselect.setImage(UIImage(named: "voip_conference_mosaic")!.withTintColor(.gray), for: .disabled) + } + } + + let calls = VoipExtraButton(text: VoipTexts.call_action_calls_list, buttonTheme: VoipTheme.call_action("voip_calls_list"), withbBoucinCounterDataSource: CallsViewModel.shared.inactiveCallsCount, onClickAction: { ControlsViewModel.shared.goToCallsListEvent.notifyAllObservers(with: true) }) diff --git a/Resources/linphonerc b/Resources/linphonerc index 3270c2301..a4abe944d 100644 --- a/Resources/linphonerc +++ b/Resources/linphonerc @@ -21,6 +21,7 @@ use_callkit=1 unexpected_pushkit=0 force_lime_chat_rooms=0 disable_chat_feature=0 +disable_video_feature=0 [in_app_purchase] #set to 1 if in-app purchases are to be shown in the application