From 608577034dfb777eb879b12a2d7452bd9603e97b Mon Sep 17 00:00:00 2001 From: Christophe Deschamps Date: Fri, 26 Nov 2021 19:10:22 +0100 Subject: [PATCH] Video conference and new Call Views --- Classes/AudioHelper.m | 52 - Classes/Base.lproj/CallIncomingView.xib | 317 --- Classes/Base.lproj/CallOutgoingView.xib | 623 ------ Classes/Base.lproj/CallView.xib | 1857 ----------------- Classes/Base.lproj/CallView~ipad.xib | 1397 ------------- Classes/CallConferenceTableView.m | 65 - Classes/CallIncomingView.h | 54 - Classes/CallIncomingView.m | 150 -- Classes/CallManager.swift | 267 +-- Classes/CallOutgoingView.h | 61 - Classes/CallOutgoingView.m | 267 --- Classes/CallPausedTableView.m | 104 - Classes/CallSideMenuView.m | 230 -- Classes/CallSideMenuView.xib | 49 - Classes/CallView.h | 117 -- Classes/CallView.m | 1006 --------- Classes/ChatConversationImdnView.h | 1 + Classes/ChatConversationView.h | 1 - Classes/ChatConversationView.m | 4 +- Classes/Contact.m | 1 + Classes/DevicesListView.m | 2 + Classes/DialerView.m | 3 +- Classes/ImagePickerView.m | 163 +- Classes/LinphoneAppDelegate.h | 1 - Classes/LinphoneAppDelegate.m | 27 +- Classes/LinphoneCoreSettingsStore.m | 2 + Classes/LinphoneManager.h | 3 - Classes/LinphoneManager.m | 22 +- .../LinphoneUI/Base.lproj/StatusBarView.xib | 52 +- .../Base.lproj/UICallConferenceCell.xib | 76 - .../Base.lproj/UICallPausedCell.xib | 80 - Classes/LinphoneUI/UIBackToCallButton.m | 3 +- Classes/LinphoneUI/UIBluetoothButton.m | 2 - Classes/LinphoneUI/UICallButton.m | 2 + Classes/LinphoneUI/UICallConferenceCell.h | 37 - Classes/LinphoneUI/UICallConferenceCell.m | 69 - Classes/LinphoneUI/UICallPausedCell.h | 34 - Classes/LinphoneUI/UICallPausedCell.m | 60 - Classes/LinphoneUI/UIChatBubblePhotoCell.m | 2 + Classes/LinphoneUI/UIChatBubbleTextCell.m | 2 + Classes/LinphoneUI/UIHangUpButton.m | 111 - Classes/LinphoneUI/UIPauseButton.m | 180 -- Classes/LinphoneUI/UISpeakerButton.m | 61 - Classes/LinphoneUI/UIVideoButton.m | 114 - .../fr.lproj/UICallConferenceCell.strings | Bin 1516 -> 0 bytes .../fr.lproj/UICallPausedCell.strings | Bin 1518 -> 0 bytes .../hu.lproj/UICallConferenceCell.strings | Bin 1570 -> 0 bytes .../hu.lproj/UICallPausedCell.strings | Bin 1570 -> 0 bytes Classes/Log.h | 5 + Classes/PhoneMainView.h | 7 +- Classes/PhoneMainView.m | 48 +- Classes/ProviderDelegate.swift | 23 +- .../Extensions/IOS/OptionalExtensions.swift} | 20 +- .../IOS/UIApplication+Extension.swift | 39 + .../Extensions/IOS/UIColorExtensions.swift | 40 + .../Extensions/IOS/UIDeviceExtensions.swift | 57 + .../Extensions/IOS/UIImageExtensions.swift | 50 + .../IOS/UIImageViewExtensions.swift} | 15 +- .../IOS/UIVIewControllerExtensions.swift} | 18 +- .../Extensions/IOS/UIVIewExtensions.swift | 326 +++ .../LinphoneCore/AddressExtensions.swift | 55 + .../LinphoneCore/CallExtensions.swift | 48 + .../LinphoneCore/ConferenceExtensions.swift | 33 + .../LinphoneCore/CoreExtensions.swift | 48 + .../Extensions/LinphoneCore/IceState.swift | 35 + .../LinphoneCore/ParticipantExtensions.swift | 33 + .../LinphoneCore/PayloadType.swift} | 13 +- .../SwiftUtil/ViewModel/MutableLiveData.swift | 138 ++ Classes/Utils/AudioHelper.h | 36 - Classes/Utils/FileTransferDelegate.m | 2 + Classes/Utils/Log.m | 18 + Classes/Voip/AudioRouteUtils.swift | 191 ++ Classes/Voip/Models/CallData.swift | 181 ++ Classes/Voip/Models/CallStatisticsData.swift | 171 ++ Classes/Voip/Models/CallsViewModel.swift | 189 ++ .../Models/ConferenceParticipantData.swift | 52 + .../ConferenceParticipantDeviceData.swift | 90 + Classes/Voip/Models/ConferenceViewModel.swift | 292 +++ Classes/Voip/Models/ControlsViewModel.swift | 265 +++ .../Theme/ButtonTheme.swift} | 20 +- Classes/Voip/Theme/LightDarkColor.swift | 42 + Classes/Voip/Theme/TextStyle.swift | 61 + Classes/Voip/Theme/VoipTexts.swift | 137 ++ Classes/Voip/Theme/VoipTheme.swift | 342 +++ .../ActiveCallOrConferenceView.swift | 348 +++ .../IncomingCallView.swift | 81 + .../OutgoingCallView.swift | 102 + .../Fragments/ActiveCall/ActiveCallView.swift | 231 ++ .../Views/Fragments/AudioRoutesView.swift | 80 + .../Voip/Views/Fragments/CallStatsView.swift | 105 + .../Fragments/CallsList/CallsListView.swift | 139 ++ .../Fragments/CallsList/VoipCallCell.swift | 106 + .../CallsList/VoipCallContextMenu.swift | 160 ++ .../VoipActiveSpeakerParticipantCell.swift | 121 ++ .../VoipConferenceActiveSpeakerView.swift | 260 +++ ...ipConferenceDisplayModeSelectionView.swift | 140 ++ .../Conference/VoipConferenceGridView.swift | 242 +++ .../Conference/VoipGridParticipantCell.swift | 129 ++ .../Voip/Views/Fragments/ControlsView.swift | 109 + .../Views/Fragments/DismissableView.swift | 61 + .../IncomingOuntgoingCommonView.swift | 98 + .../Voip/Views/Fragments/LocalVideoView.swift | 87 + Classes/Voip/Views/Fragments/NumpadView.swift | 123 ++ .../ParticipantsListView.swift | 97 + .../VoipParticipantCell.swift | 113 + .../PausedCallOrConferenceView.swift | 70 + .../Views/Fragments/RemotelyRecording.swift | 61 + .../Fragments/VoipExtraButtonsView.swift | 133 ++ .../Views/SharedLayoutConstants.swift} | 14 +- Classes/Voip/VoipDialog.swift | 107 + Classes/Voip/Widgets/Avatar.swift | 60 + Classes/Voip/Widgets/BouncingCounter.swift | 75 + .../Widgets/ButtonWithStateBackgrounds.swift | 49 + Classes/Voip/Widgets/CallControlButton.swift | 92 + .../Widgets/RotatingSpinner.swift} | 44 +- Classes/Voip/Widgets/StyledLabel.swift | 34 + Classes/Voip/Widgets/UICallTimer.swift | 70 + Classes/Voip/Widgets/VoipExtraButton.swift | 75 + Classes/ar.lproj/CallIncomingView.strings | Bin 4446 -> 0 bytes Classes/ar.lproj/CallView.strings | Bin 19006 -> 0 bytes Classes/fr.lproj/CallIncomingView.strings | Bin 4530 -> 0 bytes Classes/fr.lproj/CallOutgoingView.strings | Bin 5694 -> 0 bytes Classes/fr.lproj/CallView.strings | Bin 19184 -> 0 bytes Classes/fr.lproj/CallView~ipad.strings | Bin 19186 -> 0 bytes Classes/hu.lproj/CallIncomingView.strings | Bin 4630 -> 0 bytes Classes/hu.lproj/CallOutgoingView.strings | Bin 5782 -> 0 bytes Classes/hu.lproj/CallView.strings | Bin 19318 -> 0 bytes Classes/hu.lproj/CallView~ipad.strings | Bin 19318 -> 0 bytes Classes/linphone-Bridging-Header.h | 7 +- Classes/ru.lproj/CallIncomingView.strings | Bin 4570 -> 0 bytes Classes/ru.lproj/CallView.strings | Bin 19146 -> 0 bytes Podfile | 1 + Resources/fonts/Roboto-Bold.ttf | Bin 0 -> 307304 bytes Resources/fonts/Roboto-Italic.ttf | Bin 0 -> 329008 bytes Resources/fonts/Roboto-Regular.ttf | Bin 0 -> 305972 bytes Resources/images/voip_audio_routes.png | Bin 0 -> 3729 bytes Resources/images/voip_bluetooth.png | Bin 0 -> 2557 bytes Resources/images/voip_call.png | Bin 0 -> 3830 bytes Resources/images/voip_call_add.png | Bin 0 -> 14157 bytes Resources/images/voip_call_chat.png | Bin 0 -> 13921 bytes Resources/images/voip_call_forward.png | Bin 0 -> 14584 bytes Resources/images/voip_call_header_active.png | Bin 0 -> 1787 bytes .../images/voip_call_header_incoming.png | Bin 0 -> 1298 bytes .../images/voip_call_header_outgoing.png | Bin 0 -> 1274 bytes Resources/images/voip_call_header_paused.png | Bin 0 -> 1119 bytes Resources/images/voip_call_list_menu.png | Bin 0 -> 750 bytes Resources/images/voip_call_more.png | Bin 0 -> 10488 bytes Resources/images/voip_call_numpad.png | Bin 0 -> 6726 bytes Resources/images/voip_call_participants.png | Bin 0 -> 15075 bytes Resources/images/voip_call_record.png | Bin 0 -> 3890 bytes Resources/images/voip_call_stats.png | Bin 0 -> 9124 bytes Resources/images/voip_calls_list.png | Bin 0 -> 14703 bytes Resources/images/voip_camera_off.png | Bin 0 -> 2971 bytes Resources/images/voip_camera_on.png | Bin 0 -> 1748 bytes Resources/images/voip_cancel.png | Bin 0 -> 1609 bytes Resources/images/voip_change_camera.png | Bin 0 -> 1831 bytes Resources/images/voip_chat_rooms_list.png | Bin 0 -> 4105 bytes .../images/voip_conference_active_speaker.png | Bin 0 -> 7818 bytes Resources/images/voip_conference_mosaic.png | Bin 0 -> 8850 bytes Resources/images/voip_conference_new.png | Bin 0 -> 6012 bytes .../images/voip_conference_paused_big.png | Bin 0 -> 2250 bytes Resources/images/voip_conference_play_big.png | Bin 0 -> 15790 bytes Resources/images/voip_copy.png | Bin 0 -> 1930 bytes Resources/images/voip_delete.png | Bin 0 -> 2223 bytes Resources/images/voip_dropdown.png | Bin 0 -> 1256 bytes Resources/images/voip_earpiece.png | Bin 0 -> 3857 bytes Resources/images/voip_edit.png | Bin 0 -> 1834 bytes Resources/images/voip_export.png | Bin 0 -> 2383 bytes Resources/images/voip_hangup.png | Bin 0 -> 3166 bytes Resources/images/voip_info.png | Bin 0 -> 13635 bytes Resources/images/voip_mandatory.png | Bin 0 -> 7410 bytes Resources/images/voip_menu_more.png | Bin 0 -> 1772 bytes Resources/images/voip_merge_calls.png | Bin 0 -> 4349 bytes Resources/images/voip_micro_off.png | Bin 0 -> 4208 bytes Resources/images/voip_micro_on.png | Bin 0 -> 3114 bytes .../images/voip_multiple_contacts_avatar.png | Bin 0 -> 6667 bytes Resources/images/voip_numpad_0.png | Bin 0 -> 14607 bytes Resources/images/voip_numpad_1.png | Bin 0 -> 10598 bytes Resources/images/voip_numpad_2.png | Bin 0 -> 8603 bytes Resources/images/voip_numpad_3.png | Bin 0 -> 8978 bytes Resources/images/voip_numpad_4.png | Bin 0 -> 7692 bytes Resources/images/voip_numpad_5.png | Bin 0 -> 8747 bytes Resources/images/voip_numpad_6.png | Bin 0 -> 10150 bytes Resources/images/voip_numpad_7.png | Bin 0 -> 7606 bytes Resources/images/voip_numpad_8.png | Bin 0 -> 10857 bytes Resources/images/voip_numpad_9.png | Bin 0 -> 10035 bytes Resources/images/voip_numpad_hash.png | Bin 0 -> 12417 bytes Resources/images/voip_numpad_star.png | Bin 0 -> 10163 bytes Resources/images/voip_pause.png | Bin 0 -> 830 bytes Resources/images/voip_radio_off.png | Bin 0 -> 590 bytes Resources/images/voip_radio_on.png | Bin 0 -> 650 bytes Resources/images/voip_remote_recording.png | Bin 0 -> 2673 bytes .../images/voip_single_contact_avatar.png | Bin 0 -> 4848 bytes Resources/images/voip_speaker_off.png | Bin 0 -> 3780 bytes Resources/images/voip_speaker_on.png | Bin 0 -> 2599 bytes Resources/images/voip_spinner.png | Bin 0 -> 2499 bytes linphone-Info.plist | 10 +- linphone.xcodeproj/project.pbxproj | 1196 +++++++---- linphone_Prefix.pch | 1 - 199 files changed, 7812 insertions(+), 8090 deletions(-) delete mode 100644 Classes/AudioHelper.m delete mode 100644 Classes/Base.lproj/CallIncomingView.xib delete mode 100644 Classes/Base.lproj/CallOutgoingView.xib delete mode 100644 Classes/Base.lproj/CallView.xib delete mode 100644 Classes/Base.lproj/CallView~ipad.xib delete mode 100644 Classes/CallConferenceTableView.m delete mode 100644 Classes/CallIncomingView.h delete mode 100644 Classes/CallIncomingView.m delete mode 100644 Classes/CallOutgoingView.h delete mode 100644 Classes/CallOutgoingView.m delete mode 100644 Classes/CallPausedTableView.m delete mode 100644 Classes/CallSideMenuView.m delete mode 100644 Classes/CallSideMenuView.xib delete mode 100644 Classes/CallView.h delete mode 100644 Classes/CallView.m delete mode 100644 Classes/LinphoneUI/Base.lproj/UICallConferenceCell.xib delete mode 100644 Classes/LinphoneUI/Base.lproj/UICallPausedCell.xib delete mode 100644 Classes/LinphoneUI/UICallConferenceCell.h delete mode 100644 Classes/LinphoneUI/UICallConferenceCell.m delete mode 100644 Classes/LinphoneUI/UICallPausedCell.h delete mode 100644 Classes/LinphoneUI/UICallPausedCell.m delete mode 100644 Classes/LinphoneUI/UIHangUpButton.m delete mode 100644 Classes/LinphoneUI/UIPauseButton.m delete mode 100644 Classes/LinphoneUI/UISpeakerButton.m delete mode 100644 Classes/LinphoneUI/UIVideoButton.m delete mode 100644 Classes/LinphoneUI/fr.lproj/UICallConferenceCell.strings delete mode 100644 Classes/LinphoneUI/fr.lproj/UICallPausedCell.strings delete mode 100644 Classes/LinphoneUI/hu.lproj/UICallConferenceCell.strings delete mode 100644 Classes/LinphoneUI/hu.lproj/UICallPausedCell.strings rename Classes/{CallConferenceTableView.h => SwiftUtil/Extensions/IOS/OptionalExtensions.swift} (79%) create mode 100644 Classes/SwiftUtil/Extensions/IOS/UIApplication+Extension.swift create mode 100644 Classes/SwiftUtil/Extensions/IOS/UIColorExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/IOS/UIDeviceExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/IOS/UIImageExtensions.swift rename Classes/{CallPausedTableView.h => SwiftUtil/Extensions/IOS/UIImageViewExtensions.swift} (78%) rename Classes/{LinphoneUI/UIVideoButton.h => SwiftUtil/Extensions/IOS/UIVIewControllerExtensions.swift} (72%) create mode 100644 Classes/SwiftUtil/Extensions/IOS/UIVIewExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/LinphoneCore/AddressExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/LinphoneCore/CallExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/LinphoneCore/ConferenceExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/LinphoneCore/CoreExtensions.swift create mode 100644 Classes/SwiftUtil/Extensions/LinphoneCore/IceState.swift create mode 100644 Classes/SwiftUtil/Extensions/LinphoneCore/ParticipantExtensions.swift rename Classes/{LinphoneUI/UISpeakerButton.h => SwiftUtil/Extensions/LinphoneCore/PayloadType.swift} (85%) create mode 100644 Classes/SwiftUtil/ViewModel/MutableLiveData.swift delete mode 100644 Classes/Utils/AudioHelper.h create mode 100644 Classes/Voip/AudioRouteUtils.swift create mode 100644 Classes/Voip/Models/CallData.swift create mode 100644 Classes/Voip/Models/CallStatisticsData.swift create mode 100644 Classes/Voip/Models/CallsViewModel.swift create mode 100644 Classes/Voip/Models/ConferenceParticipantData.swift create mode 100644 Classes/Voip/Models/ConferenceParticipantDeviceData.swift create mode 100644 Classes/Voip/Models/ConferenceViewModel.swift create mode 100644 Classes/Voip/Models/ControlsViewModel.swift rename Classes/{CallSideMenuView.h => Voip/Theme/ButtonTheme.swift} (70%) create mode 100644 Classes/Voip/Theme/LightDarkColor.swift create mode 100644 Classes/Voip/Theme/TextStyle.swift create mode 100644 Classes/Voip/Theme/VoipTexts.swift create mode 100644 Classes/Voip/Theme/VoipTheme.swift create mode 100644 Classes/Voip/Views/CompositeViewControllers/ActiveCallOrConferenceView.swift create mode 100644 Classes/Voip/Views/CompositeViewControllers/IncomingCallView.swift create mode 100644 Classes/Voip/Views/CompositeViewControllers/OutgoingCallView.swift create mode 100644 Classes/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift create mode 100644 Classes/Voip/Views/Fragments/AudioRoutesView.swift create mode 100644 Classes/Voip/Views/Fragments/CallStatsView.swift create mode 100644 Classes/Voip/Views/Fragments/CallsList/CallsListView.swift create mode 100644 Classes/Voip/Views/Fragments/CallsList/VoipCallCell.swift create mode 100644 Classes/Voip/Views/Fragments/CallsList/VoipCallContextMenu.swift create mode 100644 Classes/Voip/Views/Fragments/Conference/VoipActiveSpeakerParticipantCell.swift create mode 100644 Classes/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift create mode 100644 Classes/Voip/Views/Fragments/Conference/VoipConferenceDisplayModeSelectionView.swift create mode 100644 Classes/Voip/Views/Fragments/Conference/VoipConferenceGridView.swift create mode 100644 Classes/Voip/Views/Fragments/Conference/VoipGridParticipantCell.swift create mode 100644 Classes/Voip/Views/Fragments/ControlsView.swift create mode 100644 Classes/Voip/Views/Fragments/DismissableView.swift create mode 100644 Classes/Voip/Views/Fragments/IncomingOuntgoingCommonView.swift create mode 100644 Classes/Voip/Views/Fragments/LocalVideoView.swift create mode 100644 Classes/Voip/Views/Fragments/NumpadView.swift create mode 100644 Classes/Voip/Views/Fragments/ParticipantsList/ParticipantsListView.swift create mode 100644 Classes/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift create mode 100644 Classes/Voip/Views/Fragments/PausedCallOrConferenceView.swift create mode 100644 Classes/Voip/Views/Fragments/RemotelyRecording.swift create mode 100644 Classes/Voip/Views/Fragments/VoipExtraButtonsView.swift rename Classes/{LinphoneUI/UIHangUpButton.h => Voip/Views/SharedLayoutConstants.swift} (79%) create mode 100644 Classes/Voip/VoipDialog.swift create mode 100644 Classes/Voip/Widgets/Avatar.swift create mode 100644 Classes/Voip/Widgets/BouncingCounter.swift create mode 100644 Classes/Voip/Widgets/ButtonWithStateBackgrounds.swift create mode 100644 Classes/Voip/Widgets/CallControlButton.swift rename Classes/{LinphoneUI/UIPauseButton.h => Voip/Widgets/RotatingSpinner.swift} (50%) create mode 100644 Classes/Voip/Widgets/StyledLabel.swift create mode 100644 Classes/Voip/Widgets/UICallTimer.swift create mode 100644 Classes/Voip/Widgets/VoipExtraButton.swift delete mode 100644 Classes/ar.lproj/CallIncomingView.strings delete mode 100644 Classes/ar.lproj/CallView.strings delete mode 100644 Classes/fr.lproj/CallIncomingView.strings delete mode 100644 Classes/fr.lproj/CallOutgoingView.strings delete mode 100644 Classes/fr.lproj/CallView.strings delete mode 100644 Classes/fr.lproj/CallView~ipad.strings delete mode 100644 Classes/hu.lproj/CallIncomingView.strings delete mode 100644 Classes/hu.lproj/CallOutgoingView.strings delete mode 100644 Classes/hu.lproj/CallView.strings delete mode 100644 Classes/hu.lproj/CallView~ipad.strings delete mode 100644 Classes/ru.lproj/CallIncomingView.strings delete mode 100644 Classes/ru.lproj/CallView.strings create mode 100644 Resources/fonts/Roboto-Bold.ttf create mode 100644 Resources/fonts/Roboto-Italic.ttf create mode 100644 Resources/fonts/Roboto-Regular.ttf create mode 100644 Resources/images/voip_audio_routes.png create mode 100644 Resources/images/voip_bluetooth.png create mode 100644 Resources/images/voip_call.png create mode 100644 Resources/images/voip_call_add.png create mode 100644 Resources/images/voip_call_chat.png create mode 100644 Resources/images/voip_call_forward.png create mode 100644 Resources/images/voip_call_header_active.png create mode 100644 Resources/images/voip_call_header_incoming.png create mode 100644 Resources/images/voip_call_header_outgoing.png create mode 100644 Resources/images/voip_call_header_paused.png create mode 100644 Resources/images/voip_call_list_menu.png create mode 100644 Resources/images/voip_call_more.png create mode 100644 Resources/images/voip_call_numpad.png create mode 100644 Resources/images/voip_call_participants.png create mode 100644 Resources/images/voip_call_record.png create mode 100644 Resources/images/voip_call_stats.png create mode 100644 Resources/images/voip_calls_list.png create mode 100644 Resources/images/voip_camera_off.png create mode 100644 Resources/images/voip_camera_on.png create mode 100644 Resources/images/voip_cancel.png create mode 100644 Resources/images/voip_change_camera.png create mode 100644 Resources/images/voip_chat_rooms_list.png create mode 100644 Resources/images/voip_conference_active_speaker.png create mode 100644 Resources/images/voip_conference_mosaic.png create mode 100644 Resources/images/voip_conference_new.png create mode 100644 Resources/images/voip_conference_paused_big.png create mode 100644 Resources/images/voip_conference_play_big.png create mode 100644 Resources/images/voip_copy.png create mode 100644 Resources/images/voip_delete.png create mode 100644 Resources/images/voip_dropdown.png create mode 100644 Resources/images/voip_earpiece.png create mode 100644 Resources/images/voip_edit.png create mode 100644 Resources/images/voip_export.png create mode 100644 Resources/images/voip_hangup.png create mode 100644 Resources/images/voip_info.png create mode 100644 Resources/images/voip_mandatory.png create mode 100644 Resources/images/voip_menu_more.png create mode 100644 Resources/images/voip_merge_calls.png create mode 100644 Resources/images/voip_micro_off.png create mode 100644 Resources/images/voip_micro_on.png create mode 100644 Resources/images/voip_multiple_contacts_avatar.png create mode 100644 Resources/images/voip_numpad_0.png create mode 100644 Resources/images/voip_numpad_1.png create mode 100644 Resources/images/voip_numpad_2.png create mode 100644 Resources/images/voip_numpad_3.png create mode 100644 Resources/images/voip_numpad_4.png create mode 100644 Resources/images/voip_numpad_5.png create mode 100644 Resources/images/voip_numpad_6.png create mode 100644 Resources/images/voip_numpad_7.png create mode 100644 Resources/images/voip_numpad_8.png create mode 100644 Resources/images/voip_numpad_9.png create mode 100644 Resources/images/voip_numpad_hash.png create mode 100644 Resources/images/voip_numpad_star.png create mode 100644 Resources/images/voip_pause.png create mode 100644 Resources/images/voip_radio_off.png create mode 100644 Resources/images/voip_radio_on.png create mode 100644 Resources/images/voip_remote_recording.png create mode 100644 Resources/images/voip_single_contact_avatar.png create mode 100644 Resources/images/voip_speaker_off.png create mode 100644 Resources/images/voip_speaker_on.png create mode 100644 Resources/images/voip_spinner.png diff --git a/Classes/AudioHelper.m b/Classes/AudioHelper.m deleted file mode 100644 index 7298e65b3..000000000 --- a/Classes/AudioHelper.m +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "AudioHelper.h" - -@implementation AudioHelper - -+ (NSArray *)bluetoothRoutes { - return @[AVAudioSessionPortBluetoothHFP, AVAudioSessionPortCarAudio, AVAudioSessionPortBluetoothA2DP, AVAudioSessionPortBluetoothLE ]; -} - -+ (AVAudioSessionPortDescription *)bluetoothAudioDevice { - return [AudioHelper audioDeviceFromTypes:[AudioHelper bluetoothRoutes]]; -} - -+ (AVAudioSessionPortDescription *)builtinAudioDevice { - NSArray *builtinRoutes = @[ AVAudioSessionPortBuiltInMic ]; - return [AudioHelper audioDeviceFromTypes:builtinRoutes]; -} - -+ (AVAudioSessionPortDescription *)speakerAudioDevice { - NSArray *builtinRoutes = @[ AVAudioSessionPortBuiltInSpeaker ]; - return [AudioHelper audioDeviceFromTypes:builtinRoutes]; -} - -+ (AVAudioSessionPortDescription *)audioDeviceFromTypes:(NSArray *)types { - NSArray *routes = [[AVAudioSession sharedInstance] availableInputs]; - for (AVAudioSessionPortDescription *route in routes) { - if ([types containsObject:route.portType]) { - return route; - } - } - return nil; -} - -@end diff --git a/Classes/Base.lproj/CallIncomingView.xib b/Classes/Base.lproj/CallIncomingView.xib deleted file mode 100644 index ae5bd9336..000000000 --- a/Classes/Base.lproj/CallIncomingView.xib +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/Base.lproj/CallOutgoingView.xib b/Classes/Base.lproj/CallOutgoingView.xib deleted file mode 100644 index 890553e00..000000000 --- a/Classes/Base.lproj/CallOutgoingView.xib +++ /dev/null @@ -1,623 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/Base.lproj/CallView.xib b/Classes/Base.lproj/CallView.xib deleted file mode 100644 index 57a17a2c7..000000000 --- a/Classes/Base.lproj/CallView.xib +++ /dev/null @@ -1,1857 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05T -S2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBELDBkaHxQkKSoxNDdBSUpOUVUkbnVsbNYNDg8QERITFBUW -FxhWTlNTaXplXk5TUmVzaXppbmdNb2RlViRjbGFzc1xOU0ltYWdlRmxhZ3NWTlNSZXBzV05TQ29sb3KA -AhAAgBASIMAAAIADgAtYezMzLCAzM33SGw8cHlpOUy5vYmplY3RzoR2ABIAK0hsPICOiISKABYAGgAnT -DyUmJygUXxAUTlNUSUZGUmVwcmVzZW50YXRpb25fEBlOU0ludGVybmFsTGF5b3V0RGlyZWN0aW9ugAiA -B08RGbpNTQAqAAARDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAABAwMDFQYGBiYGBgYiAgICDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAIGBgYhCQkJNgkJCTEJCQkzCQkJMwMDAxQAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAxUKCgo2BQUFIAEBAQgCAgIMCAgIKwkJCTEBAQEHAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAEAwMDFAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBiMICAgwAAAABQAAAAAAAAAAAgIC -EQoKCjYCAgISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAACAgIOCgoKNQcHBy4DAwMSAAAAAQAAAAAAAAAAAAAAAAYGBiEICAgxAQEB -BwAAAAAAAAAAAwMDFAoKCjYCAgIQAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMPCQkJMgkJCTUJCQk0BAQEGQAAAAAAAAAAAAAA -AAUFBRsKCgo3BQUFHwAAAAAAAAAEBwcHLAkJCTMCAgIMAAAAAAAAAAABAQEHCAgIKwkJCS0GBgYiAgIC -EQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBRoJCQkyCQkJNAkJCTMKCgo1BAQE -FwAAAAAAAAAABAQEGQkJCTMICAgxAwMDFwAAAAAAAAADBQUFIgkJCTQHBwcuAgICDQAAAAAAAAAFBQUF -IQcHBykJCQkyCgoKNgcHBygBAQEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgYGHgoKCjYHBwcnBwcH -KAoKCjYHBwcnAAAAAgAAAAADAwMUCgoKNgcHBycBAQEJAAAAAAAAAAAAAAAAAAAAAQICAhIJCQkwCAgI -LwEBAQcAAAAAAAAAAAAAAAEAAAAGBQUFGwkJCTMICAgvAgICCgAAAAAAAAAAAAAAAAAAAAADAwMWCgoK -NgYGBiEAAAACAwMDEwgICC4CAgIKAAAAAAAAAAIHBwcsBwcHLAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAACAgIQCgoKNAUFBR0AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAw8JCQkyCAgIKgAAAAIAAAAAAAAA -AAAAAAQHBwcuBwcHLAAAAAQAAAAAAAAAAAAAAAIAAAAAAAAAAAICAgkJCQk0BQUFHAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAABCQkJLQcHBygAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQaCgoK -NQUFBSEFBQUfAwMDEgMDAxIKCgo2BAQEFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQgJCQkzCAgI -LwUFBSIFBQUaAwMDFQMDAxQDAwMUBAQEFgUFBRwHBwclCQkJNQcHBycAAAAAAAAAAAAAAAAAAAAAAAAA -AQUFBR8ICAgwCQkJMwkJCTQKCgo3BQUFHwYGBiEJCQk0AQEBCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAEEBAQYBwcHKQgICDAJCQkzCQkJNQkJCTUJCQk1CQkJNAkJCTMICAgvBgYGJAICAg4AAAAAAAAA -AAAAAAAAAAAAAAAAAQUFBR8JCQk0CQkJNAkJCTQHBwcqAAAABAYGBiUICAgvAAAABgAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUCAgILAwMDDwICAhEDAwMPAwMDDgEBAQkAAAADAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMTCQkJLQkJCTIDAwMOAAAAAAEBAQcCAgIMAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAQEBBgICAgwAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBBwUFBSAHBwcsCAgIKwUFBRwAAAADAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgoGBgYjBwcHLAcHByoEBAQYAAAAAQAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCAgIKgoKCjUICAgoCAgIKwkJCTYGBgYjAAAA -AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBCQgICC8JCQkzBwcHKAcHBywKCgo2BQUF -HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQXCgoKNgQEBBcAAAAAAAAA -AgUFBR8JCQk1AwMDDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUFHwkJCTQCAgIRAAAA -AAAAAAMGBgYmCQkJMgEBAQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUgCQkJ -MgAAAAQAAAAAAAAAAAICAgwJCQk1BAQEFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcH -KQgICCsAAAABAAAAAAAAAAADAwMUCQkJNQICAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAEBAQYCQkJNQICAhAAAAAAAAAAAAQEBBgJCQk1AgICEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAABQUFIQkJCTEBAQEKAAAAAAAAAAEFBQUgCQkJMwEBAQoAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAMGBgYeCgoKNwYGBiYAAAAAAAAAAggICC4JCQk1BAQEGAAAAAEAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAFBgYGJQoKCjgFBQUfAAAAAAEBAQgJCQkyCAgIMgICAhEAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwYGBiMJCQk2BwcHJwICAg0AAAAAAAAAAAMDAxIICAgrCQkJ -NgUFBR0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYHBwcqCQkJNQYGBiMBAQEKAAAAAAAAAAEDAwMXCAgI -LgkJCTQEBAQWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUFGgoKCjYFBQUdAAAAAQAAAAAAAAAAAAAA -AAAAAAAAAAAEBgYGJAoKCjUCAgIRAAAAAAAAAAAAAAAAAAAAAAYGBiEKCgo1BAQEFwAAAAAAAAAAAAAA -AAAAAAAAAAAAAQEBCAgICCoJCQkzAgICCwAAAAAAAAAAAAAAAAAAAAAAAAAECQkJLQcHBykAAAABAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgICC8HBwcnAAAAAAAAAAAAAAAAAQEBCAkJCTIFBQUiAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQoJCQk0BQUFHgAAAAAAAAAAAAAAAAAAAAABAQEICQkJ -MQYGBiMAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAQEBBggICCoHBwctAAAAAgAAAAAAAAAAAgIC -DQoKCjUFBQUcAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgEBAQoICAgvBgYGJgAAAAAAAAAAAAAA -AAAAAAAAAAAEBwcHLAkJCTUICAgxCAgIKQYGBiQGBgYjBgYGIwYGBiQICAgqCQkJMgkJCTUHBwcmAAAA -AAAAAAAAAAAAAQEBCQgICDAJCQk1CAgILwcHBygGBgYjBgYGIwYGBiMGBgYlBwcHLAkJCTMJCQk2BgYG -HgAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBCQMDAxYFBQUiCAgIKggICDAICAgxCAgIMAgICC8HBwcpBQUF -IAMDAxQBAQEGAAAAAAAAAAAAAAAAAAAAAAICAgwEBAQYBgYGIwgICCsICAgwCAgIMAgICDAICAguBwcH -KAUFBR4DAwMSAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAA -AgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAA -AwAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEBAQkDAwMPAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFBQUfBwcHLQkJCTIJCQk1AwMDDwAAAAAAAAAAAAAA -AAAAAAAEBAQXBQUFHwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMICAguCQkJNAkJCTQHBwctAQEB -CAAAAAIAAAAFAgICDQYGBiQKCgo2BwcHJwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYlCQkJ -NQkJCTQJCQk0CQkJLQgICCoICAguCQkJNQkJCTMEBAQfAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAFBQUcCgoKNgUFBR8FBQUaBwcHJgcHBykHBwcmBQUFGwICAgoAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAABAQELBgYGIQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAwAAAAEA -IQAAAQEAAwAAAAEAIQAAAQIAAwAAAAQAABHSAQMAAwAAAAEAAQAAAQYAAwAAAAEAAgAAAQoAAwAAAAEA -AQAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEABAAAARYAAwAAAAEAIQAAARcABAAAAAEA -ABEEARwAAwAAAAEAAQAAASgAAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAQAABHah3MABwAAB9gA -ABHiAAAAAAAIAAgACAAIAAEAAQABAAEAAAfYYXBwbAIgAABtbnRyUkdCIFhZWiAH2QACABkACwAaAAth -Y3NwQVBQTAAAAABhcHBsAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAAAG9kc2NtAAABeAAABZxj -cHJ0AAAHFAAAADh3dHB0AAAHTAAAABRyWFlaAAAHYAAAABRnWFlaAAAHdAAAABRiWFlaAAAHiAAAABRy -VFJDAAAHnAAAAA5jaGFkAAAHrAAAACxiVFJDAAAHnAAAAA5nVFJDAAAHnAAAAA5kZXNjAAAAAAAAABRH -ZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAfAAAADHNrU0sA -AAAoAAABhGRhREsAAAAuAAABrGNhRVMAAAAkAAAB2nZpVk4AAAAkAAAB/nB0QlIAAAAmAAACInVrVUEA -AAAqAAACSGZyRlUAAAAoAAACcmh1SFUAAAAoAAACmnpoVFcAAAAWAAACwm5iTk8AAAAmAAAC2GNzQ1oA -AAAiAAAC/mhlSUwAAAAeAAADIGl0SVQAAAAoAAADPnJvUk8AAAAkAAADZmRlREUAAAAsAAADimtvS1IA -AAAWAAADtnN2U0UAAAAmAAAC2HpoQ04AAAAWAAADzGphSlAAAAAaAAAD4mVsR1IAAAAiAAAD/HB0UE8A -AAAmAAAEHm5sTkwAAAAoAAAERGVzRVMAAAAmAAAEHnRoVEgAAAAkAAAEbHRyVFIAAAAiAAAEkGZpRkkA -AAAoAAAEsmhySFIAAAAoAAAE2nBsUEwAAAAsAAAFAnJ1UlUAAAAiAAAFLmFyRUcAAAAmAAAFUGVuVVMA -AAAmAAAFdgBWAWEAZQBvAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwARwBlAG4AZQByAGUA -bAAgAFIARwBCAC0AYgBlAHMAawByAGkAdgBlAGwAcwBlAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUA -bgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAA -UgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAA -UgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4A -bwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAIABSAEcAQgAggnJfaWPPj/AARwBlAG4AZQByAGkA -cwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF -5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAbwAgAFIARwBCACAAZwBlAG4A -ZQByAGkAYwBvAFAAcgBvAGYAaQBsACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAEEAbABsAGcAZQBtAGUA -aQBuAGUAcwAgAFIARwBCAC0AUAByAG8AZgBpAGzHfLwYACAAUgBHAEIAINUEuFzTDMd8Zm6QGgAgAFIA -RwBCACBjz4/wZYdO9k4AgiwAIABSAEcAQgAgMNcw7TDVMKEwpDDrA5MDtQO9A7kDugPMACADwAPBA78D -xgOvA7sAIABSAEcAQgBQAGUAcgBmAGkAbAAgAFIARwBCACAAZwBlAG4A6QByAGkAYwBvAEEAbABnAGUA -bQBlAGUAbgAgAFIARwBCAC0AcAByAG8AZgBpAGUAbA5CDhsOIw5EDh8OJQ5MACAAUgBHAEIAIA4XDjEO -SA4nDkQOGwBHAGUAbgBlAGwAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGkAWQBsAGUAaQBuAGUAbgAgAFIA -RwBCAC0AcAByAG8AZgBpAGkAbABpAEcAZQBuAGUAcgBpAQ0AawBpACAAUgBHAEIAIABwAHIAbwBmAGkA -bABVAG4AaQB3AGUAcgBzAGEAbABuAHkAIABwAHIAbwBmAGkAbAAgAFIARwBCBB4EMQRJBDgEOQAgBD8E -QAQ+BEQEOAQ7BEwAIABSAEcAQgZFBkQGQQAgBioGOQYxBkoGQQAgAFIARwBCACAGJwZEBjkGJwZFAEcA -ZQBuAGUAcgBpAGMAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGV0ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFw -cGxlIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuAFhZWiAAAAAAAADzUgABAAAAARbPWFlaIAAAAAAA -AHRNAAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAAAAAAAAAoGgAAFZ8AALg2Y3VydgAAAAAA -AAABAc0AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui///9owAAA9wAAMBs0issLS5aJGNs -YXNzbmFtZVgkY2xhc3Nlc18QEE5TQml0bWFwSW1hZ2VSZXCjLS8wWk5TSW1hZ2VSZXBYTlNPYmplY3TS -KywyM1dOU0FycmF5ojIw0issNTZeTlNNdXRhYmxlQXJyYXmjNTIw1Tg5OjsPPD0+P0BXTlNXaGl0ZVxO -U0NvbXBvbmVudHNcTlNDb2xvclNwYWNlXxASTlNDdXN0b21Db2xvclNwYWNlRDAgMABDMCAwEAOADIAP -1EJDRA9FRkdIVE5TSURVTlNJQ0NXTlNNb2RlbBAJgA0QAIAOTxERnAAAEZxhcHBsAgAAAG1udHJHUkFZ -WFlaIAfcAAgAFwAPAC4AD2Fjc3BBUFBMAAAAAG5vbmUAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMt -YXBwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWRlc2MAAADA -AAAAeWRzY20AAAE8AAAIGmNwcnQAAAlYAAAAI3d0cHQAAAl8AAAAFGtUUkMAAAmQAAAIDGRlc2MAAAAA -AAAAH0dlbmVyaWMgR3JheSBHYW1tYSAyLjIgUHJvZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVj -AAAAAAAAAB8AAAAMc2tTSwAAAC4AAAGEZGFESwAAADoAAAGyY2FFUwAAADgAAAHsdmlWTgAAAEAAAAIk -cHRCUgAAAEoAAAJkdWtVQQAAACwAAAKuZnJGVQAAAD4AAALaaHVIVQAAADQAAAMYemhUVwAAABoAAANM -a29LUgAAACIAAANmbmJOTwAAADoAAAOIY3NDWgAAACgAAAPCaGVJTAAAACQAAAPqcm9STwAAACoAAAQO -ZGVERQAAAE4AAAQ4aXRJVAAAAE4AAASGc3ZTRQAAADgAAATUemhDTgAAABoAAAUMamFKUAAAACYAAAUm -ZWxHUgAAACoAAAVMcHRQTwAAAFIAAAV2bmxOTAAAAEAAAAXIZXNFUwAAAEwAAAYIdGhUSAAAADIAAAZU -dHJUUgAAACQAAAaGZmlGSQAAAEYAAAaqaHJIUgAAAD4AAAbwcGxQTAAAAEoAAAcuYXJFRwAAACwAAAd4 -cnVSVQAAADoAAAekZW5VUwAAADwAAAfeAFYBYQBlAG8AYgBlAGMAbgDhACAAcwBpAHYA4QAgAGcAYQBt -AGEAIAAyACwAMgBHAGUAbgBlAHIAaQBzAGsAIABnAHIA5QAgADIALAAyACAAZwBhAG0AbQBhAC0AcABy -AG8AZgBpAGwARwBhAG0AbQBhACAAZABlACAAZwByAGkAcwBvAHMAIABnAGUAbgDoAHIAaQBjAGEAIAAy -AC4AMgBDHqUAdQAgAGgA7ABuAGgAIABNAOAAdQAgAHgA4QBtACAAQwBoAHUAbgBnACAARwBhAG0AbQBh -ACAAMgAuADIAUABlAHIAZgBpAGwAIABHAGUAbgDpAHIAaQBjAG8AIABkAGEAIABHAGEAbQBhACAAZABl -ACAAQwBpAG4AegBhAHMAIAAyACwAMgQXBDAEMwQwBDsETAQ9BDAAIABHAHIAYQB5AC0EMwQwBDwEMAAg -ADIALgAyAFAAcgBvAGYAaQBsACAAZwDpAG4A6QByAGkAcQB1AGUAIABnAHIAaQBzACAAZwBhAG0AbQBh -ACAAMgAsADIAwQBsAHQAYQBsAOEAbgBvAHMAIABzAHoA/AByAGsAZQAgAGcAYQBtAG0AYQAgADIALgAy -kBp1KHBwlo5RSV6mADIALgAygnJfaWPPj/DHfLwYACDWjMDJACCsELnIACAAMgAuADIAINUEuFzTDMd8 -AEcAZQBuAGUAcgBpAHMAawAgAGcAcgDlACAAZwBhAG0AbQBhACAAMgAsADIALQBwAHIAbwBmAGkAbABP -AGIAZQBjAG4A4QAgAWEAZQBkAOEAIABnAGEAbQBhACAAMgAuADIF0gXQBd4F1AAgBdAF5AXVBegAIAXb -BdwF3AXZACAAMgAuADIARwBhAG0AYQAgAGcAcgBpACAAZwBlAG4AZQByAGkAYwEDACAAMgAsADIAQQBs -AGwAZwBlAG0AZQBpAG4AZQBzACAARwByAGEAdQBzAHQAdQBmAGUAbgAtAFAAcgBvAGYAaQBsACAARwBh -AG0AbQBhACAAMgAsADIAUAByAG8AZgBpAGwAbwAgAGcAcgBpAGcAaQBvACAAZwBlAG4AZQByAGkAYwBv -ACAAZABlAGwAbABhACAAZwBhAG0AbQBhACAAMgAsADIARwBlAG4AZQByAGkAcwBrACAAZwByAOUAIAAy -ACwAMgAgAGcAYQBtAG0AYQBwAHIAbwBmAGkAbGZukBpwcF6mfPtlcAAyAC4AMmPPj/Blh072TgCCLDCw -MOwwpDCsMPMw3gAgADIALgAyACAw1zDtMNUwoTCkMOsDkwO1A70DuQO6A8wAIAOTA7oDwQO5ACADkwOs -A7wDvAOxACAAMgAuADIAUABlAHIAZgBpAGwAIABnAGUAbgDpAHIAaQBjAG8AIABkAGUAIABjAGkAbgB6 -AGUAbgB0AG8AcwAgAGQAYQAgAEcAYQBtAG0AYQAgADIALAAyAEEAbABnAGUAbQBlAGUAbgAgAGcAcgBp -AGoAcwAgAGcAYQBtAG0AYQAgADIALAAyAC0AcAByAG8AZgBpAGUAbABQAGUAcgBmAGkAbAAgAGcAZQBu -AOkAcgBpAGMAbwAgAGQAZQAgAGcAYQBtAG0AYQAgAGQAZQAgAGcAcgBpAHMAZQBzACAAMgAsADIOIw4x -DgcOKg41DkEOAQ4hDiEOMg5ADgEOIw4iDkwOFw4xDkgOJw5EDhsAIAAyAC4AMgBHAGUAbgBlAGwAIABH -AHIAaQAgAEcAYQBtAGEAIAAyACwAMgBZAGwAZQBpAG4AZQBuACAAaABhAHIAbQBhAGEAbgAgAGcAYQBt -AG0AYQAgADIALAAyACAALQBwAHIAbwBmAGkAaQBsAGkARwBlAG4AZQByAGkBDQBrAGkAIABHAHIAYQB5 -ACAARwBhAG0AbQBhACAAMgAuADIAIABwAHIAbwBmAGkAbABVAG4AaQB3AGUAcgBzAGEAbABuAHkAIABw -AHIAbwBmAGkAbAAgAHMAegBhAHIAbwFbAGMAaQAgAGcAYQBtAG0AYQAgADIALAAyBjoGJwZFBicAIAAy -AC4AMgAgBkQGSAZGACAGMQZFBicGLwZKACAGOQYnBkUEHgQxBEkEMARPACAEQQQ1BEAEMARPACAEMwQw -BDwEPAQwACAAMgAsADIALQQ/BEAEPgREBDgEOwRMAEcAZQBuAGUAcgBpAGMAIABHAHIAYQB5ACAARwBh -AG0AbQBhACAAMgAuADIAIABQAHIAbwBmAGkAbABlAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBJbmMu -LCAyMDEyAABYWVogAAAAAAAA81EAAQAAAAEWzGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAt -ADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADB -AMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1 -AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJx -AnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6 -A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVY -BWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdP -B2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmk -CboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxc -DHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96 -D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMD -EyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6 -Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtj -G4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBB -IGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWX -Jccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitp -K50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6 -MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiM -OMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/i -QCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fA -SAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAn -UHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1ka -WWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKc -YvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yv -bQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdW -d7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKS -gvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45m -js6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrV -m0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfg -qFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WK -tgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPU -xFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB -00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT -4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM -8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//0issS0xcTlNDb2xv -clNwYWNlok0wXE5TQ29sb3JTcGFjZdIrLE9QV05TQ29sb3KiTzDSKyxSU1dOU0ltYWdlolIwAAgAEQAa -ACQAKQAyADcASQBMAFEAUwBnAG0AegCBAJAAlwCkAKsAswC1ALcAuQC+AMAAwgDLANAA2wDdAN8A4QDm -AOkA6wDtAO8A9gENASkBKwEtGusa8Br7GwQbFxsbGyYbLxs0GzwbPxtEG1MbVxtiG2obdxuEG5kbnhui -G6QbphuoG7Ebthu8G8QbxhvIG8obzC1sLXEtfi2BLY4tky2bLZ4toy2rAAAAAAAAAgEAAAAAAAAAVAAA -AAAAAAAAAAAAAAAALa4 - - - - - -YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05T -S2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBELDBkaHxQkKSoxNDdBSUpOUVUkbnVsbNYNDg8QERITFBUW -FxhWTlNTaXplXk5TUmVzaXppbmdNb2RlViRjbGFzc1xOU0ltYWdlRmxhZ3NWTlNSZXBzV05TQ29sb3KA -AhAAgBASIMAAAIADgAtYezQwLCAzNn3SGw8cHlpOUy5vYmplY3RzoR2ABIAK0hsPICOiISKABYAGgAnT -DyUmJygUXxAUTlNUSUZGUmVwcmVzZW50YXRpb25fEBlOU0ludGVybmFsTGF5b3V0RGlyZWN0aW9ugAiA -B08RHzZNTQAqAAAWiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAABhgAABkYAAAZBQAABgAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAOwABPJsABJ7IAAXMyAAFzJ0ABKA/AAFBAQAAAgAAAAAAAAAAAAAAAAAAAAACAgICAQEB -AQAAAAAKCgoKBAQEBAAAAAAAAAAACQkJCQkJCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCQkHBwcHAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQACS9gABtz7AAf/+wAH -//sAB//7AAf/2wAG31AAAlIAAAAAAAAAAAAAAAAAAAAAW1tbW6KioqKZmZmZ29vb22BgYGIICAgIh4eH -icnJycnJycnKenp6fAcHBwcAAAAAEhISEpOTk5XS0tLTy8vLzHh4eHoHBwcHAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAF7wABcD7AAf/+wAH//sAB//7AAf/+wAH//sAB//AAAXEGgAA -GwAAAAAAAAAAAAAAAHBwcHD/////gYGBgygoKCoNDQ0NiIiIiq6urq8XFxcXFxcXGbm5ublycnJyAAAA -AJiYmJnBwcHBKCgoKC0tLS/T09PUV1dXVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AEQAAUbrAAbv+wAH//sAB//7AAf/+wAH//sAB//7AAf/7AAG8EoAAkwAAAAAAAAAAAAAAAB0dHR00NDQ -0AAAAAAAAAAABwcHB9TU1NWRkZGTY2NjY2NjY2Ojo6OjyMjIyBYWFhbd3d3dOzs7PQAAAAAAAAAAFxcX -GRUVFRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAJU8gAG9vsAB//7AAf/+wAH -//sAB//7AAf/+wAH//QABvhcAAJeAAAAAAAAAAAAAAAAdnZ2dre3t7cAAAAAAAAAAA4ODg7g4ODhoaGh -oYyMjIyMjIyMhoaGhlJSUlQcHBwc4eHh4ioqKioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAOAABOeQABuj7AAf/+wAH//sAB//7AAf/+wAH//sAB//mAAbqPgAB -PwAAAAAAAAAAAAAAAHZ2dna4uLi4AAAAAAAAAAAEBAQEwsLCw2JiYmIAAAAAAAAAADMzMzNeXl5eCQkJ -Cc3Nzc5paWlpAAAAAAAAAABxcXFzWVlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAsAAAyiAASl+wAH//sAB//7AAf/+wAH//sAB//7AAf/pgAEqQ8AABAAAAAAAAAAAAAAAAB4eHh4vLy8 -vAAAAAAAAAAAAAAAAEhISEjX19fYmZmZmouLi43a2trbYmJiZAAAAABRUVFT39/f35ubm5yenp6f3Nzc -3Tk5OTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgABK7QABbf1AAb5+wAH -//sAB//2AAb6tgAFuSwAAS0AAAAAAAAAAAAAAAAAAAAAKioqKkFBQUMAAAAAAAAAAAAAAAAAAAAAJiYm -KG5ubnBxcXFzMjIyNAAAAAAAAAAAAAAAADAwMDB0dHR0bGxsbiMjIyMAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAaYwACZZYABJmVAASYZQACZxwAAB0AAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAFAAAGBAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAQAQAAAwAAAAEAKAAAAQEAAwAAAAEAJAAAAQIAAwAAAAQAABdOAQMAAwAAAAEA -AQAAAQYAAwAAAAEAAgAAAQoAAwAAAAEAAQAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEA -BAAAARYAAwAAAAEAJAAAARcABAAAAAEAABaAARwAAwAAAAEAAQAAASgAAwAAAAEAAgAAAVIAAwAAAAEA -AQAAAVMAAwAAAAQAABdWh3MABwAAB9gAABdeAAAAAAAIAAgACAAIAAEAAQABAAEAAAfYYXBwbAIgAABt -bnRyUkdCIFhZWiAH2QACABkACwAaAAthY3NwQVBQTAAAAABhcHBsAAAAAAAAAAAAAAAAAAAAAAAA9tYA -AQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtk -ZXNjAAABCAAAAG9kc2NtAAABeAAABZxjcHJ0AAAHFAAAADh3dHB0AAAHTAAAABRyWFlaAAAHYAAAABRn -WFlaAAAHdAAAABRiWFlaAAAHiAAAABRyVFJDAAAHnAAAAA5jaGFkAAAHrAAAACxiVFJDAAAHnAAAAA5n -VFJDAAAHnAAAAA5kZXNjAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAUR2VuZXJp -YyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAbWx1YwAAAAAAAAAfAAAADHNrU0sAAAAoAAABhGRhREsAAAAuAAABrGNhRVMAAAAkAAAB2nZpVk4A -AAAkAAAB/nB0QlIAAAAmAAACInVrVUEAAAAqAAACSGZyRlUAAAAoAAACcmh1SFUAAAAoAAACmnpoVFcA -AAAWAAACwm5iTk8AAAAmAAAC2GNzQ1oAAAAiAAAC/mhlSUwAAAAeAAADIGl0SVQAAAAoAAADPnJvUk8A -AAAkAAADZmRlREUAAAAsAAADimtvS1IAAAAWAAADtnN2U0UAAAAmAAAC2HpoQ04AAAAWAAADzGphSlAA -AAAaAAAD4mVsR1IAAAAiAAAD/HB0UE8AAAAmAAAEHm5sTkwAAAAoAAAERGVzRVMAAAAmAAAEHnRoVEgA -AAAkAAAEbHRyVFIAAAAiAAAEkGZpRkkAAAAoAAAEsmhySFIAAAAoAAAE2nBsUEwAAAAsAAAFAnJ1UlUA -AAAiAAAFLmFyRUcAAAAmAAAFUGVuVVMAAAAmAAAFdgBWAWEAZQBvAGIAZQBjAG4A/QAgAFIARwBCACAA -cAByAG8AZgBpAGwARwBlAG4AZQByAGUAbAAgAFIARwBCAC0AYgBlAHMAawByAGkAdgBlAGwAcwBlAFAA -ZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAA -QwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwE -PQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUA -ZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAIABSAEcA -QgAggnJfaWPPj/AARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A -/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8A -ZgBpAGwAbwAgAFIARwBCACAAZwBlAG4AZQByAGkAYwBvAFAAcgBvAGYAaQBsACAAUgBHAEIAIABnAGUA -bgBlAHIAaQBjAEEAbABsAGcAZQBtAGUAaQBuAGUAcwAgAFIARwBCAC0AUAByAG8AZgBpAGzHfLwYACAA -UgBHAEIAINUEuFzTDMd8Zm6QGgAgAFIARwBCACBjz4/wZYdO9k4AgiwAIABSAEcAQgAgMNcw7TDVMKEw -pDDrA5MDtQO9A7kDugPMACADwAPBA78DxgOvA7sAIABSAEcAQgBQAGUAcgBmAGkAbAAgAFIARwBCACAA -ZwBlAG4A6QByAGkAYwBvAEEAbABnAGUAbQBlAGUAbgAgAFIARwBCAC0AcAByAG8AZgBpAGUAbA5CDhsO -Iw5EDh8OJQ5MACAAUgBHAEIAIA4XDjEOSA4nDkQOGwBHAGUAbgBlAGwAIABSAEcAQgAgAFAAcgBvAGYA -aQBsAGkAWQBsAGUAaQBuAGUAbgAgAFIARwBCAC0AcAByAG8AZgBpAGkAbABpAEcAZQBuAGUAcgBpAQ0A -awBpACAAUgBHAEIAIABwAHIAbwBmAGkAbABVAG4AaQB3AGUAcgBzAGEAbABuAHkAIABwAHIAbwBmAGkA -bAAgAFIARwBCBB4EMQRJBDgEOQAgBD8EQAQ+BEQEOAQ7BEwAIABSAEcAQgZFBkQGQQAgBioGOQYxBkoG -QQAgAFIARwBCACAGJwZEBjkGJwZFAEcAZQBuAGUAcgBpAGMAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGV0 -ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFwcGxlIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuAFhZWiAA -AAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHRNAAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAA -AAAAAAAoGgAAFZ8AALg2Y3VydgAAAAAAAAABAc0AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH/ -//ui///9owAAA9wAAMBs0issLS5aJGNsYXNzbmFtZVgkY2xhc3Nlc18QEE5TQml0bWFwSW1hZ2VSZXCj -LS8wWk5TSW1hZ2VSZXBYTlNPYmplY3TSKywyM1dOU0FycmF5ojIw0issNTZeTlNNdXRhYmxlQXJyYXmj -NTIw1Tg5OjsPPD0+P0BXTlNXaGl0ZVxOU0NvbXBvbmVudHNcTlNDb2xvclNwYWNlXxASTlNDdXN0b21D -b2xvclNwYWNlRDAgMABDMCAwEAOADIAP1EJDRA9FRkdIVE5TSURVTlNJQ0NXTlNNb2RlbBAJgA0QAIAO -TxERnAAAEZxhcHBsAgAAAG1udHJHUkFZWFlaIAfcAAgAFwAPAC4AD2Fjc3BBUFBMAAAAAG5vbmUAAAAA -AAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAABWRlc2MAAADAAAAAeWRzY20AAAE8AAAIGmNwcnQAAAlYAAAAI3d0cHQAAAl8 -AAAAFGtUUkMAAAmQAAAIDGRlc2MAAAAAAAAAH0dlbmVyaWMgR3JheSBHYW1tYSAyLjIgUHJvZmlsZQAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAB8AAAAMc2tTSwAAAC4AAAGEZGFESwAAADoAAAGy -Y2FFUwAAADgAAAHsdmlWTgAAAEAAAAIkcHRCUgAAAEoAAAJkdWtVQQAAACwAAAKuZnJGVQAAAD4AAALa -aHVIVQAAADQAAAMYemhUVwAAABoAAANMa29LUgAAACIAAANmbmJOTwAAADoAAAOIY3NDWgAAACgAAAPC -aGVJTAAAACQAAAPqcm9STwAAACoAAAQOZGVERQAAAE4AAAQ4aXRJVAAAAE4AAASGc3ZTRQAAADgAAATU -emhDTgAAABoAAAUMamFKUAAAACYAAAUmZWxHUgAAACoAAAVMcHRQTwAAAFIAAAV2bmxOTAAAAEAAAAXI -ZXNFUwAAAEwAAAYIdGhUSAAAADIAAAZUdHJUUgAAACQAAAaGZmlGSQAAAEYAAAaqaHJIUgAAAD4AAAbw -cGxQTAAAAEoAAAcuYXJFRwAAACwAAAd4cnVSVQAAADoAAAekZW5VUwAAADwAAAfeAFYBYQBlAG8AYgBl -AGMAbgDhACAAcwBpAHYA4QAgAGcAYQBtAGEAIAAyACwAMgBHAGUAbgBlAHIAaQBzAGsAIABnAHIA5QAg -ADIALAAyACAAZwBhAG0AbQBhAC0AcAByAG8AZgBpAGwARwBhAG0AbQBhACAAZABlACAAZwByAGkAcwBv -AHMAIABnAGUAbgDoAHIAaQBjAGEAIAAyAC4AMgBDHqUAdQAgAGgA7ABuAGgAIABNAOAAdQAgAHgA4QBt -ACAAQwBoAHUAbgBnACAARwBhAG0AbQBhACAAMgAuADIAUABlAHIAZgBpAGwAIABHAGUAbgDpAHIAaQBj -AG8AIABkAGEAIABHAGEAbQBhACAAZABlACAAQwBpAG4AegBhAHMAIAAyACwAMgQXBDAEMwQwBDsETAQ9 -BDAAIABHAHIAYQB5AC0EMwQwBDwEMAAgADIALgAyAFAAcgBvAGYAaQBsACAAZwDpAG4A6QByAGkAcQB1 -AGUAIABnAHIAaQBzACAAZwBhAG0AbQBhACAAMgAsADIAwQBsAHQAYQBsAOEAbgBvAHMAIABzAHoA/ABy -AGsAZQAgAGcAYQBtAG0AYQAgADIALgAykBp1KHBwlo5RSV6mADIALgAygnJfaWPPj/DHfLwYACDWjMDJ -ACCsELnIACAAMgAuADIAINUEuFzTDMd8AEcAZQBuAGUAcgBpAHMAawAgAGcAcgDlACAAZwBhAG0AbQBh -ACAAMgAsADIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A4QAgAWEAZQBkAOEAIABnAGEAbQBhACAAMgAu -ADIF0gXQBd4F1AAgBdAF5AXVBegAIAXbBdwF3AXZACAAMgAuADIARwBhAG0AYQAgAGcAcgBpACAAZwBl -AG4AZQByAGkAYwEDACAAMgAsADIAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAARwByAGEAdQBzAHQAdQBm -AGUAbgAtAFAAcgBvAGYAaQBsACAARwBhAG0AbQBhACAAMgAsADIAUAByAG8AZgBpAGwAbwAgAGcAcgBp -AGcAaQBvACAAZwBlAG4AZQByAGkAYwBvACAAZABlAGwAbABhACAAZwBhAG0AbQBhACAAMgAsADIARwBl -AG4AZQByAGkAcwBrACAAZwByAOUAIAAyACwAMgAgAGcAYQBtAG0AYQBwAHIAbwBmAGkAbGZukBpwcF6m -fPtlcAAyAC4AMmPPj/Blh072TgCCLDCwMOwwpDCsMPMw3gAgADIALgAyACAw1zDtMNUwoTCkMOsDkwO1 -A70DuQO6A8wAIAOTA7oDwQO5ACADkwOsA7wDvAOxACAAMgAuADIAUABlAHIAZgBpAGwAIABnAGUAbgDp -AHIAaQBjAG8AIABkAGUAIABjAGkAbgB6AGUAbgB0AG8AcwAgAGQAYQAgAEcAYQBtAG0AYQAgADIALAAy -AEEAbABnAGUAbQBlAGUAbgAgAGcAcgBpAGoAcwAgAGcAYQBtAG0AYQAgADIALAAyAC0AcAByAG8AZgBp -AGUAbABQAGUAcgBmAGkAbAAgAGcAZQBuAOkAcgBpAGMAbwAgAGQAZQAgAGcAYQBtAG0AYQAgAGQAZQAg -AGcAcgBpAHMAZQBzACAAMgAsADIOIw4xDgcOKg41DkEOAQ4hDiEOMg5ADgEOIw4iDkwOFw4xDkgOJw5E -DhsAIAAyAC4AMgBHAGUAbgBlAGwAIABHAHIAaQAgAEcAYQBtAGEAIAAyACwAMgBZAGwAZQBpAG4AZQBu -ACAAaABhAHIAbQBhAGEAbgAgAGcAYQBtAG0AYQAgADIALAAyACAALQBwAHIAbwBmAGkAaQBsAGkARwBl -AG4AZQByAGkBDQBrAGkAIABHAHIAYQB5ACAARwBhAG0AbQBhACAAMgAuADIAIABwAHIAbwBmAGkAbABV -AG4AaQB3AGUAcgBzAGEAbABuAHkAIABwAHIAbwBmAGkAbAAgAHMAegBhAHIAbwFbAGMAaQAgAGcAYQBt -AG0AYQAgADIALAAyBjoGJwZFBicAIAAyAC4AMgAgBkQGSAZGACAGMQZFBicGLwZKACAGOQYnBkUEHgQx -BEkEMARPACAEQQQ1BEAEMARPACAEMwQwBDwEPAQwACAAMgAsADIALQQ/BEAEPgREBDgEOwRMAEcAZQBu -AGUAcgBpAGMAIABHAHIAYQB5ACAARwBhAG0AbQBhACAAMgAuADIAIABQAHIAbwBmAGkAbABlAAB0ZXh0 -AAAAAENvcHlyaWdodCBBcHBsZSBJbmMuLCAyMDEyAABYWVogAAAAAAAA81EAAQAAAAEWzGN1cnYAAAAA -AAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCG -AIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwEl -ASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gID -AgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMt -AzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSo -BLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7 -BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiq -CL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5 -C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4u -DkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGM -EaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVW -FXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmR -GbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5A -HmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNm -I5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkG -KTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8k -L1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXC -Nf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzj -PSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SK -RM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6 -TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1 -VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69 -Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iW -aOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMB -c11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4B -fmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZ -if6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJ -ljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKW -owajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AA -sHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74K -voS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1 -zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF -3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv7 -7IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY -/Sn9uv5L/tz/bf//0issS0xcTlNDb2xvclNwYWNlok0wXE5TQ29sb3JTcGFjZdIrLE9QV05TQ29sb3Ki -TzDSKyxSU1dOU0ltYWdlolIwAAgAEQAaACQAKQAyADcASQBMAFEAUwBnAG0AegCBAJAAlwCkAKsAswC1 -ALcAuQC+AMAAwgDLANAA2wDdAN8A4QDmAOkA6wDtAO8A9gENASkBKwEtIGcgbCB3IIAgkyCXIKIgqyCw -ILgguyDAIM8g0yDeIOYg8yEAIRUhGiEeISAhIiEkIS0hMiE4IUAhQiFEIUYhSDLoMu0y+jL9MwozDzMX -MxozHzMnAAAAAAAAAgEAAAAAAAAAVAAAAAAAAAAAAAAAAAAAMyo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/Base.lproj/CallView~ipad.xib b/Classes/Base.lproj/CallView~ipad.xib deleted file mode 100644 index 684d42dc6..000000000 --- a/Classes/Base.lproj/CallView~ipad.xib +++ /dev/null @@ -1,1397 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/CallConferenceTableView.m b/Classes/CallConferenceTableView.m deleted file mode 100644 index 1abf56af9..000000000 --- a/Classes/CallConferenceTableView.m +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "CallConferenceTableView.h" -#import "UICallConferenceCell.h" -#import "LinphoneManager.h" -#import "Utils.h" -#import "linphoneapp-Swift.h" - -@implementation CallConferenceTableView - -#pragma mark - UI change - -- (void)update { - [self.tableView reloadData]; -} - -#pragma mark - UITableViewDataSource Functions - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - NSString *kCellId = NSStringFromClass(UICallConferenceCell.class); - UICallConferenceCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; - if (cell == nil) { - cell = [[UICallConferenceCell alloc] initWithIdentifier:kCellId]; - } - LinphoneConference *c = [CallManager.instance getConference]; - if (c != nil) { - [cell setParticipant:bctbx_list_nth_data(linphone_conference_get_participant_list(c),(int)indexPath.row)]; - } - cell.contentView.userInteractionEnabled = NO; - return cell; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [CallManager.instance getConference] ? linphone_conference_get_participant_count([CallManager.instance getConference]) : 0; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - return 1e-5; -} -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - return 1e-5; -} - -@end diff --git a/Classes/CallIncomingView.h b/Classes/CallIncomingView.h deleted file mode 100644 index 8031a7b2e..000000000 --- a/Classes/CallIncomingView.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -#import "UICompositeView.h" -#import "TPMultiLayoutViewController.h" -#import "UIRoundedImageView.h" -#include "LinphoneManager.h" - -@protocol IncomingCallViewDelegate - -- (void)incomingCallAccepted:(LinphoneCall *)call evenWithVideo:(BOOL)video; -- (void)incomingCallDeclined:(LinphoneCall *)call; -- (void)incomingCallAborted:(LinphoneCall *)call; - -@end - -@interface CallIncomingView : TPMultiLayoutViewController { -} - -@property(nonatomic) Boolean earlyMedia; - -@property(weak, nonatomic) IBOutlet UILabel *nameLabel; -@property(nonatomic, strong) IBOutlet UILabel *addressLabel; -@property(nonatomic, strong) IBOutlet UIRoundedImageView *avatarImage; -@property(nonatomic, assign) LinphoneCall *call; -@property(nonatomic, strong) id delegate; -@property(weak, nonatomic) IBOutlet UIView *tabVideoBar; -@property(weak, nonatomic) IBOutlet UIView *tabBar; -@property (weak, nonatomic) IBOutlet UIView *earlyMediaView; - - -- (IBAction)onAcceptClick:(id)event; -- (IBAction)onDeclineClick:(id)event; -- (IBAction)onAcceptAudioOnlyClick:(id)sender; - -@end diff --git a/Classes/CallIncomingView.m b/Classes/CallIncomingView.m deleted file mode 100644 index ccf22052b..000000000 --- a/Classes/CallIncomingView.m +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "CallIncomingView.h" -#import "LinphoneManager.h" -#import "FastAddressBook.h" -#import "PhoneMainView.h" -#import "Utils.h" - -@implementation CallIncomingView - -#pragma mark - ViewController Functions - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(callUpdateEvent:) - name:kLinphoneCallUpdate - object:nil]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneCallUpdate object:nil]; - _call = NULL; -} - -#pragma mark - UICompositeViewDelegate Functions - -static UICompositeViewDescription *compositeDescription = nil; - -+ (UICompositeViewDescription *)compositeViewDescription { - if (compositeDescription == nil) { - compositeDescription = [[UICompositeViewDescription alloc] init:self.class - statusBar:StatusBarView.class - tabBar:nil - sideMenu:CallSideMenuView.class - fullscreen:false - isLeftFragment:YES - fragmentWith:nil]; - compositeDescription.darkBackground = true; - } - return compositeDescription; -} - -- (UICompositeViewDescription *)compositeViewDescription { - return self.class.compositeViewDescription; -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - if (_earlyMedia && [LinphoneManager.instance lpConfigBoolForKey:@"pref_accept_early_media"] && linphone_core_get_calls_nb(LC) < 2) { - _earlyMediaView.hidden = NO; - linphone_core_set_native_video_window_id(LC, (__bridge void *)(_earlyMediaView)); - } - if (_call) { - [self update]; - } -} - -#pragma mark - Event Functions - -- (void)callUpdateEvent:(NSNotification *)notif { - LinphoneCall *acall = [[notif.userInfo objectForKey:@"call"] pointerValue]; - LinphoneCallState astate = [[notif.userInfo objectForKey:@"state"] intValue]; - [self callUpdate:acall state:astate]; -} - -- (void)callUpdate:(LinphoneCall *)acall state:(LinphoneCallState)astate { - if (_call == acall && (astate == LinphoneCallEnd || astate == LinphoneCallError)) { - [_delegate incomingCallAborted:_call]; - } else if ([LinphoneManager.instance lpConfigBoolForKey:@"auto_answer"]) { - LinphoneCallState state = linphone_call_get_state(_call); - if (state == LinphoneCallIncomingReceived) { - LOGI(@"Auto answering call"); - [self onAcceptClick:nil]; - } - } -} - -#pragma mark - - -- (void)update { - const LinphoneAddress *addr = linphone_call_get_remote_address(_call); - [ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr withAddressLabel:_addressLabel]; - char *uri = linphone_address_as_string_uri_only(addr); - ms_free(uri); - [_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:YES withRoundedRadius:YES]; - - _tabBar.hidden = linphone_call_params_video_enabled(linphone_call_get_remote_params(_call)); - _tabVideoBar.hidden = !_tabBar.hidden; -} - -#pragma mark - Property Functions -static void hideSpinner(LinphoneCall *call, void *user_data) { - CallIncomingView *thiz = (__bridge CallIncomingView *)user_data; - thiz.earlyMedia = TRUE; - thiz.earlyMediaView.hidden = NO; - linphone_core_set_native_video_window_id(LC, (__bridge void *)(thiz.earlyMediaView)); -} - -- (void)setCall:(LinphoneCall *)call { - _call = call; - _earlyMedia = FALSE; - if ([LinphoneManager.instance lpConfigBoolForKey:@"pref_accept_early_media"] && linphone_core_get_calls_nb(LC) < 2) { - linphone_call_accept_early_media(_call); - // linphone_call_params_get_used_video_codec return 0 if no video stream enabled - if (linphone_call_params_get_used_video_codec(linphone_call_get_current_params(_call))) { - linphone_call_set_next_video_frame_decoded_callback(call, hideSpinner, (__bridge void *)(self)); - } - } else { - _earlyMediaView.hidden = YES; - } - - [self update]; - [self callUpdate:_call state:linphone_call_get_state(call)]; -} - -#pragma mark - Action Functions - -- (IBAction)onAcceptClick:(id)event { - [_delegate incomingCallAccepted:_call evenWithVideo:YES]; -} - -- (IBAction)onDeclineClick:(id)event { - [_delegate incomingCallDeclined:_call]; -} - -- (IBAction)onAcceptAudioOnlyClick:(id)sender { - [_delegate incomingCallAccepted:_call evenWithVideo:NO]; -} - -@end diff --git a/Classes/CallManager.swift b/Classes/CallManager.swift index b267ae43f..6d3a7930f 100644 --- a/Classes/CallManager.swift +++ b/Classes/CallManager.swift @@ -37,15 +37,13 @@ import AVFoundation static var theCallManager: CallManager? let providerDelegate: ProviderDelegate! // to support callkit let callController: CXCallController! // to support callkit - var lc: Core? - @objc var speakerBeforePause : Bool = false + var core: Core? @objc var nextCallIsTransfer: Bool = false var referedFromCall: String? var referedToCall: String? var endCallkit: Bool = false var globalState : GlobalState = .Off var actionsToPerformOnceWhenCoreIsOn : [(()->Void)] = [] - var conference: Conference? @@ -65,8 +63,8 @@ import AVFoundation } @objc func setCore(core: OpaquePointer) { - lc = Core.getSwiftObject(cObject: core) - lc?.addDelegate(delegate: self) + self.core = Core.getSwiftObject(cObject: core) + self.core?.addDelegate(delegate: self) } @objc static func getAppData(call: OpaquePointer) -> CallAppData? { @@ -106,7 +104,7 @@ import AVFoundation if (callId == nil) { return nil } - let calls = lc?.calls + let calls = core?.calls if let callTmp = calls?.first(where: { $0.callLog?.callId == callId }) { return callTmp } @@ -114,8 +112,8 @@ import AVFoundation } @objc func stopLinphoneCore() { - if (lc?.callsNb == 0) { - lc?.stopAsync() + if (core?.callsNb == 0) { + core?.stopAsync() } } @@ -139,60 +137,6 @@ import AVFoundation return false } - @objc func changeRouteToSpeaker() { - for device in lc!.audioDevices { - if (device.type == AudioDeviceType.Speaker) { - lc!.outputAudioDevice = device - break - } - } - UIDevice.current.isProximityMonitoringEnabled = false - } - - @objc func changeRouteToBluetooth() { - for device in lc!.audioDevices { - if (device.type == AudioDeviceType.Bluetooth || device.type == AudioDeviceType.BluetoothA2DP) { - lc!.outputAudioDevice = device - break - } - } - UIDevice.current.isProximityMonitoringEnabled = (lc!.callsNb > 0) - } - - @objc func changeRouteToDefault() { - lc!.outputAudioDevice = lc!.defaultOutputAudioDevice - } - - @objc func isBluetoothAvailable() -> Bool { - for device in lc!.audioDevices { - if (device.type == AudioDeviceType.Bluetooth || device.type == AudioDeviceType.BluetoothA2DP) { - return true; - } - } - return false; - } - - @objc func isSpeakerEnabled() -> Bool { - if let outputDevice = lc!.outputAudioDevice { - return outputDevice.type == AudioDeviceType.Speaker - } - return false - } - - @objc func isBluetoothEnabled() -> Bool { - if let outputDevice = lc!.outputAudioDevice { - return (outputDevice.type == AudioDeviceType.Bluetooth || outputDevice.type == AudioDeviceType.BluetoothA2DP) - } - return false - } - - @objc func isReceiverEnabled() -> Bool { - if let outputDevice = lc!.outputAudioDevice { - return outputDevice.type == AudioDeviceType.Microphone - } - return false - } - func requestTransaction(_ transaction: CXTransaction, action: String) { callController.request(transaction) { error in @@ -238,7 +182,7 @@ import AVFoundation func acceptCall(call: Call, hasVideo:Bool) { do { - let callParams = try lc!.createCallParams(call: call) + let callParams = try core!.createCallParams(call: call) callParams.videoEnabled = hasVideo if (ConfigManager.instance().lpConfigBoolForKey(key: "edge_opt_preference")) { let low_bandwidth = (AppManager.network() == .network_2g) @@ -269,7 +213,7 @@ import AVFoundation } let sAddr = Address.getSwiftObject(cObject: addr!) - if (CallManager.callKitEnabled() && !CallManager.instance().nextCallIsTransfer && !isInConference()) { + if (CallManager.callKitEnabled() && !CallManager.instance().nextCallIsTransfer && core?.conference?.isIn != true) { let uuid = UUID() let name = FastAddressBook.displayName(for: addr) ?? "unknow" let handle = CXHandle(type: .generic, value: sAddr.asStringUriOnly()) @@ -290,7 +234,7 @@ import AVFoundation func doCall(addr: Address, isSas: Bool) throws { let displayName = FastAddressBook.displayName(for: addr.getCobject) - let lcallParams = try CallManager.instance().lc!.createCallParams(call: nil) + let lcallParams = try CallManager.instance().core!.createCallParams(call: nil) if ConfigManager.instance().lpConfigBoolForKey(key: "edge_opt_preference") && AppManager.network() == .network_2g { Log.directLog(BCTBX_LOG_MESSAGE, text: "Enabling low bandwidth mode") lcallParams.lowBandwidthEnabled = true @@ -305,7 +249,7 @@ import AVFoundation } if (CallManager.instance().nextCallIsTransfer) { - let call = CallManager.instance().lc!.currentCall + let call = CallManager.instance().core!.currentCall try call?.transferTo(referTo: addr) CallManager.instance().nextCallIsTransfer = false } else { @@ -316,7 +260,7 @@ import AVFoundation if (isSas) { lcallParams.mediaEncryption = .ZRTP } - let call = CallManager.instance().lc!.inviteAddressWithParams(addr: addr, params: lcallParams) + let call = CallManager.instance().core!.inviteAddressWithParams(addr: addr, params: lcallParams) if (call != nil) { // The LinphoneCallAppData object should be set on call creation with callback // - (void)onCall:StateChanged:withMessage:. If not, we are in big trouble and expect it to crash @@ -333,32 +277,6 @@ import AVFoundation } } - @objc func groupCall() { - if (CallManager.callKitEnabled()) { - let calls = lc?.calls - if (calls == nil || calls!.isEmpty) { - return - } - let firstCall = calls!.first?.callLog?.callId ?? "" - let lastCall = (calls!.count > 1) ? calls!.last?.callLog?.callId ?? "" : "" - - let currentUuid = CallManager.instance().providerDelegate.uuids["\(firstCall)"] - if (currentUuid == nil) { - Log.directLog(BCTBX_LOG_ERROR, text: "Can not find correspondant call to group.") - return - } - - let newUuid = CallManager.instance().providerDelegate.uuids["\(lastCall)"] - let groupAction = CXSetGroupCallAction(call: currentUuid!, callUUIDToGroupWith: newUuid) - let transcation = CXTransaction(action: groupAction) - requestTransaction(transcation, action: "groupCall") - - setResumeCalls() - } else { - try? lc?.addAllToConference() - } - } - @objc func removeAllCallInfos() { providerDelegate.callInfos.removeAll() providerDelegate.uuids.removeAll() @@ -418,7 +336,7 @@ import AVFoundation } @objc func setHeldOtherCalls(exceptCallid: String) { - for call in CallManager.instance().lc!.calls { + for call in CallManager.instance().core!.calls { if (call.callLog?.callId != exceptCallid && call.state != .Paused && call.state != .Pausing && call.state != .PausedByRemote) { setHeld(call: call, hold: true) } @@ -426,7 +344,7 @@ import AVFoundation } func setResumeCalls() { - for call in CallManager.instance().lc!.calls { + for call in CallManager.instance().core!.calls { if (call.state == .Paused || call.state == .Pausing || call.state == .PausedByRemote) { setHeld(call: call, hold: false) } @@ -443,7 +361,7 @@ import AVFoundation @objc func acceptVideo(call: OpaquePointer, confirm: Bool) { let sCall = Call.getSwiftObject(cObject: call) - let params = try? lc?.createCallParams(call: sCall) + let params = try? core?.createCallParams(call: sCall) params?.videoEnabled = confirm try? sCall.acceptUpdate(params: params) } @@ -464,7 +382,7 @@ import AVFoundation for call in CallManager.instance().providerDelegate.uuids { let callId = CallManager.instance().providerDelegate.callInfos[call.value]?.callId if (callId != nil) { - let call = CallManager.instance().lc?.getCallByCallid(callId: callId!) + let call = CallManager.instance().core?.getCallByCallid(callId: callId!) if (call != nil && call?.state != .PushIncomingReceived) { // sometimes (for example) due to network, registration failed, in this case, keep the call continue @@ -478,12 +396,6 @@ import AVFoundation CallManager.instance().endCallkit = false } } - - func onConferenceStateChanged(core: Core, conference: Conference, state: Conference.State) { - if (state == .Terminated) { - CallManager.instance().conference = nil - } - } func onCallStateChanged(core: Core, call: Call, state cstate: Call.State, message: String) { let callLog = call.callLog @@ -535,11 +447,6 @@ import AVFoundation } } } - - if (CallManager.instance().speakerBeforePause) { - CallManager.instance().speakerBeforePause = false - CallManager.instance().changeRouteToSpeaker() - } break case .OutgoingInit, .OutgoingProgress, @@ -568,14 +475,6 @@ import AVFoundation displayName = contactName } - UIDevice.current.isProximityMonitoringEnabled = false - if (CallManager.instance().lc!.callsNb == 0) { - CallManager.instance().changeRouteToDefault() - // disable this because I don't find anygood reason for it: _bluetoothAvailable = FALSE; - // furthermore it introduces a bug when calling multiple times since route may not be - // reconfigured between cause leading to bluetooth being disabled while it should not - //CallManager.instance().bluetoothEnabled = false - } if UIApplication.shared.applicationState != .active && (callLog == nil || callLog?.status == .Missed || callLog?.status == .Aborted || callLog?.status == .EarlyAborted) { // Configure the notification's payload. @@ -634,12 +533,6 @@ import AVFoundation break } - if (cstate == .IncomingReceived || cstate == .OutgoingInit || cstate == .Connected || cstate == .StreamsRunning) { - let check = call.currentParams?.videoEnabled - if ((call.currentParams?.videoEnabled ?? false) && CallManager.instance().isReceiverEnabled()) { - CallManager.instance().changeRouteToSpeaker() - } - } } // post Notification kLinphoneCallUpdate NotificationCenter.default.post(name: Notification.Name("LinphoneCallUpdate"), object: self, userInfo: [ @@ -652,13 +545,13 @@ import AVFoundation // Audio messages @objc func activateAudioSession() { - lc?.activateAudioSession(actived: true) + core?.activateAudioSession(actived: true) } @objc func getSpeakerSoundCard() -> String? { var speakerCard: String? = nil var earpieceCard: String? = nil - lc?.audioDevices.forEach { device in + core?.audioDevices.forEach { device in if (device.hasCapability(capability: .CapabilityPlay)) { if (device.type == .Speaker) { speakerCard = device.id @@ -670,116 +563,46 @@ import AVFoundation return speakerCard != nil ? speakerCard : earpieceCard } - - - // Conference - - @objc func hostConference() -> Bool { - return conference != nil - } + // Local Conference - func addAllToConference() { - if (conference == nil) { - guard let cp = try?lc?.createConferenceParams() else { - Log.directLog(BCTBX_LOG_ERROR, text: "Unable to create conference parameters") + @objc func startLocalConference() { + if (CallManager.callKitEnabled()) { + let calls = core?.calls + if (calls == nil || calls!.isEmpty) { return } - if let currentCall = lc?.currentCall, let currentParams = currentCall.currentParams { - cp.videoEnabled = currentParams.videoEnabled - } - conference = try?lc?.createConferenceWithParams(params: cp) - } - lc?.calls.forEach { call in - if (call.conference == nil || call.conference?.participantCount == 1) { - try?conference?.addParticipant(call: call) - } - } - } - - @objc func getConference() -> OpaquePointer? { - guard let core = lc else { - return nil - } - return (core.conference != nil) ? core.conference?.getCobject : (core.currentCall?.conference != nil) ? core.currentCall!.conference!.getCobject : nil - } - - func getConference() -> Conference? { - guard let core = lc else { - return nil - } - return (core.conference != nil) ? core.conference : (core.currentCall?.conference != nil) ? core.currentCall!.conference : nil - } - - @objc func isInConference() -> Bool { - return isInConferenceAsHost()||isInConferenceAsGuest() - } - - @objc func isInConferenceAsGuest() -> Bool { - guard let core = lc else { - return false - } - return !isInConferenceAsHost() && core.currentCall != nil && core.currentCall?.conference != nil && (core.currentCall?.conference!.participantCount)! > 1 - } - - @objc func isInConferenceAsHost() -> Bool { - guard let core = lc else { - return false - } - return core.conference?.isIn == true - } - - @objc func hasConferenceAsGuest() -> Bool { - guard let core = lc else { - return false - } - if (core.callsNb<=1) { - return false - } - var found = false - core.calls.forEach { - let c = $0.conference - if (c != nil && c!.participantCount > 1 && hostConference()) { - found = true + let firstCall = calls!.first?.callLog?.callId ?? "" + let lastCall = (calls!.count > 1) ? calls!.last?.callLog?.callId ?? "" : "" + + let currentUuid = CallManager.instance().providerDelegate.uuids["\(firstCall)"] + if (currentUuid == nil) { + Log.directLog(BCTBX_LOG_ERROR, text: "Can not find correspondant call to group.") return } + + let newUuid = CallManager.instance().providerDelegate.uuids["\(lastCall)"] + let groupAction = CXSetGroupCallAction(call: currentUuid!, callUUIDToGroupWith: newUuid) + let transcation = CXTransaction(action: groupAction) + requestTransaction(transcation, action: "groupCall") + + setResumeCalls() + } else { + addAllToLocalConference() } - return found } - @objc func getCallFor(participant : OpaquePointer) -> OpaquePointer? { - let p = Participant.getSwiftObject(cObject: participant) - guard let core = lc else { - return nil - } - var call:Call? = nil - core.calls.forEach { (callIt) in - let c = callIt.conference - c?.participantList.forEach { (p2) in - if (p2.address?.asStringUriOnly() == p.address?.asStringUriOnly()) { - call = callIt - return - } + func addAllToLocalConference() { + do { + if let core = core, let params = try? core.createConferenceParams() { + params.videoEnabled = false // We disable video for local conferencing (cf Android) + let conference = core.conference != nil ? core.conference : try core.createConferenceWithParams(params: params) + try conference?.addParticipants(calls: core.calls) } + } catch { + Log.directLog(BCTBX_LOG_ERROR, text: "accept call failed \(error)") } - return call?.getCobject } - @objc func inVideoConf() -> Bool { - guard let core = lc else { - return false - } - let result = isInConference() && (getConference()?.currentParams?.isVideoEnabled == true || core.currentCall?.currentParams?.videoEnabled == true) - NSLog("cdes \(result) \(core.currentCall?.currentParams?.videoEnabled)") - return result - } - - - @objc func inAudioConf() -> Bool { - guard let core = lc else { - return false - } - return core.conference?.isIn == true && core.conference != nil && core.currentCall?.conference?.currentParams?.isVideoEnabled == false - } } diff --git a/Classes/CallOutgoingView.h b/Classes/CallOutgoingView.h deleted file mode 100644 index 1d4430efe..000000000 --- a/Classes/CallOutgoingView.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -#import "UICompositeView.h" -#import "TPMultiLayoutViewController.h" -#include "linphone/linphonecore.h" -#import "UIRoundedImageView.h" -#import "UIDigitButton.h" - - -@interface CallOutgoingView : TPMultiLayoutViewController { -} -@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage; -@property(weak, nonatomic) IBOutlet UILabel *nameLabel; -@property(weak, nonatomic) IBOutlet UISpeakerButton *speakerButton; -@property(weak, nonatomic) IBOutlet UILabel *addressLabel; -@property(weak, nonatomic) IBOutlet UIToggleButton *routesButton; -@property(weak, nonatomic) IBOutlet UIView *routesView; -@property(weak, nonatomic) IBOutlet UIBluetoothButton *routesBluetoothButton; -@property(weak, nonatomic) IBOutlet UIButton *routesEarpieceButton; -@property(weak, nonatomic) IBOutlet UISpeakerButton *routesSpeakerButton; -@property(weak, nonatomic) IBOutlet UIMutedMicroButton *microButton; -@property (weak, nonatomic) IBOutlet UIButton *declineButton; - -@property (weak, nonatomic) IBOutlet UIToggleButton *numpadButton; -@property (strong, nonatomic) IBOutlet UIView *numpadView; -@property(nonatomic, strong) IBOutlet UIDigitButton *oneButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *twoButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *threeButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *fourButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *fiveButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *sixButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *sevenButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *eightButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *nineButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *starButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *zeroButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *hashButton; -@property (weak, nonatomic) IBOutlet UIButton *declineButton_earlyMedia; - -- (IBAction)onDeclineClick:(id)sender; - -@end diff --git a/Classes/CallOutgoingView.m b/Classes/CallOutgoingView.m deleted file mode 100644 index c5057377d..000000000 --- a/Classes/CallOutgoingView.m +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "CallOutgoingView.h" -#import "PhoneMainView.h" - -@implementation CallOutgoingView - -#pragma mark - UICompositeViewDelegate Functions - -static UICompositeViewDescription *compositeDescription = nil; - -+ (UICompositeViewDescription *)compositeViewDescription { - if (compositeDescription == nil) { - compositeDescription = [[UICompositeViewDescription alloc] init:self.class - statusBar:StatusBarView.class - tabBar:nil - sideMenu:CallSideMenuView.class - fullscreen:false - isLeftFragment:NO - fragmentWith:nil]; - - compositeDescription.darkBackground = true; - } - return compositeDescription; -} - -- (UICompositeViewDescription *)compositeViewDescription { - return self.class.compositeViewDescription; -} - -- (void)viewDidLoad { - _routesEarpieceButton.enabled = !IPAD; - - [_zeroButton setDigit:'0']; - [_zeroButton setDtmf:true]; - [_oneButton setDigit:'1']; - [_oneButton setDtmf:true]; - [_twoButton setDigit:'2']; - [_twoButton setDtmf:true]; - [_threeButton setDigit:'3']; - [_threeButton setDtmf:true]; - [_fourButton setDigit:'4']; - [_fourButton setDtmf:true]; - [_fiveButton setDigit:'5']; - [_fiveButton setDtmf:true]; - [_sixButton setDigit:'6']; - [_sixButton setDtmf:true]; - [_sevenButton setDigit:'7']; - [_sevenButton setDtmf:true]; - [_eightButton setDigit:'8']; - [_eightButton setDtmf:true]; - [_nineButton setDigit:'9']; - [_nineButton setDtmf:true]; - [_starButton setDigit:'*']; - [_starButton setDtmf:true]; - [_hashButton setDigit:'#']; - [_hashButton setDtmf:true]; - -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(bluetoothAvailabilityUpdateEvent:) - name:kLinphoneBluetoothAvailabilityUpdate - object:nil]; - - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(callUpdateEvent:) - name:kLinphoneCallUpdate - object:nil]; - - LinphoneCall *call = linphone_core_get_current_call(LC); - if (!call) { - return; - } - - const LinphoneAddress *addr = linphone_call_get_remote_address(call); - [ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr withAddressLabel:_addressLabel]; - char *uri = linphone_address_as_string_uri_only(addr); - ms_free(uri); - [_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:NO withRoundedRadius:YES]; - - [self hideSpeaker:LinphoneManager.instance.bluetoothAvailable]; - - [_speakerButton update]; - [_microButton update]; - [_routesButton update]; - [self hidePad:TRUE animated:FALSE]; - [self callUpdate:call state:linphone_call_get_state(call) animated:true]; - -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - // if there is no call (for whatever reason), we must wait viewDidAppear method - // before popping current view, because UICompositeView cannot handle view change - // directly in viewWillAppear (this would lead to crash in deallocated memory - easily - // reproductible on iPad mini). - if (!linphone_core_get_current_call(LC)) { - [PhoneMainView.instance popCurrentView]; - } -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -- (IBAction)onRoutesBluetoothClick:(id)sender { - [self hideRoutes:TRUE animated:TRUE]; - [CallManager.instance changeRouteToBluetooth]; -} - -- (IBAction)onRoutesEarpieceClick:(id)sender { - [self hideRoutes:TRUE animated:TRUE]; - [CallManager.instance changeRouteToDefault]; -} - -- (IBAction)onRoutesSpeakerClick:(id)sender { - [self hideRoutes:TRUE animated:TRUE]; - [CallManager.instance changeRouteToSpeaker]; -} - -- (IBAction)onRoutesClick:(id)sender { - if ([_routesView isHidden]) { - [self hideRoutes:FALSE animated:ANIMATED]; - } else { - [self hideRoutes:TRUE animated:ANIMATED]; - } -} - -- (IBAction)onNumpadClick:(id)sender { - if ([_numpadView isHidden]) { - [self hidePad:FALSE animated:ANIMATED]; - } else { - [self hidePad:TRUE animated:ANIMATED]; - } -} - -- (IBAction)onDeclineClick:(id)sender { - LinphoneCall *call = linphone_core_get_current_call(LC); - if (call) { - [CallManager.instance terminateCallWithCall:call]; - } -} - -- (void)hidePad:(BOOL)hidden animated:(BOOL)animated { - if (hidden) { - [_numpadButton setOff]; - } else { - [_numpadButton setOn]; - } - if (hidden != _numpadView.hidden) { - if (animated) { - [self hideAnimation:hidden forView:_numpadView completion:nil]; - } else { - [_numpadView setHidden:hidden]; - } - } -} - -- (void)hideRoutes:(BOOL)hidden animated:(BOOL)animated { - if (hidden) { - [_routesButton setOff]; - } else { - [_routesButton setOn]; - } - - _routesBluetoothButton.selected = [CallManager.instance isBluetoothEnabled]; - _routesSpeakerButton.selected = [CallManager.instance isSpeakerEnabled]; - _routesEarpieceButton.selected = !_routesBluetoothButton.selected && !_routesSpeakerButton.selected; - - if (hidden != _routesView.hidden) { - [_routesView setHidden:hidden]; - } -} - -- (void)hideSpeaker:(BOOL)hidden { - _speakerButton.hidden = hidden; - _routesButton.hidden = !hidden; -} - -#pragma mark - Event Functions - -- (void)bluetoothAvailabilityUpdateEvent:(NSNotification *)notif { - bool available = [[notif.userInfo objectForKey:@"available"] intValue]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self hideSpeaker:available]; - }); -} - -- (void)callUpdateEvent:(NSNotification *)notif { - LinphoneCall *call = [[notif.userInfo objectForKey:@"call"] pointerValue]; - LinphoneCallState state = [[notif.userInfo objectForKey:@"state"] intValue]; - [self callUpdate:call state:state animated:TRUE]; -} - -- (void)callUpdate:(LinphoneCall *)call state:(LinphoneCallState)state animated:(BOOL)animated { - _declineButton_earlyMedia.hidden = linphone_call_get_state(call) != LinphoneCallStateOutgoingEarlyMedia; - _declineButton.hidden = !_declineButton_earlyMedia.hidden; - _numpadButton.hidden = _declineButton_earlyMedia.hidden; -} - -#pragma mark - Animation - -- (void)hideAnimation:(BOOL)hidden forView:(UIView *)target completion:(void (^)(BOOL finished))completion { - if (hidden) { - int original_y = target.frame.origin.y; - CGRect newFrame = target.frame; - newFrame.origin.y = self.view.frame.size.height; - [UIView animateWithDuration:0.5 - delay:0.0 - options:UIViewAnimationOptionCurveEaseIn - animations:^{ - target.frame = newFrame; - } - completion:^(BOOL finished) { - CGRect originFrame = target.frame; - originFrame.origin.y = original_y; - target.hidden = YES; - target.frame = originFrame; - if (completion) - completion(finished); - }]; - } else { - CGRect frame = target.frame; - int original_y = frame.origin.y; - frame.origin.y = self.view.frame.size.height; - target.frame = frame; - frame.origin.y = original_y; - target.hidden = NO; - - [UIView animateWithDuration:0.5 - delay:0.0 - options:UIViewAnimationOptionCurveEaseOut - animations:^{ - target.frame = frame; - } - completion:^(BOOL finished) { - target.frame = frame; // in case application did not finish - if (completion) - completion(finished); - }]; - } -} - - -@end diff --git a/Classes/CallPausedTableView.m b/Classes/CallPausedTableView.m deleted file mode 100644 index 2dc9b6c29..000000000 --- a/Classes/CallPausedTableView.m +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "CallPausedTableView.h" -#import "UICallPausedCell.h" -#import "LinphoneManager.h" -#import "Utils.h" - -@implementation CallPausedTableView - -#pragma mark - UI change - -- (void)update { - [self.tableView reloadData]; - CGRect newOrigin = self.tableView.frame; - newOrigin.size.height = - [self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] * - [self tableView:self.tableView numberOfRowsInSection:0]; - newOrigin.origin.y += self.tableView.frame.size.height - newOrigin.size.height; - self.tableView.frame = newOrigin; -} - -#pragma mark - UITableViewDataSource Functions -- (LinphoneCall *)conferenceCallForRow:(NSInteger)row { - const MSList *calls = linphone_core_get_calls(LC); - int i = -1; - while (calls) { - if (linphone_call_get_state(calls->data) == LinphoneCallPaused) { - i++; - if (i == row) - break; - } - calls = calls->next; - } - // we should reach this only when we are querying for conference - return (calls ? calls->data : NULL); -} - -#pragma mark - UITableViewDataSource Functions - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - NSString *kCellId = NSStringFromClass(UICallPausedCell.class); - UICallPausedCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; - if (cell == nil) { - cell = [[UICallPausedCell alloc] initWithIdentifier:kCellId]; - } - [cell setCall:[self conferenceCallForRow:indexPath.row]]; - cell.contentView.userInteractionEnabled = false; - return cell; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - const MSList *calls = linphone_core_get_calls(LC); - int count = 0; - int conference_in_pause = 0; - int call_in_conference = 0; - while (calls) { - LinphoneCall *call = calls->data; - BOOL callInConference = linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(call)); - if (linphone_call_get_state(call) == LinphoneCallPaused) { - count++; - } - if(callInConference) { - call_in_conference++; - if (!linphone_core_is_in_conference(LC)) { - conference_in_pause = 1; - } - } - calls = calls->next; - } - if(call_in_conference == 1) { - conference_in_pause = 0; - } - return count + conference_in_pause; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - return 1e-5; -} -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - return 1e-5; -} - -@end diff --git a/Classes/CallSideMenuView.m b/Classes/CallSideMenuView.m deleted file mode 100644 index 27ee4de48..000000000 --- a/Classes/CallSideMenuView.m +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "CallSideMenuView.h" -#import "LinphoneManager.h" -#import "PhoneMainView.h" - -@implementation CallSideMenuView { - NSTimer *updateTimer; -} - -#pragma mark - ViewController Functions - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - if (updateTimer != nil) { - [updateTimer invalidate]; - } - updateTimer = [NSTimer scheduledTimerWithTimeInterval:1 - target:self - selector:@selector(updateStats:) - userInfo:nil - repeats:YES]; - - [self updateStats:nil]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - if (updateTimer != nil) { - [updateTimer invalidate]; - updateTimer = nil; - } -} - -- (IBAction)onLateralSwipe:(id)sender { - [PhoneMainView.instance.mainViewController hideSideMenu:YES]; -} - -+ (NSString *)iceToString:(LinphoneIceState)state { - switch (state) { - case LinphoneIceStateNotActivated: - return NSLocalizedString(@"Not activated", @"ICE has not been activated for this call"); - break; - case LinphoneIceStateFailed: - return NSLocalizedString(@"Failed", @"ICE processing has failed"); - break; - case LinphoneIceStateInProgress: - return NSLocalizedString(@"In progress", @"ICE process is in progress"); - break; - case LinphoneIceStateHostConnection: - return NSLocalizedString(@"Direct connection", - @"ICE has established a direct connection to the remote host"); - break; - case LinphoneIceStateReflexiveConnection: - return NSLocalizedString( - @"NAT(s) connection", - @"ICE has established a connection to the remote host through one or several NATs"); - break; - case LinphoneIceStateRelayConnection: - return NSLocalizedString(@"Relay connection", @"ICE has established a connection through a relay"); - break; - } -} - -+ (NSString*)afinetToString:(int)remote_family { - return (remote_family == LinphoneAddressFamilyUnspec) ? @"Unspecified":(remote_family == LinphoneAddressFamilyInet) ? @"IPv4" : @"IPv6"; -} - -+ (NSString *)mediaEncryptionToString:(LinphoneMediaEncryption)enc { - switch (enc) { - case LinphoneMediaEncryptionDTLS: - return @"DTLS"; - case LinphoneMediaEncryptionSRTP: - return @"SRTP"; - case LinphoneMediaEncryptionZRTP: - return @"ZRTP"; - case LinphoneMediaEncryptionNone: - break; - } - return NSLocalizedString(@"None", nil); -} - -- (NSString *)updateStatsForCall:(LinphoneCall *)call stream:(LinphoneStreamType)stream { - NSMutableString *result = [[NSMutableString alloc] init]; - const PayloadType *payload = NULL; - const LinphoneCallStats *stats; - const LinphoneCallParams *params = linphone_call_get_current_params(call); - NSString *name; - - switch (stream) { - case LinphoneStreamTypeAudio: - name = @"Audio"; - payload = linphone_call_params_get_used_audio_codec(params); - stats = linphone_call_get_audio_stats(call); - break; - case LinphoneStreamTypeText: - name = @"Text"; - payload = linphone_call_params_get_used_text_codec(params); - stats = linphone_call_get_text_stats(call); - break; - case LinphoneStreamTypeVideo: - name = @"Video"; - payload = linphone_call_params_get_used_video_codec(params); - stats = linphone_call_get_video_stats(call); - break; - case LinphoneStreamTypeUnknown: - break; - } - if (payload == NULL) { - return result; - } - - [result appendString:@"\n"]; - [result appendString:name]; - [result appendString:@"\n"]; - - [result appendString:[NSString stringWithFormat:@"Codec: %s/%iHz", payload->mime_type, payload->clock_rate]]; - if (stream == LinphoneStreamTypeAudio) { - [result appendString:[NSString stringWithFormat:@"/%i channels", payload->channels]]; - } - [result appendString:@"\n"]; - // Encoder & decoder descriptions - const char *enc_desc = ms_factory_get_encoder(linphone_core_get_ms_factory(LC), payload->mime_type)->text; - const char *dec_desc = ms_factory_get_decoder(linphone_core_get_ms_factory(LC), payload->mime_type)->text; - if (strcmp(enc_desc, dec_desc) == 0) { - [result appendString:[NSString stringWithFormat:@"Encoder/Decoder: %s", enc_desc]]; - [result appendString:@"\n"]; - } else { - [result appendString:[NSString stringWithFormat:@"Encoder: %s", enc_desc]]; - [result appendString:@"\n"]; - [result appendString:[NSString stringWithFormat:@"Decoder: %s", dec_desc]]; - [result appendString:@"\n"]; - } - - if (stats != NULL) { - [result appendString:[NSString stringWithFormat:@"Download bandwidth: %1.1f kbits/s", - linphone_call_stats_get_download_bandwidth(stats)]]; - [result appendString:@"\n"]; - [result appendString:[NSString stringWithFormat:@"Upload bandwidth: %1.1f kbits/s", - linphone_call_stats_get_upload_bandwidth(stats)]]; - [result appendString:@"\n"]; - if (stream == LinphoneStreamTypeVideo) { - /*[result appendString:[NSString stringWithFormat:@"Estimated download bandwidth: %1.1f kbits/s", - linphone_call_stats_get_estimated_download_bandwidth(stats)]]; - [result appendString:@"\n"];*/ - } - [result - appendString:[NSString stringWithFormat:@"ICE state: %@", - [self.class iceToString:linphone_call_stats_get_ice_state(stats)]]]; - [result appendString:@"\n"]; - [result - appendString:[NSString - stringWithFormat:@"Afinet: %@", - [self.class afinetToString:linphone_call_stats_get_ip_family_of_remote( - stats)]]]; - [result appendString:@"\n"]; - - // RTP stats section (packet loss count, etc) - const rtp_stats_t rtp_stats = *linphone_call_stats_get_rtp_stats(stats); - [result - appendString:[NSString stringWithFormat: - @"RTP packets: %llu total, %lld cum loss, %llu discarded, %llu OOT, %llu bad", - rtp_stats.packet_recv, rtp_stats.cum_packet_loss, rtp_stats.discarded, - rtp_stats.outoftime, rtp_stats.bad]]; - [result appendString:@"\n"]; - [result appendString:[NSString stringWithFormat:@"Sender loss rate: %.2f%%", - linphone_call_stats_get_sender_loss_rate(stats)]]; - [result appendString:@"\n"]; - [result appendString:[NSString stringWithFormat:@"Receiver loss rate: %.2f%%", - linphone_call_stats_get_receiver_loss_rate(stats)]]; - [result appendString:@"\n"]; - - if (stream == LinphoneStreamTypeVideo) { - const LinphoneVideoDefinition *recv_definition = linphone_call_params_get_received_video_definition(params); - const LinphoneVideoDefinition *sent_definition = linphone_call_params_get_sent_video_definition(params); - float sentFPS = linphone_call_params_get_sent_framerate(params); - float recvFPS = linphone_call_params_get_received_framerate(params); - [result appendString:[NSString stringWithFormat:@"Sent video resolution: %dx%d (%.1fFPS)", linphone_video_definition_get_width(sent_definition), - linphone_video_definition_get_height(sent_definition), sentFPS]]; - [result appendString:@"\n"]; - [result appendString:[NSString stringWithFormat:@"Received video resolution: %dx%d (%.1fFPS)", - linphone_video_definition_get_width(recv_definition), - linphone_video_definition_get_height(recv_definition), recvFPS]]; - [result appendString:@"\n"]; - } - } - return result; -} - -- (void)updateStats:(NSTimer *)timer { - LinphoneCall *call = linphone_core_get_current_call(LC); - - if (!call) { - _statsLabel.text = NSLocalizedString(@"No call in progress", nil); - return; - } - - NSMutableString *stats = [[NSMutableString alloc] init]; - - LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call)); - if (enc != LinphoneMediaEncryptionNone) { - [stats appendString:[NSString - stringWithFormat:@"Call encrypted using %@", [self.class mediaEncryptionToString:enc]]]; - } - - [stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeAudio]]; - [stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeVideo]]; - [stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeText]]; - - _statsLabel.text = stats; -} - -@end diff --git a/Classes/CallSideMenuView.xib b/Classes/CallSideMenuView.xib deleted file mode 100644 index a0208f810..000000000 --- a/Classes/CallSideMenuView.xib +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/CallView.h b/Classes/CallView.h deleted file mode 100644 index fa188895d..000000000 --- a/Classes/CallView.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -#import "VideoZoomHandler.h" -#import "UICamSwitch.h" - -#import "UICompositeView.h" -#import "CallPausedTableView.h" - -#import "UIMutedMicroButton.h" -#import "UIPauseButton.h" -#import "UISpeakerButton.h" -#import "UIVideoButton.h" -#import "UIHangUpButton.h" -#import "UIDigitButton.h" -#import "UIRoundedImageView.h" -#import "UIBouncingView.h" - -@class VideoView; - -@interface CallView : TPMultiLayoutViewController { - @private - UITapGestureRecognizer *singleFingerTap; - NSTimer *hideControlsTimer; - NSTimer *videoDismissTimer; - BOOL videoHidden; - BOOL callRecording; - VideoZoomHandler *videoZoomHandler; -} - -@property(nonatomic, strong) IBOutlet CallPausedTableView *pausedCallsTable; - -@property(nonatomic, strong) IBOutlet UIView *videoGroup; -@property(nonatomic, strong) IBOutlet UIView *videoView; -@property(nonatomic, strong) IBOutlet UIView *videoPreview; -@property(nonatomic, strong) IBOutlet UICamSwitch *videoCameraSwitch; -@property(nonatomic, strong) IBOutlet UIActivityIndicatorView *videoWaitingForFirstImage; -@property(weak, nonatomic) IBOutlet UIView *callView; - -@property(nonatomic, strong) IBOutlet UIPauseButton *callPauseButton; -@property(nonatomic, strong) IBOutlet UIButton *optionsConferenceButton; -@property(nonatomic, strong) IBOutlet UIVideoButton *videoButton; -@property(nonatomic, strong) IBOutlet UIMutedMicroButton *microButton; -@property(nonatomic, strong) IBOutlet UISpeakerButton *speakerButton; -@property(nonatomic, strong) IBOutlet UIToggleButton *routesButton; -@property(nonatomic, strong) IBOutlet UIToggleButton *optionsButton; -@property(nonatomic, strong) IBOutlet UIHangUpButton *hangupButton; -@property(nonatomic, strong) IBOutlet UIView *numpadView; -@property(nonatomic, strong) IBOutlet UIView *routesView; -@property(nonatomic, strong) IBOutlet UIView *optionsView; -@property(nonatomic, strong) IBOutlet UIButton *routesEarpieceButton; -@property(nonatomic, strong) IBOutlet UIButton *routesSpeakerButton; -@property(nonatomic, strong) IBOutlet UIButton *routesBluetoothButton; -@property(nonatomic, strong) IBOutlet UIButton *optionsAddButton; -@property(nonatomic, strong) IBOutlet UIButton *optionsTransferButton; -@property(nonatomic, strong) IBOutlet UIToggleButton *numpadButton; -@property(weak, nonatomic) IBOutlet UIPauseButton *conferencePauseButton; -@property(weak, nonatomic) IBOutlet UIBouncingView *chatNotificationView; -@property(weak, nonatomic) IBOutlet UILabel *chatNotificationLabel; -@property (weak, nonatomic) IBOutlet UIButton *recordButton; -@property (weak, nonatomic) IBOutlet UIButton *recordButtonOnView; - -@property(weak, nonatomic) IBOutlet UIView *bottomBar; -@property(nonatomic, strong) IBOutlet UIDigitButton *oneButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *twoButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *threeButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *fourButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *fiveButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *sixButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *sevenButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *eightButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *nineButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *starButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *zeroButton; -@property(nonatomic, strong) IBOutlet UIDigitButton *hashButton; -@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage; -@property(weak, nonatomic) IBOutlet UILabel *nameLabel; -@property(weak, nonatomic) IBOutlet UILabel *durationLabel; -@property(weak, nonatomic) IBOutlet UIView *pausedByRemoteView; -@property(weak, nonatomic) IBOutlet UIView *noActiveCallView; -@property(weak, nonatomic) IBOutlet UIView *conferenceView; -@property(strong, nonatomic) IBOutlet CallPausedTableView *conferenceCallsTable; -@property (weak, nonatomic) IBOutlet UIView *waitView; -@property (weak, nonatomic) IBOutlet UIView *infoView; - -- (IBAction)onRoutesClick:(id)sender; -- (IBAction)onRoutesBluetoothClick:(id)sender; -- (IBAction)onRoutesEarpieceClick:(id)sender; -- (IBAction)onRoutesSpeakerClick:(id)sender; -- (IBAction)onOptionsClick:(id)sender; -- (IBAction)onOptionsTransferClick:(id)sender; -- (IBAction)onOptionsAddClick:(id)sender; -- (IBAction)onOptionsConferenceClick:(id)sender; -- (IBAction)onNumpadClick:(id)sender; -- (IBAction)onChatClick:(id)sender; -- (IBAction)onRecordClick:(id)sender; -- (IBAction)onRecordOnViewClick:(id)sender; - -@end diff --git a/Classes/CallView.m b/Classes/CallView.m deleted file mode 100644 index 2ae10de87..000000000 --- a/Classes/CallView.m +++ /dev/null @@ -1,1006 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import -#import -#import -#import -#import -#import -#import -#import "UICallConferenceCell.h" - -#import "CallView.h" -#import "CallSideMenuView.h" -#import "LinphoneManager.h" -#import "PhoneMainView.h" -#import "Utils.h" - -#include "linphone/linphonecore.h" - -#import "linphoneapp-Swift.h" - -const NSInteger SECURE_BUTTON_TAG = 5; - -@implementation CallView { - BOOL hiddenVolume; -} - -#pragma mark - Lifecycle Functions - -- (id)init { - self = [super initWithNibName:NSStringFromClass(self.class) bundle:[NSBundle mainBundle]]; - if (self != nil) { - singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleControls:)]; - videoZoomHandler = [[VideoZoomHandler alloc] init]; - videoHidden = TRUE; - [self updateCallView]; - } - return self; -} - -#pragma mark - UICompositeViewDelegate Functions - -static UICompositeViewDescription *compositeDescription = nil; - -+ (UICompositeViewDescription *)compositeViewDescription { - if (compositeDescription == nil) { - compositeDescription = [[UICompositeViewDescription alloc] init:self.class - statusBar:StatusBarView.class - tabBar:nil - sideMenu:CallSideMenuView.class - fullscreen:false - isLeftFragment:YES - fragmentWith:nil]; - compositeDescription.darkBackground = true; - } - return compositeDescription; -} - -- (UICompositeViewDescription *)compositeViewDescription { - return self.class.compositeViewDescription; -} - -#pragma mark - ViewController Functions - -- (void)viewDidLoad { - [super viewDidLoad]; - - _routesEarpieceButton.enabled = !IPAD; - -// TODO: fixme! video preview frame is too big compared to openGL preview -// frame, so until this is fixed, temporary disabled it. -#if 0 - _videoPreview.layer.borderColor = UIColor.whiteColor.CGColor; - _videoPreview.layer.borderWidth = 1; -#endif - [singleFingerTap setNumberOfTapsRequired:1]; - [singleFingerTap setCancelsTouchesInView:FALSE]; - [self.videoView addGestureRecognizer:singleFingerTap]; - - [videoZoomHandler setup:_videoGroup]; - _videoGroup.alpha = 0; - - [_videoCameraSwitch setPreview:_videoPreview]; - - UIPanGestureRecognizer *dragndrop = - [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveVideoPreview:)]; - dragndrop.minimumNumberOfTouches = 1; - [_videoPreview addGestureRecognizer:dragndrop]; - - [_zeroButton setDigit:'0']; - [_zeroButton setDtmf:true]; - [_oneButton setDigit:'1']; - [_oneButton setDtmf:true]; - [_twoButton setDigit:'2']; - [_twoButton setDtmf:true]; - [_threeButton setDigit:'3']; - [_threeButton setDtmf:true]; - [_fourButton setDigit:'4']; - [_fourButton setDtmf:true]; - [_fiveButton setDigit:'5']; - [_fiveButton setDtmf:true]; - [_sixButton setDigit:'6']; - [_sixButton setDtmf:true]; - [_sevenButton setDigit:'7']; - [_sevenButton setDtmf:true]; - [_eightButton setDigit:'8']; - [_eightButton setDtmf:true]; - [_nineButton setDigit:'9']; - [_nineButton setDtmf:true]; - [_starButton setDigit:'*']; - [_starButton setDtmf:true]; - [_hashButton setDigit:'#']; - [_hashButton setDtmf:true]; -} - -- (void)dealloc { - [PhoneMainView.instance.view removeGestureRecognizer:singleFingerTap]; - // Remove all observer - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - _waitView.hidden = TRUE; - CallManager.instance.nextCallIsTransfer = FALSE; - - callRecording = FALSE; - _recordButtonOnView.hidden = TRUE; - - // Update on show - [self hideRoutes:TRUE animated:FALSE]; - [self hideOptions:TRUE animated:FALSE]; - [self hidePad:TRUE animated:FALSE]; - [self hideSpeaker:LinphoneManager.instance.bluetoothAvailable]; - [self callDurationUpdate]; - [self onCurrentCallChange]; - // Set windows (warn memory leaks) - linphone_core_set_native_video_window_id(LC, (__bridge void *)(_videoView)); - linphone_core_set_native_preview_window_id(LC, (__bridge void *)(_videoPreview)); - - [self previewTouchLift]; - // Enable tap - [singleFingerTap setEnabled:TRUE]; - - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(messageReceived:) - name:kLinphoneMessageReceived - object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(bluetoothAvailabilityUpdateEvent:) - name:kLinphoneBluetoothAvailabilityUpdate - object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(callUpdateEvent:) - name:kLinphoneCallUpdate - object:nil]; - - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(participantListChanged:) - name:kLinphoneConfStateParticipantListChanged - object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(confStateChanged:) - name:kLinphoneConfStateChanged - object:nil]; - - - - - [NSTimer scheduledTimerWithTimeInterval:1 - target:self - selector:@selector(callDurationUpdate) - userInfo:nil - repeats:YES]; - -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; - [[UIDevice currentDevice] setProximityMonitoringEnabled:TRUE]; - - [PhoneMainView.instance setVolumeHidden:TRUE]; - hiddenVolume = TRUE; - - // we must wait didAppear to reset fullscreen mode because we cannot change it in viewwillappear - LinphoneCall *call = linphone_core_get_current_call(LC); - LinphoneCallState state = (call != NULL) ? linphone_call_get_state(call) : 0; - [self callUpdate:call state:state animated:FALSE]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; -[[UIDevice currentDevice] setProximityMonitoringEnabled:FALSE]; - [self disableVideoDisplay:TRUE animated:NO]; - - if (hideControlsTimer != nil) { - [hideControlsTimer invalidate]; - hideControlsTimer = nil; - } - - if (hiddenVolume) { - [PhoneMainView.instance setVolumeHidden:FALSE]; - hiddenVolume = FALSE; - } - - if (videoDismissTimer) { - [self dismissVideoActionSheet:videoDismissTimer]; - [videoDismissTimer invalidate]; - videoDismissTimer = nil; - } - - // Remove observer - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - - [[UIApplication sharedApplication] setIdleTimerDisabled:false]; - [[UIDevice currentDevice] setProximityMonitoringEnabled:FALSE]; - - [PhoneMainView.instance fullScreen:false]; - // Disable tap - [singleFingerTap setEnabled:FALSE]; - - if (linphone_core_get_calls_nb(LC) == 0) { - // reseting speaker button because no more call - _speakerButton.selected = FALSE; - } - - NSString *address = [LinphoneManager.instance lpConfigStringForKey:@"sas_dialog_denied"]; - if (address) { - UIConfirmationDialog *securityDialog = [UIConfirmationDialog ShowWithMessage:NSLocalizedString(@"Trust has been denied. Make a call to start the authentication process again.", nil) - cancelMessage:NSLocalizedString(@"CANCEL", nil) - confirmMessage:NSLocalizedString(@"CALL", nil) - onCancelClick:^() { - } - onConfirmationClick:^() { - LinphoneAddress *addr = linphone_address_new(address.UTF8String); - [CallManager.instance startCallWithAddr:addr isSas:TRUE]; - linphone_address_unref(addr); - } ]; - [securityDialog.securityImage setImage:[UIImage imageNamed:@"security_alert_indicator.png"]]; - securityDialog.securityImage.hidden = FALSE; - [securityDialog setSpecialColor]; - [LinphoneManager.instance lpConfigSetString:nil forKey:@"sas_dialog_denied"]; - } -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - [self updateUnreadMessage:NO]; - [self previewTouchLift]; - [_recordButtonOnView setHidden:!callRecording]; - [self updateCallView]; - LinphoneCall *call = linphone_core_get_current_call(LC) ; - if (call && linphone_call_get_state(call) == LinphoneCallStatePausedByRemote) { - _pausedByRemoteView.hidden = NO; - [self updateInfoView:TRUE]; - } - _conferenceView.hidden = ![CallManager.instance isInConference]; - [self onCurrentCallChange]; -} - -#pragma mark - UI modification - -- (void)updateInfoView:(BOOL)pausedByRemote { - CGRect infoFrame = _infoView.frame; - if (pausedByRemote || !videoHidden) { - infoFrame.origin.y = 0; - } else { - infoFrame.origin.y = (_avatarImage.frame.origin.y-66)/2; - } - _infoView.frame = infoFrame; -} - -- (void)updateCallView { - CGRect pauseFrame = _callPauseButton.frame; - CGRect recordFrame = _recordButtonOnView.frame; - if (videoHidden) { - pauseFrame.origin.y = _bottomBar.frame.origin.y - pauseFrame.size.height - 60; - } else { - pauseFrame.origin.y = _videoCameraSwitch.frame.origin.y+_videoGroup.frame.origin.y; - } - recordFrame.origin.y = _bottomBar.frame.origin.y - pauseFrame.size.height - 60; - _callPauseButton.frame = pauseFrame; - _recordButtonOnView.frame = recordFrame; - [self updateInfoView:FALSE]; -} - -- (void)hideSpinnerIndicator:(LinphoneCall *)call { - _videoWaitingForFirstImage.hidden = TRUE; -} - -static void hideSpinner(LinphoneCall *call, void *user_data) { - CallView *thiz = (__bridge CallView *)user_data; - [thiz hideSpinnerIndicator:call]; -} - -- (void)updateBottomBar:(LinphoneCall *)call state:(LinphoneCallState)state { - [_speakerButton update]; - [_microButton update]; - [_callPauseButton update]; - [_conferencePauseButton update]; - [_videoButton update]; - [_hangupButton update]; - - _optionsButton.enabled = (!call || !linphone_core_sound_resources_locked(LC)); - _optionsTransferButton.enabled = call && !linphone_core_sound_resources_locked(LC); - // enable conference button if 2 calls are presents and at least one is not in the conference - int confSize = linphone_core_get_conference_size(LC) - ([CallManager.instance isInConference] ? 1 : 0); - _optionsConferenceButton.enabled = (linphone_core_get_calls_nb(LC) > 1) && (linphone_core_get_calls_nb(LC) != confSize) && !CallManager.instance.hasConferenceAsGuest; - - // Disable transfert in conference - if (linphone_core_get_current_call(LC) == NULL) { - [_optionsTransferButton setEnabled:FALSE]; - } else { - [_optionsTransferButton setEnabled:TRUE]; - } - - switch (state) { - case LinphoneCallEnd: - case LinphoneCallError: - case LinphoneCallIncoming: - case LinphoneCallOutgoing: - [self hidePad:TRUE animated:TRUE]; - [self hideOptions:TRUE animated:TRUE]; - [self hideRoutes:TRUE animated:TRUE]; - default: - break; - } -} - -- (void)toggleControls:(id)sender { - bool controlsHidden = (_bottomBar.alpha == 0.0); - [self hideControls:!controlsHidden sender:sender]; -} - -- (void)timerHideControls:(id)sender { - [self hideControls:TRUE sender:sender]; -} - -- (void)hideControls:(BOOL)hidden sender:(id)sender { - if (videoHidden && hidden) - return; - - if (hideControlsTimer) { - [hideControlsTimer invalidate]; - hideControlsTimer = nil; - } - - if ([[PhoneMainView.instance currentView] equal:CallView.compositeViewDescription]) { - // show controls - [UIView beginAnimations:nil context:nil]; - [UIView setAnimationDuration:0.35]; - _pausedCallsTable.tableView.alpha = _videoCameraSwitch.alpha = _callPauseButton.alpha = _routesView.alpha = - _optionsView.alpha = _numpadView.alpha = _bottomBar.alpha = _conferenceView.alpha = (hidden ? 0 : 1); - _infoView.alpha = (hidden ? 0 : .8f); - - if ([CallManager.instance inVideoConf]) { - _videoCameraSwitch.frame = CGRectMake(_videoCameraSwitch.frame.origin.x, _bottomBar.frame.origin.y - 75, _videoCameraSwitch.frame.size.width,_videoCameraSwitch.frame.size.height); - } - - if (CallManager.instance.isInConference) { - _callPauseButton.hidden = true; - _conferenceView.frame = CGRectMake(_conferenceView.frame.origin.x,_conferenceView.frame.origin.y,_conferenceView.frame.size.width,_conferenceCallsTable.tableView.frame.origin.y+[_conferenceCallsTable.tableView numberOfRowsInSection:0]*CONFERENCE_CELL_HEIGHT+10); - } - - - [UIView commitAnimations]; - - [PhoneMainView.instance hideTabBar:hidden]; - [PhoneMainView.instance hideStatusBar:hidden]; - - if (!hidden) { - // hide controls in 5 sec - hideControlsTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 - target:self - selector:@selector(timerHideControls:) - userInfo:nil - repeats:NO]; - } - } -} - -- (void)disableVideoDisplay:(BOOL)disabled animated:(BOOL)animation { - if (disabled == videoHidden && animation) - return; - videoHidden = disabled; - - if (!disabled) { - [videoZoomHandler resetZoom]; - } - if (animation) { - [UIView beginAnimations:nil context:nil]; - [UIView setAnimationDuration:1.0]; - } - - [_videoGroup setAlpha:disabled ? 0 : 1]; - - [self hideControls:!disabled sender:nil]; - - if (animation) { - [UIView commitAnimations]; - } - - // only show camera switch button if we have more than 1 camera - _videoCameraSwitch.hidden = (disabled || !LinphoneManager.instance.frontCamId); - _videoPreview.hidden = (disabled || !linphone_core_self_view_enabled(LC)); - - if (hideControlsTimer != nil) { - [hideControlsTimer invalidate]; - hideControlsTimer = nil; - } - - if(![PhoneMainView.instance isIphoneXDevice]){ - [PhoneMainView.instance fullScreen:!disabled]; - } - [PhoneMainView.instance hideTabBar:!disabled]; - - if (!disabled) { -#ifdef TEST_VIDEO_VIEW_CHANGE - [NSTimer scheduledTimerWithTimeInterval:5.0 - target:self - selector:@selector(_debugChangeVideoView) - userInfo:nil - repeats:YES]; -#endif - // [self batteryLevelChanged:nil]; - - [_videoWaitingForFirstImage setHidden:NO]; - [_videoWaitingForFirstImage startAnimating]; - - if ([CallManager.instance inVideoConf]) - [self hideSpinnerIndicator:nil]; - else { - LinphoneCall *call = linphone_core_get_current_call(LC); - // linphone_call_params_get_used_video_codec return 0 if no video stream enabled - if (call != NULL && linphone_call_params_get_used_video_codec(linphone_call_get_current_params(call))) { - linphone_call_set_next_video_frame_decoded_callback(call, hideSpinner, (__bridge void *)(self)); - } - } - } - - if ([CallManager.instance isInConference]) { - [_conferenceView removeFromSuperview]; - [_callView addSubview:_conferenceView]; - } else { - [_conferenceView removeFromSuperview]; - [self.view addSubview:_conferenceView]; - [self.view sendSubviewToBack:_conferenceView]; - } -} - -- (void)displayVideoCall:(BOOL)animated { - [self disableVideoDisplay:FALSE animated:animated]; -} - -- (void)displayAudioCall:(BOOL)animated { - [self disableVideoDisplay:TRUE animated:animated]; -} - -- (void)callDurationUpdate { - int duration = - linphone_core_get_current_call(LC) ? linphone_call_get_duration(linphone_core_get_current_call(LC)) : 0; - _durationLabel.text = [LinphoneUtils durationToString:duration]; - - [_pausedCallsTable update]; - [_conferenceCallsTable update]; -} - -- (void)onCurrentCallChange { - LinphoneCall *call = linphone_core_get_current_call(LC); - - _noActiveCallView.hidden = (call || CallManager.instance.isInConference); - _callView.hidden = !call && !CallManager.instance.isInConference; - _conferenceView.hidden = !CallManager.instance.isInConference; - _conferenceView.hidden = !CallManager.instance.isInConference; - _callPauseButton.hidden = !call; - - - [_callPauseButton setType:UIPauseButtonType_CurrentCall call:call]; - [_conferencePauseButton setType:UIPauseButtonType_Conference call:call]; - - if (call) { - const LinphoneAddress *addr = linphone_call_get_remote_address(call); - [ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr]; - char *uri = linphone_address_as_string_uri_only(addr); - ms_free(uri); - [_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:YES withRoundedRadius:YES]; - } -} - -- (void)hidePad:(BOOL)hidden animated:(BOOL)animated { - if (hidden) { - [_numpadButton setOff]; - } else { - [_numpadButton setOn]; - } - if (hidden != _numpadView.hidden) { - if (animated) { - [self hideAnimation:hidden forView:_numpadView completion:nil]; - } else { - [_numpadView setHidden:hidden]; - } - } -} - -- (void)hideRoutes:(BOOL)hidden animated:(BOOL)animated { - if (hidden) { - [_routesButton setOff]; - } else { - [_routesButton setOn]; - } - - _routesBluetoothButton.selected = [CallManager.instance isBluetoothEnabled]; - _routesSpeakerButton.selected = [CallManager.instance isSpeakerEnabled]; - _routesEarpieceButton.selected = !_routesBluetoothButton.selected && !_routesSpeakerButton.selected; - - if (hidden != _routesView.hidden) { - if (animated) { - [self hideAnimation:hidden forView:_routesView completion:nil]; - } else { - [_routesView setHidden:hidden]; - } - } -} - -- (void)hideOptions:(BOOL)hidden animated:(BOOL)animated { - if (hidden) { - [_optionsButton setOff]; - } else { - [_optionsButton setOn]; - } - if (hidden != _optionsView.hidden) { - if (animated) { - [self hideAnimation:hidden forView:_optionsView completion:nil]; - } else { - [_optionsView setHidden:hidden]; - } - } -} - -- (void)hideSpeaker:(BOOL)hidden { - _speakerButton.hidden = hidden; - _routesButton.hidden = !hidden; -} - -#pragma mark - Event Functions - -- (void)bluetoothAvailabilityUpdateEvent:(NSNotification *)notif { - bool available = [[notif.userInfo objectForKey:@"available"] intValue]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self hideSpeaker:available]; - }); -} - -- (void)callUpdateEvent:(NSNotification *)notif { - LinphoneCall *call = [[notif.userInfo objectForKey:@"call"] pointerValue]; - LinphoneCallState state = [[notif.userInfo objectForKey:@"state"] intValue]; - [self callUpdate:call state:state animated:TRUE]; -} - -- (void)callUpdate:(LinphoneCall *)call state:(LinphoneCallState)state animated:(BOOL)animated { - [self updateBottomBar:call state:state]; - if (hiddenVolume) { - [PhoneMainView.instance setVolumeHidden:FALSE]; - hiddenVolume = FALSE; - } - - // Update tables - [_pausedCallsTable update]; - [_conferenceCallsTable update]; - - [self onCurrentCallChange]; - - LinphoneCall *currentCall = linphone_core_get_current_call(LC); - BOOL shouldDisableVideo = currentCall ? !linphone_call_params_video_enabled(linphone_call_get_current_params(currentCall)): ![CallManager.instance inVideoConf]; - - - if (videoHidden != shouldDisableVideo) { - if (!shouldDisableVideo) { - [self displayVideoCall:animated]; - } else { - [self displayAudioCall:animated]; - } - } - - // Fake call update - if (call == NULL) { - return; - } - - if (state != LinphoneCallPausedByRemote) { - _pausedByRemoteView.hidden = YES; - } - - switch (state) { - case LinphoneCallIncomingReceived: - case LinphoneCallOutgoingInit: - case LinphoneCallConnected: - case LinphoneCallStreamsRunning: { - // check video, because video can be disabled because of the low bandwidth. - if (!linphone_call_params_video_enabled(linphone_call_get_current_params(call))) { - const LinphoneCallParams *param = linphone_call_get_current_params(call); - CallAppData *data = [CallManager getAppDataWithCall:call]; - if (state == LinphoneCallStreamsRunning && data && data.videoRequested && linphone_call_params_low_bandwidth_enabled(param)) { - // too bad video was not enabled because low bandwidth - UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Low bandwidth", nil) - message:NSLocalizedString(@"Video cannot be activated because of low bandwidth " - @"condition, only audio is available", - nil) - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Continue", nil) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) {}]; - - [errView addAction:defaultAction]; - [self presentViewController:errView animated:YES completion:nil]; - data.videoRequested = FALSE; - [CallManager setAppDataWithCall:call appData:data]; - } - } - break; - } - case LinphoneCallUpdatedByRemote: { - const LinphoneCallParams *current = linphone_call_get_current_params(call); - const LinphoneCallParams *remote = linphone_call_get_remote_params(call); - - /* remote wants to add video */ - if ((linphone_core_video_display_enabled(LC) && !linphone_call_params_video_enabled(current) && - linphone_call_params_video_enabled(remote)) && - (!linphone_core_get_video_policy(LC)->automatically_accept || - (([UIApplication sharedApplication].applicationState != UIApplicationStateActive) && - floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max))) { - linphone_core_defer_call_update(LC, call); - [self displayAskToEnableVideoCall:call]; - } else if (linphone_call_params_video_enabled(current) && !linphone_call_params_video_enabled(remote) && ![CallManager.instance inVideoConf]) { - [self displayAudioCall:animated]; - } - break; - } - case LinphoneCallPausing: - case LinphoneCallPaused: - [self displayAudioCall:animated]; - break; - case LinphoneCallPausedByRemote: - if (![CallManager.instance inVideoConf]) { - [self displayAudioCall:animated]; - if (call == linphone_core_get_current_call(LC)) { - _pausedByRemoteView.hidden = NO; - [self updateInfoView:TRUE]; - } - } - break; - case LinphoneCallEnd: - case LinphoneCallError: - default: - break; - } -} - -#pragma mark - ActionSheet Functions - -- (void)displayAskToEnableVideoCall:(LinphoneCall *)call { - - if (CallManager.instance.inVideoConf) { // we are hosting a video conf, so just accept people wanting to activate video. - LinphoneCallParams *params = linphone_core_create_call_params(LC, call); - linphone_call_params_enable_video(params, TRUE); - linphone_call_accept_update(call, params); - return; - } - - if (linphone_core_get_video_policy(LC)->automatically_accept && - !([UIApplication sharedApplication].applicationState != UIApplicationStateActive)) - return; - - NSString *username = [FastAddressBook displayNameForAddress:linphone_call_get_remote_address(call)]; - NSString *title = [NSString stringWithFormat:NSLocalizedString(@"%@ would like to enable video", nil), username]; - if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive && - floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) { - UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; - content.title = NSLocalizedString(@"Video request", nil); - content.body = title; - content.categoryIdentifier = @"video_request"; - content.userInfo = @{ - @"CallId" : [NSString stringWithUTF8String:linphone_call_log_get_call_id(linphone_call_get_call_log(call))] - }; - - UNNotificationRequest *req = - [UNNotificationRequest requestWithIdentifier:@"video_request" content:content trigger:NULL]; - [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:req - withCompletionHandler:^(NSError *_Nullable error) { - // Enable or disable features based on authorization. - if (error) { - LOGD(@"Error while adding notification request :"); - LOGD(error.description); - } - }]; - } else { - UIConfirmationDialog *sheet = [UIConfirmationDialog ShowWithMessage:title - cancelMessage:nil - confirmMessage:NSLocalizedString(@"ACCEPT", nil) - onCancelClick:^() { - LOGI(@"User declined video proposal"); - if (call == linphone_core_get_current_call(LC)) { - [CallManager.instance acceptVideoWithCall:call confirm:FALSE]; - [videoDismissTimer invalidate]; - videoDismissTimer = nil; - } - } - onConfirmationClick:^() { - LOGI(@"User accept video proposal"); - if (call == linphone_core_get_current_call(LC)) { - [CallManager.instance acceptVideoWithCall:call confirm:TRUE]; - [videoDismissTimer invalidate]; - videoDismissTimer = nil; - } - } - inController:self]; - videoDismissTimer = [NSTimer scheduledTimerWithTimeInterval:30 - target:self - selector:@selector(dismissVideoActionSheet:) - userInfo:sheet - repeats:NO]; - } -} - -- (void)dismissVideoActionSheet:(NSTimer *)timer { - UIConfirmationDialog *sheet = (UIConfirmationDialog *)timer.userInfo; - [sheet dismiss]; -} - -#pragma mark VideoPreviewMoving - -- (void)moveVideoPreview:(UIPanGestureRecognizer *)dragndrop { - CGPoint center = [dragndrop locationInView:_videoPreview.superview]; - _videoPreview.center = center; - if (dragndrop.state == UIGestureRecognizerStateEnded) { - [self previewTouchLift]; - } -} - -- (CGFloat)coerce:(CGFloat)value betweenMin:(CGFloat)min andMax:(CGFloat)max { - return MAX(min, MIN(value, max)); -} - -- (void)previewTouchLift { - CGRect previewFrame = _videoPreview.frame; - previewFrame.origin.x = [self coerce:previewFrame.origin.x - betweenMin:5 - andMax:(UIScreen.mainScreen.bounds.size.width - 5 - previewFrame.size.width)]; - previewFrame.origin.y = [self coerce:previewFrame.origin.y - betweenMin:5 - andMax:(UIScreen.mainScreen.bounds.size.height - 5 - previewFrame.size.height)]; - - if (!CGRectEqualToRect(previewFrame, _videoPreview.frame)) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [UIView animateWithDuration:0.3 - animations:^{ - LOGD(@"Recentering preview to %@", NSStringFromCGRect(previewFrame)); - _videoPreview.frame = previewFrame; - }]; - }); - } -} - -#pragma mark - Action Functions - -- (IBAction)onNumpadClick:(id)sender { - if ([_numpadView isHidden]) { - [self hidePad:FALSE animated:ANIMATED]; - } else { - [self hidePad:TRUE animated:ANIMATED]; - } -} - -- (IBAction)onChatClick:(id)sender { - const LinphoneCall *currentCall = linphone_core_get_current_call(LC); - const LinphoneAddress *addr = currentCall ? linphone_call_get_remote_address(currentCall) : NULL; - // TODO encrpted or unencrpted - [LinphoneManager.instance lpConfigSetBool:TRUE forKey:@"create_chat"]; - [PhoneMainView.instance getOrCreateOneToOneChatRoom:addr waitView:_waitView isEncrypted:FALSE]; -} - -- (IBAction)onRecordClick:(id)sender { - if (![_optionsView isHidden]) - [self hideOptions:TRUE animated:ANIMATED]; - if (callRecording) { - [self onRecordOnViewClick:nil]; - } else { - LOGD(@"Recording Starts"); - - [_recordButton setImage:[UIImage imageNamed:@"rec_off_default.png"] forState:UIControlStateNormal]; - [_recordButtonOnView setHidden:FALSE]; - - LinphoneCall *call = linphone_core_get_current_call(LC); - linphone_call_start_recording(call); - - callRecording = TRUE; - } -} - -- (IBAction)onRecordOnViewClick:(id)sender { - LOGD(@"Recording Stops"); - [_recordButton setImage:[UIImage imageNamed:@"rec_on_default.png"] forState:UIControlStateNormal]; - [_recordButtonOnView setHidden:TRUE]; - - LinphoneCall *call = linphone_core_get_current_call(LC); - linphone_call_stop_recording(call); - - callRecording = FALSE; - - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - NSString *writablePath = [paths objectAtIndex:0]; - writablePath = [writablePath stringByAppendingString:@"/"]; - NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:writablePath error:NULL]; - if (directoryContent) { - return; - } -} - -- (IBAction)onRoutesBluetoothClick:(id)sender { - [self hideRoutes:TRUE animated:TRUE]; - [CallManager.instance changeRouteToBluetooth]; -} - -- (IBAction)onRoutesEarpieceClick:(id)sender { - [self hideRoutes:TRUE animated:TRUE]; - [CallManager.instance changeRouteToDefault]; -} - -- (IBAction)onRoutesSpeakerClick:(id)sender { - [self hideRoutes:TRUE animated:TRUE]; - [CallManager.instance changeRouteToSpeaker]; -} - -- (IBAction)onRoutesClick:(id)sender { - if ([_routesView isHidden]) { - [self hideRoutes:FALSE animated:ANIMATED]; - } else { - [self hideRoutes:TRUE animated:ANIMATED]; - } -} - -- (IBAction)onOptionsClick:(id)sender { - int confSize = linphone_core_get_conference_size(LC) - (CallManager.instance.isInConference ? 1 : 0); - _optionsConferenceButton.enabled = (linphone_core_get_calls_nb(LC) > 1) && (linphone_core_get_calls_nb(LC) != confSize) && !CallManager.instance.hasConferenceAsGuest; - - if ([_optionsView isHidden]) { - [self hideOptions:FALSE animated:ANIMATED]; - } else { - [self hideOptions:TRUE animated:ANIMATED]; - } -} - -- (IBAction)onOptionsTransferClick:(id)sender { - [self hideOptions:TRUE animated:TRUE]; - DialerView *view = VIEW(DialerView); - [view setAddress:@""]; - CallManager.instance.nextCallIsTransfer = TRUE; - [PhoneMainView.instance changeCurrentView:view.compositeViewDescription]; -} - -- (IBAction)onOptionsAddClick:(id)sender { - [self hideOptions:TRUE animated:TRUE]; - DialerView *view = VIEW(DialerView); - [view setAddress:@""]; - CallManager.instance.nextCallIsTransfer = FALSE; - [PhoneMainView.instance changeCurrentView:view.compositeViewDescription]; -} - -- (IBAction)onOptionsConferenceClick:(id)sender { - [self hideOptions:TRUE animated:TRUE]; - [CallManager.instance groupCall]; -} - -#pragma mark - Animation - -- (void)hideAnimation:(BOOL)hidden forView:(UIView *)target completion:(void (^)(BOOL finished))completion { - if (hidden) { - int original_y = target.frame.origin.y; - CGRect newFrame = target.frame; - newFrame.origin.y = self.view.frame.size.height; - [UIView animateWithDuration:0.5 - delay:0.0 - options:UIViewAnimationOptionCurveEaseIn - animations:^{ - target.frame = newFrame; - } - completion:^(BOOL finished) { - CGRect originFrame = target.frame; - originFrame.origin.y = original_y; - target.hidden = YES; - target.frame = originFrame; - if (completion) - completion(finished); - }]; - } else { - CGRect frame = target.frame; - int original_y = frame.origin.y; - frame.origin.y = self.view.frame.size.height; - target.frame = frame; - frame.origin.y = original_y; - target.hidden = NO; - - [UIView animateWithDuration:0.5 - delay:0.0 - options:UIViewAnimationOptionCurveEaseOut - animations:^{ - target.frame = frame; - } - completion:^(BOOL finished) { - target.frame = frame; // in case application did not finish - if (completion) - completion(finished); - }]; - } -} - -#pragma mark - Bounce -- (void)messageReceived:(NSNotification *)notif { - [self updateUnreadMessage:TRUE]; -} -- (void)updateUnreadMessage:(BOOL)appear { - int unreadMessage = [LinphoneManager unreadMessageCount]; - if (unreadMessage > 0) { - _chatNotificationLabel.text = [NSString stringWithFormat:@"%i", unreadMessage]; - [_chatNotificationView startAnimating:appear]; - } else { - [_chatNotificationView stopAnimating:appear]; - } -} - -#pragma mark - Conference - -- (void)participantListChanged:(NSNotification *)notif { - [self confStateChanged:nil]; - [_conferenceCallsTable update]; - _conferenceView.frame = CGRectMake(_conferenceView.frame.origin.x,_conferenceView.frame.origin.y,_conferenceView.frame.size.width,_conferenceCallsTable.tableView.frame.origin.y+[_conferenceCallsTable.tableView numberOfRowsInSection:0]*CONFERENCE_CELL_HEIGHT+10); - [self onCurrentCallChange]; - _conferenceView.hidden = !CallManager.instance.isInConference; -} - -- (void)confStateChanged:(NSNotification *)notif { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if ([CallManager.instance inVideoConf]) { - [self displayVideoCall:true]; - } else if (CallManager.instance.isInConference) { - [self displayAudioConference]; - } else { - [self displayAudioCall:true]; - _callPauseButton.hidden = NO; - _nameLabel.hidden = NO; - _durationLabel.hidden = NO; - _avatarImage.hidden = NO; - } - [_conferenceCallsTable update]; - _conferenceView.frame = CGRectMake(_conferenceView.frame.origin.x,_conferenceView.frame.origin.y,_conferenceView.frame.size.width,_conferenceCallsTable.tableView.frame.origin.y+[_conferenceCallsTable.tableView numberOfRowsInSection:0]*CONFERENCE_CELL_HEIGHT+10); - }); -} - --(void) displayAudioConference { - _callPauseButton.hidden = true; - _nameLabel.hidden = true; - _conferenceView.frame = CGRectMake(_conferenceView.frame.origin.x,_conferenceView.frame.origin.y,_conferenceView.frame.size.width,_conferenceCallsTable.tableView.frame.origin.y+[_conferenceCallsTable.tableView numberOfRowsInSection:0]*CONFERENCE_CELL_HEIGHT+10); - _durationLabel.hidden = true; - _avatarImage.hidden = true; - - [_conferenceView removeFromSuperview]; - [_callView addSubview:_conferenceView]; - - if ([CallManager.instance isInConference]) { - [_conferenceView removeFromSuperview]; - [_callView addSubview:_conferenceView]; - _conferenceView.hidden = NO; - } else { - [_conferenceView removeFromSuperview]; - [self.view addSubview:_conferenceView]; - [self.view sendSubviewToBack:_conferenceView]; - } -} - - - -@end diff --git a/Classes/ChatConversationImdnView.h b/Classes/ChatConversationImdnView.h index 78a9042b6..26607f58d 100644 --- a/Classes/ChatConversationImdnView.h +++ b/Classes/ChatConversationImdnView.h @@ -24,6 +24,7 @@ #import "UICompositeView.h" #import "UIRoundBorderedButton.h" +#import "UIChatBubbleTextCell.h" @interface ChatConversationImdnView : UIViewController { diff --git a/Classes/ChatConversationView.h b/Classes/ChatConversationView.h index 7c76cb286..7d8fd00dc 100644 --- a/Classes/ChatConversationView.h +++ b/Classes/ChatConversationView.h @@ -32,7 +32,6 @@ #import "UIImageViewDeletable.h" #import "UIConfirmationDialog.h" #import "UIInterfaceStyleButton.h" -#import "linphoneapp-Swift.h" #import "UIChatReplyBubbleView.h" #include "linphone/linphonecore.h" diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index 40e86856f..6ae1f25b4 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -28,6 +28,8 @@ #import "SVProgressHUD.h" #import "EphemeralSettingsView.h" #import "Utils.h" +#import "linphoneapp-Swift.h" + @implementation FileContext @@ -1853,7 +1855,7 @@ void on_chat_room_conference_alert(LinphoneChatRoom *cr, const LinphoneEventLog NSDictionary* userInfo = @{@"path": [NSString stringWithUTF8String:linphone_player_get_user_data(_sharedVoicePlayer)]}; [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneVoiceMessagePlayerLostFocus object:nil userInfo:userInfo]; } - [CallManager.instance changeRouteToSpeaker]; + [AudioRouteUtils routeAudioToSpeaker]; linphone_player_set_user_data(_sharedVoicePlayer, (void *)path); linphone_player_open(_sharedVoicePlayer, path); linphone_player_start(_sharedVoicePlayer); diff --git a/Classes/Contact.m b/Classes/Contact.m index fd27e9078..03a7e4174 100644 --- a/Classes/Contact.m +++ b/Classes/Contact.m @@ -120,6 +120,7 @@ return nil; } + - (NSString *)displayName { if (_friend) { const char *friend_name = linphone_friend_get_name(_friend); diff --git a/Classes/DevicesListView.m b/Classes/DevicesListView.m index 4913b6173..60e005dc9 100644 --- a/Classes/DevicesListView.m +++ b/Classes/DevicesListView.m @@ -20,6 +20,8 @@ #import "DevicesListView.h" #import "PhoneMainView.h" #import "UIDeviceCell.h" +#import "linphoneapp-Swift.h" + @implementation DevicesMenuEntry - (id)init:(LinphoneParticipantDevice *)dev isMe:(BOOL)isMe isFirst:(BOOL)first isUnique:(BOOL)unique index:(NSInteger)idx{ diff --git a/Classes/DialerView.m b/Classes/DialerView.m index df1a5d70f..d24f91ee2 100644 --- a/Classes/DialerView.m +++ b/Classes/DialerView.m @@ -21,6 +21,7 @@ #import "LinphoneManager.h" #import "PhoneMainView.h" +#import "linphoneapp-Swift.h" @implementation DialerView @@ -397,7 +398,7 @@ static UICompositeViewDescription *compositeDescription = nil; } - (IBAction)onBackClick:(id)event { - [PhoneMainView.instance popToView:CallView.compositeViewDescription]; + [PhoneMainView.instance popToView:ActiveCallOrConferenceView.compositeViewDescription]; } - (IBAction)onAddressChange:(id)sender { diff --git a/Classes/ImagePickerView.m b/Classes/ImagePickerView.m index ab1850f74..d4e4cebb7 100644 --- a/Classes/ImagePickerView.m +++ b/Classes/ImagePickerView.m @@ -301,96 +301,83 @@ static UICompositeViewDescription *compositeDescription = nil; inView:(UIView *)ipadView withDocumentMenuDelegate:(id)documentMenuDelegate { void (^block)(UIImagePickerControllerSourceType) = ^(UIImagePickerControllerSourceType type) { - ImagePickerView *view = VIEW(ImagePickerView); - view.sourceType = type; - - // Displays a control that allows the user to choose picture or - // movie capture, if both are available: - view.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeMovie,(NSString *)kUTTypeImage,nil]; - - // Hides the controls for moving & scaling pictures, or for - // trimming movies. To instead show the controls, use YES. - view.allowsEditing = NO; - view.imagePickerDelegate = delegate; - - if (IPAD && ipadView && ipadPopoverView) { - UIView *iterview = ipadPopoverView; - CGRect ipadPopoverPosition = iterview.frame; - do { - ipadPopoverPosition = - [iterview.superview convertRect:ipadPopoverPosition toView:iterview.superview.superview]; - iterview = iterview.superview; - } while (iterview && iterview.superview != ipadView); - [view.popoverController presentPopoverFromRect:ipadPopoverPosition - inView:ipadView - permittedArrowDirections:UIPopoverArrowDirectionAny - animated:FALSE]; - } else { - [PhoneMainView.instance changeCurrentView:view.compositeViewDescription]; - } - }; - if ([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized) { - DTActionSheet *sheet = [[DTActionSheet alloc] initWithTitle:NSLocalizedString(@"Select the source", nil)]; - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { - [sheet addButtonWithTitle:NSLocalizedString(@"Camera", nil) - block:^() { - if([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] != AVAuthorizationStatusAuthorized ) { - [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Camera's permission", nil) message:NSLocalizedString(@"Camera not authorized", nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Continue", nil] show]; - return; - } - block(UIImagePickerControllerSourceTypeCamera); - }]; - } - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { - [sheet addButtonWithTitle:NSLocalizedString(@"Photo library", nil) - block:^() { - block(UIImagePickerControllerSourceTypePhotoLibrary); - }]; - } + ImagePickerView *view = VIEW(ImagePickerView); + view.sourceType = type; - if (documentMenuDelegate) { - [sheet addButtonWithTitle:NSLocalizedString(@"Document",nil) block:^(){ - [self pickDocumentForDelegate:documentMenuDelegate]; - }]; + // Displays a control that allows the user to choose picture or + // movie capture, if both are available: + view.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeMovie,(NSString *)kUTTypeImage,nil]; + + // Hides the controls for moving & scaling pictures, or for + // trimming movies. To instead show the controls, use YES. + view.allowsEditing = NO; + view.imagePickerDelegate = delegate; + + if (IPAD && ipadView && ipadPopoverView) { + UIView *iterview = ipadPopoverView; + CGRect ipadPopoverPosition = iterview.frame; + do { + ipadPopoverPosition = + [iterview.superview convertRect:ipadPopoverPosition toView:iterview.superview.superview]; + iterview = iterview.superview; + } while (iterview && iterview.superview != ipadView); + [view.popoverController presentPopoverFromRect:ipadPopoverPosition + inView:ipadView + permittedArrowDirections:UIPopoverArrowDirectionAny + animated:FALSE]; + } else { + [PhoneMainView.instance changeCurrentView:view.compositeViewDescription]; } - [sheet addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; - - [sheet showInView:PhoneMainView.instance.view]; - } else { - [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { - dispatch_async(dispatch_get_main_queue(), ^{ - if ([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized) { - DTActionSheet *sheet = [[DTActionSheet alloc] initWithTitle:NSLocalizedString(@"Select the source", nil)]; - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { - [sheet addButtonWithTitle:NSLocalizedString(@"Camera", nil) - block:^() { - if([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] != AVAuthorizationStatusAuthorized ) { - [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Camera's permission", nil) message:NSLocalizedString(@"Camera not authorized", nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Continue", nil] show]; - return; - } - block(UIImagePickerControllerSourceTypeCamera); - }]; - } - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { - [sheet addButtonWithTitle:NSLocalizedString(@"Photo library", nil) - block:^() { - block(UIImagePickerControllerSourceTypePhotoLibrary); - }]; - } - if (documentMenuDelegate) { - [sheet addButtonWithTitle:NSLocalizedString(@"Document",nil) block:^(){ - [self pickDocumentForDelegate:documentMenuDelegate]; - }]; - } - [sheet addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; - - [sheet showInView:PhoneMainView.instance.view]; - } else { - [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Photo's permission", nil) message:NSLocalizedString(@"Photo not authorized", nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Continue", nil] show]; - } - }); - }]; - } + }; + DTActionSheet *sheet = [[DTActionSheet alloc] initWithTitle:NSLocalizedString(@"Select the source", nil)]; + if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { + [sheet addButtonWithTitle:NSLocalizedString(@"Camera", nil) + block:^() { + if([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] != AVAuthorizationStatusAuthorized ) { + [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Camera's permission", nil) message:NSLocalizedString(@"Camera not authorized", nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Continue", nil] show]; + return; + } + if ([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized) + block(UIImagePickerControllerSourceTypeCamera); + else { + [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { + dispatch_async(dispatch_get_main_queue(), ^{ + if ([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized) { + block(UIImagePickerControllerSourceTypeCamera); + } else { + [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Photo's permission", nil) message:NSLocalizedString(@"Photo not authorized", nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil] show]; + } + }); + }]; + } + }]; + } + if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { + [sheet addButtonWithTitle:NSLocalizedString(@"Photo library", nil) + block:^() { + if ([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized) + block(UIImagePickerControllerSourceTypePhotoLibrary); + else { + [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { + dispatch_async(dispatch_get_main_queue(), ^{ + if ([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized) { + block(UIImagePickerControllerSourceTypePhotoLibrary); + } else { + [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Photo's permission", nil) message:NSLocalizedString(@"Photo not authorized", nil) delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil] show]; + } + }); + }]; + } + }]; + } + if (documentMenuDelegate) { + [sheet addButtonWithTitle:NSLocalizedString(@"Document",nil) block:^(){ + [self pickDocumentForDelegate:documentMenuDelegate]; + }]; + } + [sheet addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; + + [sheet showInView:PhoneMainView.instance.view]; } +(void) pickDocumentForDelegate:(id)documentMenuDelegate { diff --git a/Classes/LinphoneAppDelegate.h b/Classes/LinphoneAppDelegate.h index d3820267b..9a4768d11 100644 --- a/Classes/LinphoneAppDelegate.h +++ b/Classes/LinphoneAppDelegate.h @@ -23,7 +23,6 @@ #import #import #import -#import "linphoneapp-Swift.h" @interface LinphoneAppDelegate : NSObject { diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index be99479de..1d4c152c3 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -140,7 +140,7 @@ if ((floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max)) { if ([LinphoneManager.instance lpConfigBoolForKey:@"autoanswer_notif_preference"]) { linphone_call_accept(call); - [PhoneMainView.instance changeCurrentView:CallView.compositeViewDescription]; + [PhoneMainView.instance changeCurrentView:ActiveCallOrConferenceView.compositeViewDescription]; } else { [PhoneMainView.instance displayIncomingCall:call]; } @@ -321,6 +321,8 @@ return NO; } + VIEW(ActiveCallOrConferenceView); // to get created and all observers added + return YES; } @@ -409,16 +411,9 @@ } // used for callkit. Called when active video. -- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler -{ +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { - - if ([userActivity.activityType isEqualToString:@"INStartVideoCallIntent"]) { - LOGI(@"CallKit: satrt video."); - CallView *view = VIEW(CallView); - [view.videoButton setOn]; - } - if ([userActivity.activityType isEqualToString:@"INStartAudioCallIntent"]) { // tel URI handler. + if ([userActivity.activityType isEqualToString:@"INStartAudioCallIntent"]||[userActivity.activityType isEqualToString:@"INStartVideoCallIntent"]) { // tel URI handler. INInteraction *interaction = userActivity.interaction; INStartAudioCallIntent *startAudioCallIntent = (INStartAudioCallIntent *)interaction.intent; INPerson *contact = startAudioCallIntent.contacts[0]; @@ -537,8 +532,7 @@ if ([response.actionIdentifier isEqual:@"Answer"]) { // use the standard handler - [PhoneMainView.instance changeCurrentView:CallView.compositeViewDescription]; - linphone_call_accept(call); + [CallManager.instance acceptCallWithCall:call hasVideo:NO]; } else if ([response.actionIdentifier isEqual:@"Decline"]) { linphone_call_decline(call, LinphoneReasonDeclined); } else if ([response.actionIdentifier isEqual:@"Reply"]) { @@ -575,7 +569,6 @@ return; [[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications]; - [PhoneMainView.instance changeCurrentView:CallView.compositeViewDescription]; [CallManager.instance acceptVideoWithCall:call confirm:TRUE]; } else if ([response.actionIdentifier isEqual:@"Confirm"]) { if (linphone_core_get_current_call(LC) == call) @@ -608,7 +601,7 @@ } } else if ([response.notification.request.content.categoryIdentifier isEqual:@"video_request"]) { if (!call) return; - [PhoneMainView.instance changeCurrentView:CallView.compositeViewDescription]; + [PhoneMainView.instance changeCurrentView:ActiveCallOrConferenceView.compositeViewDescription]; NSTimer *videoDismissTimer = nil; UIConfirmationDialog *sheet = [UIConfirmationDialog ShowWithMessage:response.notification.request.content.body cancelMessage:nil @@ -692,8 +685,7 @@ if ([notification.category isEqualToString:@"incoming_call"]) { if ([identifier isEqualToString:@"answer"]) { // use the standard handler - [PhoneMainView.instance changeCurrentView:CallView.compositeViewDescription]; - linphone_call_accept(call); + [CallManager.instance acceptCallWithCall:call hasVideo:NO]; } else if ([identifier isEqualToString:@"decline"]) { LinphoneCall *call = linphone_core_get_current_call(LC); if (call) @@ -730,8 +722,7 @@ if ([notification.category isEqualToString:@"incoming_call"]) { if ([identifier isEqualToString:@"answer"]) { // use the standard handler - [PhoneMainView.instance changeCurrentView:CallView.compositeViewDescription]; - linphone_call_accept(call); + [CallManager.instance acceptCallWithCall:call hasVideo:NO]; } else if ([identifier isEqualToString:@"decline"]) { LinphoneCall *call = linphone_core_get_current_call(LC); if (call) diff --git a/Classes/LinphoneCoreSettingsStore.m b/Classes/LinphoneCoreSettingsStore.m index 219841b65..077c5e84b 100644 --- a/Classes/LinphoneCoreSettingsStore.m +++ b/Classes/LinphoneCoreSettingsStore.m @@ -25,6 +25,8 @@ #include "linphone/lpconfig.h" #include #include +#import "linphoneapp-Swift.h" + @implementation LinphoneCoreSettingsStore diff --git a/Classes/LinphoneManager.h b/Classes/LinphoneManager.h index 53be84967..f0027fb6f 100644 --- a/Classes/LinphoneManager.h +++ b/Classes/LinphoneManager.h @@ -35,7 +35,6 @@ #include "bctoolbox/list.h" #import "OrderedDictionary.h" -#import "linphoneapp-Swift.h" extern NSString *const LINPHONERC_APPLICATION_KEY; @@ -49,7 +48,6 @@ extern NSString *const kLinphoneMainViewChange; extern NSString *const kLinphoneAddressBookUpdate; extern NSString *const kLinphoneLogsUpdate; extern NSString *const kLinphoneSettingsUpdate; -extern NSString *const kLinphoneBluetoothAvailabilityUpdate; extern NSString *const kLinphoneConfiguringStateUpdate; extern NSString *const kLinphoneGlobalStateUpdate; extern NSString *const kLinphoneNotifyReceived; @@ -204,7 +202,6 @@ typedef struct _LinphoneManagerSounds { @property (readonly) sqlite3* database; @property (readonly) LinphoneManagerSounds sounds; @property (readonly) NSMutableArray *logs; -@property (nonatomic, assign) BOOL bluetoothAvailable; @property (readonly) NSString* contactSipField; @property (readonly,copy) NSString* contactFilter; @property (copy) void (^silentPushCompletion)(UIBackgroundFetchResult); diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index fc2a91d95..a04fd5220 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -31,7 +31,6 @@ #import "LinphoneCoreSettingsStore.h" #import "LinphoneAppDelegate.h" #import "LinphoneManager.h" -#import "Utils/AudioHelper.h" #import "Utils/FileTransferDelegate.h" #include "linphone/factory.h" @@ -46,6 +45,7 @@ #import "ChatsListView.h" #import "ChatConversationView.h" #import +#import "linphoneapp-Swift.h" #define LINPHONE_LOGS_MAX_ENTRY 5000 @@ -233,11 +233,7 @@ struct codec_name_pref_table codec_pref_table[] = {{"speex", 8000, "speex_8k_pre - (id)init { if ((self = [super init])) { - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(audioRouteChangeListenerCallback:) - name:AVAudioSessionRouteChangeNotification - object:nil]; - + NSString *path = [[NSBundle mainBundle] pathForResource:@"msg" ofType:@"wav"]; self.messagePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] error:nil]; @@ -1767,20 +1763,7 @@ static int comp_call_state_paused(const LinphoneCall *call, const void *param) { _configDb = linphone_config_new_for_shared_core(kLinphoneMsgNotificationAppGroupId.UTF8String, @"linphonerc".UTF8String, factory.UTF8String); linphone_config_clean_entry(_configDb, "misc", "max_calls"); } -#pragma mark - Audio route Functions -- (void)audioRouteChangeListenerCallback:(NSNotification *)notif { - if (IPAD) - return; - - _bluetoothAvailable = [CallManager.instance isBluetoothAvailable]; - - NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:_bluetoothAvailable], @"available", nil]; - [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneBluetoothAvailabilityUpdate - object:self - userInfo:dict]; - -} #pragma mark - Call Functions - (void)send:(NSString *)replyText toChatRoom:(LinphoneChatRoom *)room { @@ -2162,7 +2145,6 @@ static int comp_call_state_paused(const LinphoneCall *call, const void *param) { if ([ct currentCalls] != nil) { if (call) { LOGI(@"Pausing SIP call because GSM call"); - CallManager.instance.speakerBeforePause = [CallManager.instance isSpeakerEnabled]; linphone_call_pause(call); [self startCallPausedLongRunningTask]; } else if (linphone_core_is_in_conference(theLinphoneCore)) { diff --git a/Classes/LinphoneUI/Base.lproj/StatusBarView.xib b/Classes/LinphoneUI/Base.lproj/StatusBarView.xib index 0830037cb..341bcf9a8 100644 --- a/Classes/LinphoneUI/Base.lproj/StatusBarView.xib +++ b/Classes/LinphoneUI/Base.lproj/StatusBarView.xib @@ -1,8 +1,10 @@ - - + + + - + + @@ -21,15 +23,15 @@ - - + + - - - - - - - - - - - - - - - - diff --git a/Classes/LinphoneUI/Base.lproj/UICallPausedCell.xib b/Classes/LinphoneUI/Base.lproj/UICallPausedCell.xib deleted file mode 100644 index 423378a9e..000000000 --- a/Classes/LinphoneUI/Base.lproj/UICallPausedCell.xib +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/LinphoneUI/UIBackToCallButton.m b/Classes/LinphoneUI/UIBackToCallButton.m index 60c9f4df4..3a272f5a8 100644 --- a/Classes/LinphoneUI/UIBackToCallButton.m +++ b/Classes/LinphoneUI/UIBackToCallButton.m @@ -20,6 +20,7 @@ #import "UIBackToCallButton.h" #import "LinphoneManager.h" #import "PhoneMainView.h" +#import "linphoneapp-Swift.h" @implementation UIBackToCallButton @@ -46,7 +47,7 @@ } - (IBAction)onBackToCallClick:(id)sender { - [PhoneMainView.instance popToView:CallView.compositeViewDescription]; + [PhoneMainView.instance popToView:ActiveCallOrConferenceView.compositeViewDescription]; } @end diff --git a/Classes/LinphoneUI/UIBluetoothButton.m b/Classes/LinphoneUI/UIBluetoothButton.m index 53abc1818..f14af83b3 100644 --- a/Classes/LinphoneUI/UIBluetoothButton.m +++ b/Classes/LinphoneUI/UIBluetoothButton.m @@ -18,10 +18,8 @@ */ #import "UIBluetoothButton.h" -#import "../Utils/AudioHelper.h" #import "Utils.h" #import - #include "linphone/linphonecore.h" @implementation UIBluetoothButton diff --git a/Classes/LinphoneUI/UICallButton.m b/Classes/LinphoneUI/UICallButton.m index c84a7dafd..aa925fc22 100644 --- a/Classes/LinphoneUI/UICallButton.m +++ b/Classes/LinphoneUI/UICallButton.m @@ -21,6 +21,8 @@ #import "LinphoneManager.h" #import +#import "linphoneapp-Swift.h" + @implementation UICallButton diff --git a/Classes/LinphoneUI/UICallConferenceCell.h b/Classes/LinphoneUI/UICallConferenceCell.h deleted file mode 100644 index cf59dfe3c..000000000 --- a/Classes/LinphoneUI/UICallConferenceCell.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UIRoundedImageView.h" -#import "LinphoneManager.h" -#import "UIInterfaceStyleButton.h" - -#define CONFERENCE_CELL_HEIGHT 60 - -@interface UICallConferenceCell : UITableViewCell - -@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage; -@property(weak, nonatomic) IBOutlet UILabel *nameLabel; -@property(weak, nonatomic) IBOutlet UILabel *durationLabel; -@property (weak, nonatomic) IBOutlet UIInterfaceStyleButton *kickButton; -@property(nonatomic, setter=setParticipant:) LinphoneParticipant *participant; - -- (id)initWithIdentifier:(NSString *)identifier; -- (IBAction)onKickClick:(id)sender; - -@end diff --git a/Classes/LinphoneUI/UICallConferenceCell.m b/Classes/LinphoneUI/UICallConferenceCell.m deleted file mode 100644 index 0e64ca4b1..000000000 --- a/Classes/LinphoneUI/UICallConferenceCell.m +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UICallConferenceCell.h" -#import "Utils.h" -#import "PhoneMainView.h" - -@implementation UICallConferenceCell - -- (id)initWithIdentifier:(NSString *)identifier { - self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - if (self != nil) { - NSArray *arrayOfViews = - [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; - if ([arrayOfViews count] >= 1) { - // resize cell to match .nib size. It is needed when resized the cell to - // correctly adapt its height too - UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]); - [self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)]; - [self addSubview:sub]; - } - } - return self; -} - -- (void)setParticipant:(LinphoneParticipant *)p { - _participant = p; - if (!p) { - return; - } - const LinphoneAddress *addr = linphone_participant_get_address(p); - [ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr]; - _durationLabel.text = [LinphoneUtils durationToString:[NSDate date].timeIntervalSince1970 - linphone_participant_get_creation_time(p)]; - _kickButton.hidden = CallManager.instance.isInConferenceAsGuest; -} - - -- (IBAction)onKickClick:(id)sender { - if (!_participant) { - return; - } - - if ([CallManager callKitEnabled]) { - LinphoneCall *call = [CallManager.instance getCallForParticipant:_participant]; - if (call) { - [CallManager.instance setHeldWithCall:call hold:true]; - } - } - linphone_conference_remove_participant_2([CallManager.instance getConference], _participant); - - -} -@end diff --git a/Classes/LinphoneUI/UICallPausedCell.h b/Classes/LinphoneUI/UICallPausedCell.h deleted file mode 100644 index 77bdedd71..000000000 --- a/Classes/LinphoneUI/UICallPausedCell.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UIRoundedImageView.h" -#import "LinphoneManager.h" -#import "UIPauseButton.h" - -@interface UICallPausedCell : UITableViewCell - -@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage; -@property(weak, nonatomic) IBOutlet UILabel *nameLabel; -@property(weak, nonatomic) IBOutlet UILabel *durationLabel; -@property(weak, nonatomic) IBOutlet UIPauseButton *pauseButton; - -- (id)initWithIdentifier:(NSString *)identifier; -- (void)setCall:(LinphoneCall *)call; - -@end diff --git a/Classes/LinphoneUI/UICallPausedCell.m b/Classes/LinphoneUI/UICallPausedCell.m deleted file mode 100644 index fe51d9c5d..000000000 --- a/Classes/LinphoneUI/UICallPausedCell.m +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UICallPausedCell.h" -#import "Utils.h" - -@implementation UICallPausedCell - -- (id)initWithIdentifier:(NSString *)identifier { - self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - if (self != nil) { - NSArray *arrayOfViews = - [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; - if ([arrayOfViews count] >= 1) { - // resize cell to match .nib size. It is needed when resized the cell to - // correctly adapt its height too - UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]); - [self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)]; - [self addSubview:sub]; - } - } - return self; -} - -- (void)setCall:(LinphoneCall *)call { - // if no call is provided, we assume that this is a conference - if (!call || linphone_call_get_conference(call)) { - [_pauseButton setType:UIPauseButtonType_Conference call:call]; - _nameLabel.text = NSLocalizedString(@"Conference", nil); - [_avatarImage setImage:[UIImage imageNamed:@"options_start_conference_default.png"] - bordered:NO - withRoundedRadius:YES]; - _durationLabel.text = @""; - } else { - [_pauseButton setType:UIPauseButtonType_Call call:call]; - const LinphoneAddress *addr = linphone_call_get_remote_address(call); - [ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr]; - [_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:NO withRoundedRadius:YES]; - _durationLabel.text = [LinphoneUtils durationToString:linphone_call_get_duration(call)]; - } - [_pauseButton update]; -} - -@end diff --git a/Classes/LinphoneUI/UIChatBubblePhotoCell.m b/Classes/LinphoneUI/UIChatBubblePhotoCell.m index ccf47d7aa..01b13c93b 100644 --- a/Classes/LinphoneUI/UIChatBubblePhotoCell.m +++ b/Classes/LinphoneUI/UIChatBubblePhotoCell.m @@ -25,6 +25,8 @@ #import #import #import +#import "linphoneapp-Swift.h" + #define voicePlayer VIEW(ChatConversationView).sharedVoicePlayer #define chatView VIEW(ChatConversationView) diff --git a/Classes/LinphoneUI/UIChatBubbleTextCell.m b/Classes/LinphoneUI/UIChatBubbleTextCell.m index 4038ac799..079891029 100644 --- a/Classes/LinphoneUI/UIChatBubbleTextCell.m +++ b/Classes/LinphoneUI/UIChatBubbleTextCell.m @@ -25,6 +25,8 @@ #import #import #import +#import "linphoneapp-Swift.h" + @implementation UIChatBubbleTextCell diff --git a/Classes/LinphoneUI/UIHangUpButton.m b/Classes/LinphoneUI/UIHangUpButton.m deleted file mode 100644 index 6ab96297d..000000000 --- a/Classes/LinphoneUI/UIHangUpButton.m +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UIHangUpButton.h" -#import "LinphoneManager.h" - -#import "linphoneapp-Swift.h" - -@implementation UIHangUpButton - -#pragma mark - Static Functions - -+ (bool)isInConference:(LinphoneCall *)call { - if (!call) - return false; - return linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(call)); -} - -+ (int)callCount { - int count = 0; - const MSList *calls = linphone_core_get_calls(LC); - - while (calls != 0) { - if (![UIHangUpButton isInConference:((LinphoneCall *)calls->data)]) { - count++; - } - calls = calls->next; - } - return count; -} - -#pragma mark - Lifecycle Functions - -- (void)initUIHangUpButton { - [self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside]; -} - -- (id)init { - self = [super init]; - if (self) { - [self initUIHangUpButton]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (self) { - [self initUIHangUpButton]; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initUIHangUpButton]; - } - return self; -} - -#pragma mark - - -- (void)update { - if (linphone_core_get_calls_nb(LC) == 1 || // One call - linphone_core_get_current_call(LC) != NULL || // In call - linphone_core_is_in_conference(LC) || // In conference - (linphone_core_get_conference_size(LC) > 0 && [UIHangUpButton callCount] == 0) // Only one conf - ) { - [self setEnabled:true]; - return; - } - [self setEnabled:false]; -} - -#pragma mark - Action Functions - -- (void)touchUp:(id)sender { - LinphoneCall *currentcall = linphone_core_get_current_call(LC); - if (linphone_core_is_in_conference(LC) || // In conference - (linphone_core_get_conference_size(LC) > 0 && [UIHangUpButton callCount] == 0) // Only one conf - ) { - LinphoneManager.instance.conf = TRUE; - linphone_core_terminate_conference(LC); - } else if (currentcall != NULL) { - [CallManager.instance terminateCallWithCall:currentcall]; - } else { - const MSList *calls = linphone_core_get_calls(LC); - if (bctbx_list_size(calls) == 1) { // Only one call - [CallManager.instance terminateCallWithCall:(calls->data)]; - } - } -} - -@end diff --git a/Classes/LinphoneUI/UIPauseButton.m b/Classes/LinphoneUI/UIPauseButton.m deleted file mode 100644 index 797e88675..000000000 --- a/Classes/LinphoneUI/UIPauseButton.m +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UIPauseButton.h" -#import "LinphoneManager.h" -#import "Utils.h" - -@implementation UIPauseButton - -#pragma mark - Lifecycle Functions - -- (void)initUIPauseButton { - type = UIPauseButtonType_CurrentCall; -} - -- (id)init { - self = [super init]; - if (self) { - [self initUIPauseButton]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (self) { - [self initUIPauseButton]; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initUIPauseButton]; - } - return self; -} - -#pragma mark - Static Functions - -+ (bool)isInConference:(LinphoneCall *)call { - if (!call) - return false; - return linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(call)); -} - -+ (LinphoneCall *)getCall { - LinphoneCall *currentCall = linphone_core_get_current_call(LC); - if (currentCall == nil && linphone_core_get_calls_nb(LC) == 1) { - currentCall = (LinphoneCall *)linphone_core_get_calls(LC)->data; - } - return currentCall; -} - -#pragma mark - - -- (void)setType:(UIPauseButtonType)atype call:(LinphoneCall *)acall { - type = atype; - call = acall; -} - -#pragma mark - UIToggleButtonDelegate Functions - -- (void)onOn { - switch (type) { - case UIPauseButtonType_Call: { - if (call != nil) { - if ([CallManager callKitEnabled]) { - [CallManager.instance setHeldWithCall:call hold:true]; - } else { - CallManager.instance.speakerBeforePause = [CallManager.instance isSpeakerEnabled]; - linphone_call_pause(call); - } - } else { - LOGW(@"Cannot toggle pause buttton, because no current call"); - } - break; - } - case UIPauseButtonType_Conference: { - linphone_core_leave_conference(CallManager.instance.getConference); - // Fake event - [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneCallUpdate object:self]; - break; - } - case UIPauseButtonType_CurrentCall: { - LinphoneCall *currentCall = [UIPauseButton getCall]; - if (currentCall != nil) { - if ([CallManager callKitEnabled]) { - [CallManager.instance setHeldWithCall:currentCall hold:true]; - } else { - CallManager.instance.speakerBeforePause = [CallManager.instance isSpeakerEnabled]; - linphone_call_pause(currentCall); - } - } else { - LOGW(@"Cannot toggle pause buttton, because no current call"); - } - break; - } - } -} - -- (void)onOff { - switch (type) { - case UIPauseButtonType_Call: { - if (call != nil) { - if ([CallManager callKitEnabled]) { - [CallManager.instance setHeldWithCall:call hold:false]; - } else { - linphone_call_resume(call); - } - } else { - LOGW(@"Cannot toggle pause buttton, because no current call"); - } - break; - } - case UIPauseButtonType_Conference: { - linphone_core_enter_conference(CallManager.instance.getConference); - // Fake event - [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneCallUpdate object:self]; - break; - } - case UIPauseButtonType_CurrentCall: { - LinphoneCall *currentCall = [UIPauseButton getCall]; - if ([CallManager callKitEnabled]) { - [CallManager.instance setHeldWithCall:currentCall hold:false]; - } else { - linphone_call_resume(currentCall); - } - break; - } - } -} - -- (bool)onUpdate { - bool ret = false; - LinphoneCall *c = call; - switch (type) { - case UIPauseButtonType_Conference: { - self.enabled = CallManager.instance.getConference && (linphone_conference_get_participant_count(CallManager.instance.getConference)> 0); - if (self.enabled) { - ret = (!CallManager.instance.isInConference); - } - break; - } - case UIPauseButtonType_CurrentCall: - c = [UIPauseButton getCall]; - case UIPauseButtonType_Call: { - if (c != nil) { - LinphoneCallState state = linphone_call_get_state(c); - ret = (state == LinphoneCallPaused || state == LinphoneCallPausing); - self.enabled = !linphone_core_sound_resources_locked(LC) && - (state == LinphoneCallPaused || state == LinphoneCallPausing || - state == LinphoneCallStreamsRunning); - } else { - self.enabled = FALSE; - } - break; - } - } - return ret; -} - -@end diff --git a/Classes/LinphoneUI/UISpeakerButton.m b/Classes/LinphoneUI/UISpeakerButton.m deleted file mode 100644 index 64c12d5b9..000000000 --- a/Classes/LinphoneUI/UISpeakerButton.m +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import -#import "UISpeakerButton.h" -#import "Utils.h" -#import "LinphoneManager.h" - -#include "linphone/linphonecore.h" - -@implementation UISpeakerButton - -INIT_WITH_COMMON_CF { - [NSNotificationCenter.defaultCenter addObserver:self - selector:@selector(audioRouteChangeListenerCallback:) - name:AVAudioSessionRouteChangeNotification - object:nil]; - return self; -} - -- (void)onOn { - [CallManager.instance changeRouteToSpeaker]; -} - -- (void)onOff { - [CallManager.instance changeRouteToDefault]; -} - - -- (void)dealloc { - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -#pragma mark - UIToggleButtonDelegate Functions - -- (void)audioRouteChangeListenerCallback:(NSNotification *)notif { - dispatch_async(dispatch_get_main_queue(), ^{ - [self update];}); -} - -- (bool)onUpdate { - return [CallManager.instance isSpeakerEnabled]; -} - -@end diff --git a/Classes/LinphoneUI/UIVideoButton.m b/Classes/LinphoneUI/UIVideoButton.m deleted file mode 100644 index af97c4295..000000000 --- a/Classes/LinphoneUI/UIVideoButton.m +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "UIVideoButton.h" -#include "LinphoneManager.h" -#import "Log.h" - -@implementation UIVideoButton { - BOOL last_update_state; -} - -@synthesize waitView; - -INIT_WITH_COMMON_CF { - last_update_state = FALSE; - return self; -} - -- (void)onOn { - - if (!linphone_core_video_display_enabled(LC)) - return; - - [self setEnabled:FALSE]; - [waitView startAnimating]; - - LinphoneCall *call = linphone_core_get_current_call(LC); - if (call) { - CallAppData *data = [CallManager getAppDataWithCall:call]; - data.videoRequested = TRUE;/* will be used later to notify user if video was not activated because of the linphone core*/ - [CallManager setAppDataWithCall:call appData:data]; - LinphoneCallParams *call_params = linphone_core_create_call_params(LC,call); - linphone_call_params_enable_video(call_params, TRUE); - linphone_call_update(call, call_params); - linphone_call_params_unref(call_params); - } else if (self.inAudioConf) { - LinphoneConferenceParams *cp = linphone_core_create_conference_params(LC); - linphone_conference_params_set_video_enabled(cp, true); - linphone_conference_update_params(linphone_core_get_conference(LC), cp); - } else { - LOGW(@"Cannot toggle video button, because no current call"); - } -} - -- (void)onOff { - - if (!linphone_core_video_display_enabled(LC)) - return; - [CallManager.instance changeRouteToDefault]; - //[CallManager.instance enableSpeakerWithEnable:FALSE]; - [self setEnabled:FALSE]; - [waitView startAnimating]; - - LinphoneCall *call = linphone_core_get_current_call(LC); - if (call) { - LinphoneCallParams *call_params = linphone_core_create_call_params(LC,call); - linphone_call_params_enable_video(call_params, FALSE); - linphone_core_update_call(LC, call, call_params); - linphone_call_params_unref(call_params); - } else if (self.inVideoConf) { - LinphoneConferenceParams *cp = linphone_core_create_conference_params(LC); - linphone_conference_params_set_video_enabled(cp, false); - linphone_conference_update_params(linphone_core_get_conference(LC), cp); - } else { - LOGW(@"Cannot toggle video button, because no current call or no video conference"); - } -} - -- (bool)onUpdate { - bool video_enabled = false; - LinphoneCall *currentCall = linphone_core_get_current_call(LC); - if (linphone_core_video_supported(LC)) { - if (self.inAudioConf || self.inVideoConf || (linphone_core_video_display_enabled(LC) && currentCall && !linphone_core_sound_resources_locked(LC) && - linphone_call_get_state(currentCall) == LinphoneCallStreamsRunning)){ - video_enabled = TRUE; - } - } - - [self setEnabled:video_enabled]; - if (last_update_state != video_enabled) - [waitView stopAnimating]; - if (video_enabled) { - video_enabled = self.inVideoConf || (currentCall && linphone_call_params_video_enabled(linphone_call_get_current_params(currentCall))); - } - last_update_state = video_enabled; - - return video_enabled; -} - --(BOOL) inVideoConf { - return (linphone_core_is_in_conference(LC) && linphone_core_get_conference(LC) != nil && linphone_conference_params_is_video_enabled(linphone_conference_get_current_params(linphone_core_get_conference(LC)))); -} - --(BOOL) inAudioConf { - return (linphone_core_is_in_conference(LC) && linphone_core_get_conference(LC) != nil && !linphone_conference_params_is_video_enabled(linphone_conference_get_current_params(linphone_core_get_conference(LC)))); -} - -@end diff --git a/Classes/LinphoneUI/fr.lproj/UICallConferenceCell.strings b/Classes/LinphoneUI/fr.lproj/UICallConferenceCell.strings deleted file mode 100644 index 629130fa2f4bef7ed1dd7f31ccd7021294738c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1516 zcmd6nTT8=05QWckenrS*p%*O%RD7`MON!WnTEVwiqeg5Bnri#!)h|tN2@5fmf-F1i z?#%4WIWxQ8UzVDx$(E;A1$t-LI%7Jzk*^ER?iHeQbjoR<5hGmKMQ9>4krK_fELZ-X zCW_IeJ_)`tt1-UWO?|vy*rhsO-E~w~ZOv5Ybcno`OCFg=jZ7`pCX2?eGIQ2ZF3D}o z?m<)JD3@s(&0~B7fimN+$BoY*wm~-88|GEi4X%9LU6Aa*!aY5~cwKioM*6VU zEmYWK@!u-kQcEYyL*#*uO1j#FDBsm4iw4|eeYL5uDQ;P}`t*7L>mhF{LVhl@{Y$L_ zeQ;;`y5CB$4|wMum7ePg8Npe*P;Zk()q0QjZI0c=e98_WK< ZSbaUhg{xa+2Yau;h{>WVBl&DB{Q!cL;>rL3 diff --git a/Classes/LinphoneUI/fr.lproj/UICallPausedCell.strings b/Classes/LinphoneUI/fr.lproj/UICallPausedCell.strings deleted file mode 100644 index 4d0eb9bb9d443da3b755a99c76518e81673dc30a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmd6nK}*9x6oluTU$OL9NUe$piU+L+Q>6-058m1uYNTmVx2^i))i0?@NLh>#g|cMX z>`vaBop~=G@1C~Qlu<_$4fM<~I^t=luRtf7%Q9w~vUAA(KqE$&A|nkI@m&PsRTrEM zIho`UuGpD_48Oj;;;%0n| z?(o3iP2zRNIdP#%slxaA6|%0-6h3ify^OUBLm%8VbF6*TD%Xn(QCFQFO2jDgSGrjE zzQ8-{uP*WL(b~`nvwypDmbK^uSKiI@*zz}saQB?v_o>rJk82*g5S!+4oBloE*i_@% diff --git a/Classes/LinphoneUI/hu.lproj/UICallConferenceCell.strings b/Classes/LinphoneUI/hu.lproj/UICallConferenceCell.strings deleted file mode 100644 index c90ef96acea03e384a0026cc551a82960b04c1e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1570 zcmd6n%}&Bl5QWdWPtmX>K~W-!8aI@MMG{E-OWYMxwf+=Ci-K><(uJ>}ezye#Qd6rT zF-<48_s(?AIdf+|-YspaEL)E5&fS=qwOEDZ zj}iroa$0|_Te=2mMHkw|y6D$jsdbjef2(y>RqgR^W4E+3W$@ko&SJEDzq33x&?dcM zU$xH4n^$9(4)jpnr@I2|^Azo0YVC33Ob2-ylhoLS#71>Ssq2}-PS9; zZDxzXdNOYkhU(}Fo$5Nr fHt=^=)XMTGs@9?2l8IsFepaPtmX>DWb-hXxxYk3Peo|F5DH;V3j|ifbzC1UHA&>*B?O0AZ^^3 z$u#ZEnYrhldv3ozEgh&RTNQQXY0R*7!7QjLSC^V7WDL}2<(zd-ZH6Bs1GN-zE&%bS z274`bx~m&*S($+J)3Z11Kk?ND@9JuWb2SI&=z(1ae3cuMXhqmryqgfEOk4`9C{=xE zszsb($k`DrqAxFwWfA8$C0zADc3^)GJ72SuVIDmyv5ryfNP$SpDKp`c9Ua5m0e8oU}Qzu%~Gm#5y9JqkPfcNOOygB`)Q?k`M1G3n>5zj-Nq#5k0wJD>`TAL6hyp=d?U29WZOW&iy^)&zh diff --git a/Classes/Log.h b/Classes/Log.h index c2ee3d897..c838afa12 100644 --- a/Classes/Log.h +++ b/Classes/Log.h @@ -32,6 +32,11 @@ + (void)log:(OrtpLogLevel)severity file:(const char *)file line:(int)line format:(NSString *)format, ...; + (void)enableLogs:(OrtpLogLevel)level; + (void)directLog:(OrtpLogLevel)level text:(NSString *)text; ++ (void)d:(NSString *)text; ++ (void)i:(NSString *)text; ++ (void)w:(NSString *)text; ++ (void)e:(NSString *)text; ++ (void)f:(NSString *)text; void linphone_iphone_log_handler(const char *domain, OrtpLogLevel lev, const char *fmt, va_list args); @end diff --git a/Classes/PhoneMainView.h b/Classes/PhoneMainView.h index adfe87b5a..672030668 100644 --- a/Classes/PhoneMainView.h +++ b/Classes/PhoneMainView.h @@ -27,10 +27,6 @@ #import "AboutView.h" #import "AssistantLinkView.h" #import "AssistantView.h" -#import "CallIncomingView.h" -#import "CallOutgoingView.h" -#import "CallSideMenuView.h" -#import "CallView.h" #import "ChatConversationCreateView.h" #import "ChatConversationInfoView.h" #import "ChatConversationImdnView.h" @@ -78,7 +74,7 @@ @end -@interface PhoneMainView : UIViewController { +@interface PhoneMainView : UIViewController { @private NSMutableArray *inhibitedEvents; } @@ -96,6 +92,7 @@ - (void)changeCurrentView:(UICompositeViewDescription *)view; - (UIViewController*)popCurrentView; +- (UIViewController *)popView:(UICompositeViewDescription *)view; - (UIViewController *)popToView:(UICompositeViewDescription *)currentView; - (void) setPreviousViewName:(NSString*)previous; - (NSString*) getPreviousViewName; diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m index 3d0ad4962..a45b51376 100644 --- a/Classes/PhoneMainView.m +++ b/Classes/PhoneMainView.m @@ -22,6 +22,8 @@ #import "LinphoneAppDelegate.h" #import "Log.h" #import "PhoneMainView.h" +#import "linphoneapp-Swift.h" + static RootViewManager *rootViewManagerInstance = nil; @@ -373,7 +375,9 @@ static RootViewManager *rootViewManagerInstance = nil; break; } case LinphoneCallOutgoingInit: { - [self changeCurrentView:CallOutgoingView.compositeViewDescription]; + OutgoingCallView *v = VIEW(OutgoingCallView); + [self changeCurrentView:OutgoingCallView.compositeViewDescription]; + [v setCallWithCall:call]; break; } case LinphoneCallPausedByRemote: @@ -381,39 +385,12 @@ static RootViewManager *rootViewManagerInstance = nil; if (![LinphoneManager.instance isCTCallCenterExist]) { /*only register CT call center CB for connected call*/ [LinphoneManager.instance setupGSMInteraction]; - [[UIDevice currentDevice] setProximityMonitoringEnabled:!([CallManager.instance isSpeakerEnabled] || [CallManager.instance isBluetoothEnabled])]; - } - break; - } - case LinphoneCallStreamsRunning: { - [self changeCurrentView:CallView.compositeViewDescription]; - break; - } - case LinphoneCallUpdatedByRemote: { - const LinphoneCallParams *current = linphone_call_get_current_params(call); - const LinphoneCallParams *remote = linphone_call_get_remote_params(call); - - if (linphone_call_params_video_enabled(current) && !linphone_call_params_video_enabled(remote)) { - [self changeCurrentView:CallView.compositeViewDescription]; } break; } case LinphoneCallError: { [self displayCallError:call message:message]; } - case LinphoneCallEnd: { - const MSList *calls = linphone_core_get_calls(LC); - if (!calls || calls->data == call) { - while ((currentView == CallView.compositeViewDescription) || - (currentView == CallIncomingView.compositeViewDescription) || - (currentView == CallOutgoingView.compositeViewDescription)) { - [self popCurrentView]; - } - } else { - [self changeCurrentView:CallView.compositeViewDescription]; - } - break; - } case LinphoneCallEarlyUpdatedByRemote: case LinphoneCallEarlyUpdating: case LinphoneCallIdle: @@ -633,6 +610,15 @@ static RootViewManager *rootViewManagerInstance = nil; return [mainViewController getCurrentViewController]; } +- (UIViewController *)popView:(UICompositeViewDescription *)view { + NSMutableArray *viewStack = [RootViewManager instance].viewDescriptionStack; + while (viewStack.count > 0 && [[viewStack lastObject] equal:view]) { + [viewStack removeLastObject]; + } + return [self popToView:viewStack.lastObject ?: DialerView.compositeViewDescription]; +} + + - (void)changeCurrentView:(UICompositeViewDescription *)view { [self _changeCurrentView:view transition:nil animated:ANIMATED]; } @@ -764,10 +750,10 @@ static RootViewManager *rootViewManagerInstance = nil; [CallManager.instance acceptCallWithCall:call hasVideo:YES]; } else { AudioServicesPlaySystemSound(lm.sounds.vibrate); - CallIncomingView *view = VIEW(CallIncomingView); + IncomingCallView *view = VIEW(IncomingCallView); [self changeCurrentView:view.compositeViewDescription]; - [view setCall:call]; - [view setDelegate:self]; + [view setCallWithCall:call]; + //CDFIX [view setDelegate:self]; } } } diff --git a/Classes/ProviderDelegate.swift b/Classes/ProviderDelegate.swift index 54113dafd..a6f324058 100644 --- a/Classes/ProviderDelegate.swift +++ b/Classes/ProviderDelegate.swift @@ -92,7 +92,7 @@ class ProviderDelegate: NSObject { provider.reportNewIncomingCall(with: uuid, update: update) { error in if error == nil { if CallManager.instance().endCallkit { - let call = CallManager.instance().lc?.getCallByCallid(callId: callId!) + let call = CallManager.instance().core?.getCallByCallid(callId: callId!) if (call?.state == .PushIncomingReceived) { try? call?.terminate() } @@ -184,7 +184,7 @@ extension ProviderDelegate: CXProviderDelegate { CallManager.instance().backgroundContextCameraIsEnabled = call!.params?.videoEnabled ?? false call?.cameraEnabled = false // Disable camera while app is not on foreground } - CallManager.instance().lc?.configureAudioSession() + CallManager.instance().core?.configureAudioSession() CallManager.instance().acceptCall(call: call!, hasVideo: call!.params?.videoEnabled ?? false) action.fulfill() } @@ -199,8 +199,8 @@ extension ProviderDelegate: CXProviderDelegate { } do { - if (CallManager.instance().lc?.isInConference ?? false && action.isOnHold) { - try CallManager.instance().lc?.leaveConference() + if (CallManager.instance().core?.isInConference ?? false && action.isOnHold) { + try CallManager.instance().core?.leaveConference() Log.directLog(BCTBX_LOG_DEBUG, text: "CallKit: call-id: [\(String(describing: callId))] leaving conference") NotificationCenter.default.post(name: Notification.Name("LinphoneCallUpdate"), object: self) return @@ -212,11 +212,10 @@ extension ProviderDelegate: CXProviderDelegate { if (call!.params?.localConferenceMode ?? false) { return } - CallManager.instance().speakerBeforePause = CallManager.instance().isSpeakerEnabled() try call!.pause() } else { - if (CallManager.instance().lc?.conference != nil && CallManager.instance().lc?.callsNb ?? 0 > 1) { - try CallManager.instance().lc?.enterConference() + if (CallManager.instance().core?.conference != nil && CallManager.instance().core?.callsNb ?? 0 > 1) { + try CallManager.instance().core?.enterConference() NotificationCenter.default.post(name: Notification.Name("LinphoneCallUpdate"), object: self) } else { try call!.resume() @@ -245,7 +244,7 @@ extension ProviderDelegate: CXProviderDelegate { action.fail() } - CallManager.instance().lc?.configureAudioSession() + CallManager.instance().core?.configureAudioSession() try CallManager.instance().doCall(addr: addr!, isSas: callInfo?.sasEnabled ?? false) } catch { Log.directLog(BCTBX_LOG_ERROR, text: "CallKit: Call started failed because \(error)") @@ -256,7 +255,7 @@ extension ProviderDelegate: CXProviderDelegate { func provider(_ provider: CXProvider, perform action: CXSetGroupCallAction) { Log.directLog(BCTBX_LOG_MESSAGE, text: "CallKit: Call grouped callUUid : \(action.callUUID) with callUUID: \(String(describing: action.callUUIDToGroupWith)).") - CallManager.instance().addAllToConference() + CallManager.instance().addAllToLocalConference() action.fulfill() } @@ -264,7 +263,7 @@ extension ProviderDelegate: CXProviderDelegate { let uuid = action.callUUID let callId = callInfos[uuid]?.callId Log.directLog(BCTBX_LOG_MESSAGE, text: "CallKit: Call muted with call-id: \(String(describing: callId)) an UUID: \(uuid.description).") - CallManager.instance().lc!.micEnabled = !CallManager.instance().lc!.micEnabled + CallManager.instance().core!.micEnabled = !CallManager.instance().core!.micEnabled action.fulfill() } @@ -297,12 +296,12 @@ extension ProviderDelegate: CXProviderDelegate { func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) { Log.directLog(BCTBX_LOG_MESSAGE, text: "CallKit: audio session activated.") - CallManager.instance().lc?.activateAudioSession(actived: true) + CallManager.instance().core?.activateAudioSession(actived: true) } func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) { Log.directLog(BCTBX_LOG_MESSAGE, text: "CallKit: audio session deactivated.") - CallManager.instance().lc?.activateAudioSession(actived: false) + CallManager.instance().core?.activateAudioSession(actived: false) } } diff --git a/Classes/CallConferenceTableView.h b/Classes/SwiftUtil/Extensions/IOS/OptionalExtensions.swift similarity index 79% rename from Classes/CallConferenceTableView.h rename to Classes/SwiftUtil/Extensions/IOS/OptionalExtensions.swift index 41698c257..58f10f627 100644 --- a/Classes/CallConferenceTableView.h +++ b/Classes/SwiftUtil/Extensions/IOS/OptionalExtensions.swift @@ -1,7 +1,7 @@ /* * Copyright (c) 2010-2020 Belledonne Communications SARL. * - * This file is part of linphone-iphone + * This file is part of linphone-iphone * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,10 +17,16 @@ * along with this program. If not, see . */ -#import -@interface CallConferenceTableView : UITableViewController - -- (void)update; - -@end +extension Optional { + var logable: Any { + switch self { + case .none: + return "|⭕️" + case let .some(value): + return value + } + } + + +} diff --git a/Classes/SwiftUtil/Extensions/IOS/UIApplication+Extension.swift b/Classes/SwiftUtil/Extensions/IOS/UIApplication+Extension.swift new file mode 100644 index 000000000..50f5e9353 --- /dev/null +++ b/Classes/SwiftUtil/Extensions/IOS/UIApplication+Extension.swift @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2010-2020 Belledonne Communications SARL. +* +* This file is part of linhome +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + + + +import Foundation +import UIKit + + +extension UIApplication { + + class func getTopMostViewController() -> UIViewController? { + let keyWindow = UIApplication.shared.windows.filter {$0.isKeyWindow}.first + if var topController = keyWindow?.rootViewController { + while let presentedViewController = topController.presentedViewController { + topController = presentedViewController + } + return topController + } else { + return nil + } + } +} diff --git a/Classes/SwiftUtil/Extensions/IOS/UIColorExtensions.swift b/Classes/SwiftUtil/Extensions/IOS/UIColorExtensions.swift new file mode 100644 index 000000000..2d4b8efc9 --- /dev/null +++ b/Classes/SwiftUtil/Extensions/IOS/UIColorExtensions.swift @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation + +extension UIColor { + public convenience init(hex: String) { + let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) + var int = UInt64() + Scanner(string: hex).scanHexInt64(&int) + let a, r, g, b: UInt64 + switch hex.count { + case 3: // RGB (12-bit) + (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17) + case 6: // RGB (24-bit) + (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF) + case 8: // ARGB (32-bit) + (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF) + default: + (a, r, g, b) = (255, 0, 0, 0) + } + self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255) + } +} diff --git a/Classes/SwiftUtil/Extensions/IOS/UIDeviceExtensions.swift b/Classes/SwiftUtil/Extensions/IOS/UIDeviceExtensions.swift new file mode 100644 index 000000000..fa00d6236 --- /dev/null +++ b/Classes/SwiftUtil/Extensions/IOS/UIDeviceExtensions.swift @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2010-2020 Belledonne Communications SARL. +* +* This file is part of linhome +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + + + +import Foundation +import UIKit +import AVFoundation + +extension UIDevice { + static func ipad() -> Bool { + return UIDevice.current.userInterfaceIdiom == .pad + } + static func vibrate() { + if (!ipad()) { + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) + } + } + static func is5SorSEGen1() -> Bool { + return UIScreen.main.nativeBounds.height == 1136 + } + + static func hasNotch() -> Bool { + if (UserDefaults.standard.bool(forKey: "hasNotch")) { + return true + } + guard #available(iOS 11.0, *), let topPadding = UIApplication.shared.keyWindow?.safeAreaInsets.top, topPadding > 24 else { + return false + } + UserDefaults.standard.setValue(true, forKey: "hasNotch") + return true + } + + static func notchHeight() -> CGFloat { + guard #available(iOS 11.0, *), let topPadding = UIApplication.shared.keyWindow?.safeAreaInsets.top else { + return 0 + } + return topPadding + } + +} diff --git a/Classes/SwiftUtil/Extensions/IOS/UIImageExtensions.swift b/Classes/SwiftUtil/Extensions/IOS/UIImageExtensions.swift new file mode 100644 index 000000000..a409d782a --- /dev/null +++ b/Classes/SwiftUtil/Extensions/IOS/UIImageExtensions.swift @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation + +extension UIImage { + func tinted(with color: UIColor?) -> UIImage? { + if (color == nil) { + return self + } + defer { UIGraphicsEndImageContext() } + UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) + color!.set() + self.withRenderingMode(.alwaysTemplate).draw(in: CGRect(origin: .zero, size: self.size)) + return UIGraphicsGetImageFromCurrentImageContext() + } + + func withInsets(insets: UIEdgeInsets) -> UIImage? { + UIGraphicsBeginImageContextWithOptions( + CGSize(width: self.size.width + insets.left + insets.right, + height: self.size.height + insets.top + insets.bottom), false, self.scale) + let _ = UIGraphicsGetCurrentContext() + let origin = CGPoint(x: insets.left, y: insets.top) + self.draw(at: origin) + let imageWithInsets = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return imageWithInsets + } + + func withPadding(padding: CGFloat) -> UIImage? { + let insets = UIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding) + return withInsets(insets: insets) + } +} diff --git a/Classes/CallPausedTableView.h b/Classes/SwiftUtil/Extensions/IOS/UIImageViewExtensions.swift similarity index 78% rename from Classes/CallPausedTableView.h rename to Classes/SwiftUtil/Extensions/IOS/UIImageViewExtensions.swift index 622f19084..9f926344a 100644 --- a/Classes/CallPausedTableView.h +++ b/Classes/SwiftUtil/Extensions/IOS/UIImageViewExtensions.swift @@ -1,7 +1,7 @@ /* * Copyright (c) 2010-2020 Belledonne Communications SARL. * - * This file is part of linphone-iphone + * This file is part of linphone-iphone * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,10 +17,11 @@ * along with this program. If not, see . */ -#import +import Foundation -@interface CallPausedTableView : UITableViewController - -- (void)update; - -@end +extension UIImageView { + func tint(_ color:UIColor) { + self.image = self.image?.withRenderingMode(.alwaysTemplate) + tintColor = color + } +} diff --git a/Classes/LinphoneUI/UIVideoButton.h b/Classes/SwiftUtil/Extensions/IOS/UIVIewControllerExtensions.swift similarity index 72% rename from Classes/LinphoneUI/UIVideoButton.h rename to Classes/SwiftUtil/Extensions/IOS/UIVIewControllerExtensions.swift index 79def1378..8c27c7dec 100644 --- a/Classes/LinphoneUI/UIVideoButton.h +++ b/Classes/SwiftUtil/Extensions/IOS/UIVIewControllerExtensions.swift @@ -1,7 +1,7 @@ /* * Copyright (c) 2010-2020 Belledonne Communications SARL. * - * This file is part of linphone-iphone + * This file is part of linphone-iphone * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,13 +17,13 @@ * along with this program. If not, see . */ -#import +import Foundation +import SnapKit +import UIKit -#import "UIToggleButton.h" - -@interface UIVideoButton : UIToggleButton { +extension UIViewController { + func VIEW( _ desc: UICompositeViewDescription) -> T{ + return PhoneMainView.instance().mainViewController.getCachedController(desc.name) as! T + } + } - -@property(nonatomic, strong) IBOutlet UIActivityIndicatorView *waitView; - -@end diff --git a/Classes/SwiftUtil/Extensions/IOS/UIVIewExtensions.swift b/Classes/SwiftUtil/Extensions/IOS/UIVIewExtensions.swift new file mode 100644 index 000000000..7e99f532f --- /dev/null +++ b/Classes/SwiftUtil/Extensions/IOS/UIVIewExtensions.swift @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import SnapKit +import UIKit + +extension UIView { + + // Few constraints wrapper to abstract SnapKit functions + + func removeConstraints() -> UIView { + snp.removeConstraints() + return self + } + + func square(_ size:Int) -> UIView { + snp.makeConstraints { (make) in + make.width.equalTo(size) + make.height.equalTo(size) + } + return self + } + + func size(w:CGFloat,h:CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.width.equalTo(w) + make.height.equalTo(h) + } + return self + } + + func height(_ h:CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.height.equalTo(h) + } + return self + } + + func height(_ h:Int) -> UIView { + return height(CGFloat(h)) + } + + func width(_ h:CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.width.equalTo(h) + } + return self + } + + func width(_ h:Int) -> UIView { + return width(CGFloat(h)) + } + + func maxHeight(_ h:CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.height.lessThanOrEqualTo(h) + } + return self + } + + func minWidth(_ h:CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.width.greaterThanOrEqualTo(h) + } + return self + } + + + func matchParentSideBorders(insetedByDx:CGFloat = 0) -> UIView { + snp.makeConstraints { (make) in + make.left.equalToSuperview().offset(insetedByDx) + make.right.equalToSuperview().offset(-insetedByDx) + } + return self + } + + func matchParentDimmensions() -> UIView { + snp.makeConstraints { (make) in + make.left.right.top.bottom.equalToSuperview() + } + return self + } + + func matchDimentionsOf(view:UIView) -> UIView { + snp.makeConstraints { (make) in + make.left.right.top.bottom.equalTo(view) + } + return self + } + + func matchParentHeight() -> UIView { + snp.makeConstraints { (make) in + make.top.bottom.equalToSuperview() + } + return self + } + + func matchParentHeightDividedBy(_ divider : CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.height.equalToSuperview().dividedBy(divider) + } + return self + } + + func matchParentWidthDividedBy(_ divider : CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.width.equalToSuperview().dividedBy(divider) + } + return self + } + + func center() -> UIView { + snp.makeConstraints { (make) in + make.center.equalToSuperview() + } + return self + } + + func alignParentTop(withMargin:CGFloat = 0.0) -> UIView { + snp.makeConstraints { (make) in + make.top.equalToSuperview().offset(withMargin) + } + return self + } + + func alignParentTop(withMargin:Int ) -> UIView { + return alignParentTop(withMargin:CGFloat(withMargin)) + } + + + func alignUnder(view:UIView, withMargin:CGFloat = 0.0) -> UIView { + snp.makeConstraints { (make) in + make.top.equalTo(view.snp.bottom).offset(withMargin) + } + return self + } + func alignUnder(view:UIView, withMargin:Int) -> UIView { + return alignUnder(view: view,withMargin:CGFloat(withMargin)) + } + + func matchRightOf(view:UIView, withMargin:CGFloat = 0) -> UIView { + snp.makeConstraints { (make) in + make.right.equalTo(view).offset(withMargin) + } + return self + } + + func updateAlignUnder(view:UIView, withMargin:CGFloat = 0.0) -> UIView { + snp.updateConstraints { (make) in + make.top.equalTo(view.snp.bottom).offset(withMargin) + } + return self + } + + func alignParentBottom(withMargin:CGFloat = 0.0) -> UIView { + snp.makeConstraints { (make) in + make.bottom.equalToSuperview().offset(-withMargin) + } + return self + } + + func alignParentBottom(withMargin:Int) -> UIView { + return alignParentBottom(withMargin:CGFloat(withMargin)) + } + + func alignAbove(view:UIView, withMargin:CGFloat = 0.0) -> UIView { + snp.makeConstraints { (make) in + make.bottom.equalTo(view.snp.top).offset(-withMargin) + } + return self + } + + func alignAbove(view:UIView, withMargin:Int) -> UIView { + return alignAbove(view: view,withMargin:CGFloat(withMargin)) + } + + func alignBottomWith(otherView:UIView) -> UIView { + snp.makeConstraints { (make) in + make.bottom.equalTo(otherView) + } + return self + } + + func marginLeft(_ m:CGFloat) -> UIView { + snp.makeConstraints { (make) in + make.left.equalToSuperview().offset(m) + } + return self + } + + func alignParentLeft(withMargin:CGFloat = 0.0) -> UIView { + snp.makeConstraints { (make) in + make.left.equalToSuperview().offset(withMargin) + } + return self + } + + func alignParentLeft(withMargin:Int) -> UIView { + return alignParentLeft(withMargin:CGFloat(withMargin)) + } + + func alignParentRight(withMargin:Int = 0) -> UIView { + snp.makeConstraints { (make) in + make.right.equalToSuperview().offset(-withMargin) + } + return self + } + + func alignParentRight(withMargin:CGFloat) -> UIView { + return alignParentRight(withMargin:Int(withMargin)) + } + + + func toRightOf(_ view:UIView, withLeftMargin:Int = 0) -> UIView { + snp.makeConstraints { (make) in + make.left.equalTo(view.snp.right).offset(withLeftMargin) + } + return self + } + + func toRightOf(_ view:UIView, withLeftMargin:CGFloat) -> UIView { + return toRightOf(view,withLeftMargin: Int(withLeftMargin)) + } + + func toLeftOf(_ view:UIView) -> UIView { + snp.makeConstraints { (make) in + make.right.equalTo(view.snp.left) + } + return self + } + + + func centerX(withDx:Int = 0) -> UIView { + snp.makeConstraints { (make) in + make.centerX.equalToSuperview().offset(withDx) + } + return self + } + + func centerY(withDy:Int = 0) -> UIView { + snp.makeConstraints { (make) in + make.centerY.equalToSuperview().offset(withDy) + } + return self + } + + func matchCenterXOf(view:UIView, withDx:Int = 0) -> UIView { + snp.makeConstraints { (make) in + make.centerX.equalTo(view).offset(withDx) + } + return self + } + + func matchCenterYOf(view:UIView, withDy:Int = 0) -> UIView { + snp.makeConstraints { (make) in + make.centerY.equalTo(view).offset(withDy) + } + return self + } + + func wrapContentY() -> UIView { + subviews.first?.snp.makeConstraints({ make in + make.top.equalToSuperview() + }) + subviews.last?.snp.makeConstraints({ make in + make.bottom.equalToSuperview() + }) + return self + } + + func wrapContentX() -> UIView { + subviews.first?.snp.makeConstraints({ make in + make.left.equalToSuperview() + }) + subviews.last?.snp.makeConstraints({ make in + make.right.equalToSuperview() + }) + return self + } + + func done() { + // to avoid the unused variable warning + } + + // Onclick + + class TapGestureRecognizer: UITapGestureRecognizer { + var action : (()->Void)? = nil + } + + func onClick(action : @escaping ()->Void ){ + let tap = TapGestureRecognizer(target: self , action: #selector(self.handleTap(_:))) + tap.action = action + tap.numberOfTapsRequired = 1 + tap.cancelsTouchesInView = false + + self.addGestureRecognizer(tap) + self.isUserInteractionEnabled = true + + } + @objc func handleTap(_ sender: TapGestureRecognizer) { + sender.action!() + } + + func VIEW( _ desc: UICompositeViewDescription) -> T{ + return PhoneMainView.instance().mainViewController.getCachedController(desc.name) as! T + } + +} diff --git a/Classes/SwiftUtil/Extensions/LinphoneCore/AddressExtensions.swift b/Classes/SwiftUtil/Extensions/LinphoneCore/AddressExtensions.swift new file mode 100644 index 000000000..39bd741f8 --- /dev/null +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/AddressExtensions.swift @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +extension Address { + + func initials() -> String? { + var initials = initials(displayName: addressBookEnhancedDisplayName()) + if (initials == nil || initials!.isEmpty) { + initials = String(username.prefix(1)) + } + return initials + } + + private func initials(displayName: String?) -> String? { // Basic ImproveMe + return displayName?.components(separatedBy: " ") + .reduce("") { + ($0.isEmpty ? "" : "\($0.first?.uppercased() ?? "")") + + ($1.isEmpty ? "" : "\($1.first?.uppercased() ?? "")") + } + } + + func addressBookEnhancedDisplayName() -> String? { + if let contact = FastAddressBook.getContactWith(getCobject) { + return contact.displayName + } else if (!displayName.isEmpty) { + return displayName + } else { + return username + } + } + + func contact() -> Contact? { + return FastAddressBook.getContactWith(getCobject) + } + +} diff --git a/Classes/SwiftUtil/Extensions/LinphoneCore/CallExtensions.swift b/Classes/SwiftUtil/Extensions/LinphoneCore/CallExtensions.swift new file mode 100644 index 000000000..197f48fbc --- /dev/null +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/CallExtensions.swift @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +extension Call { + func answerVideoUpdateRequest(accept:Bool) { + guard let params = try?core? .createCallParams(call: self) else { + Log.i("[Call] \(self) unable to answerVideoUpdateRequest : could not create params ") + return + } + if (accept) { + params.videoEnabled = true + core?.videoCaptureEnabled = true + core?.videoDisplayEnabled = true + } else { + params.videoEnabled = false + } + try?acceptUpdate(params: params) + } +} + +extension Call : CustomStringConvertible { + public var description: String { + if let callId = callLog?.callId { + return "" + } + return "" + } +} + diff --git a/Classes/SwiftUtil/Extensions/LinphoneCore/ConferenceExtensions.swift b/Classes/SwiftUtil/Extensions/LinphoneCore/ConferenceExtensions.swift new file mode 100644 index 000000000..483f3bc16 --- /dev/null +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/ConferenceExtensions.swift @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + + + +extension Conference : CustomStringConvertible { + public var description: String { + if let username = conferenceAddress?.username { + return "<\(username)>" + } + return "" + } +} + diff --git a/Classes/SwiftUtil/Extensions/LinphoneCore/CoreExtensions.swift b/Classes/SwiftUtil/Extensions/LinphoneCore/CoreExtensions.swift new file mode 100644 index 000000000..ee0c99edb --- /dev/null +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/CoreExtensions.swift @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +extension Core { + static func get() -> Core { + return CallManager.instance().core! + } + + func showSwitchCameraButton() -> Bool { + return videoDevicesList.count > 2 // Count StaticImage camera + } + + func toggleCamera() { + Log.i("[Core] Current camera device is \(videoDevice)") + + videoDevicesList.forEach { + if ($0 != videoDevice && $0 != "StaticImage: Static picture") { + Log.i("[Core] New camera device will be \($0)") + try?setVideodevice(newValue: $0) + return + } + } + + let inConference = conference != nil && conference!.isIn + if !inConference, let call = currentCall { + try?call.update(params: nil) + } + } +} diff --git a/Classes/SwiftUtil/Extensions/LinphoneCore/IceState.swift b/Classes/SwiftUtil/Extensions/LinphoneCore/IceState.swift new file mode 100644 index 000000000..7274e2f7e --- /dev/null +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/IceState.swift @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +extension IceState { + func toString()->String { + switch (self) { + case .NotActivated: return NSLocalizedString("Not activated", tableName:"ICE has not been activated for this call",comment : "") + case .Failed: return NSLocalizedString("Failed", tableName:"ICE processing has failed",comment :"") + case .InProgress: return NSLocalizedString("In progress", tableName:"ICE process is in progress",comment :"") + case .HostConnection: return NSLocalizedString("Direct connection", tableName:"ICE has established a direct connection to the remote host",comment :"") + case .ReflexiveConnection: return NSLocalizedString( "NAT(s) connection", tableName:"ICE has established a connection to the remote host through one or several NATs",comment :"") + case .RelayConnection: return NSLocalizedString("Relay connection", tableName:"ICE has established a connection through a relay",comment :"") + } + + } +} diff --git a/Classes/SwiftUtil/Extensions/LinphoneCore/ParticipantExtensions.swift b/Classes/SwiftUtil/Extensions/LinphoneCore/ParticipantExtensions.swift new file mode 100644 index 000000000..9b7b07652 --- /dev/null +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/ParticipantExtensions.swift @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + + + +extension Participant : CustomStringConvertible { + public var description: String { + if let address = address?.asStringUriOnly() { + return "" + } + return "" + } +} + diff --git a/Classes/LinphoneUI/UISpeakerButton.h b/Classes/SwiftUtil/Extensions/LinphoneCore/PayloadType.swift similarity index 85% rename from Classes/LinphoneUI/UISpeakerButton.h rename to Classes/SwiftUtil/Extensions/LinphoneCore/PayloadType.swift index 34361634e..197a8d733 100644 --- a/Classes/LinphoneUI/UISpeakerButton.h +++ b/Classes/SwiftUtil/Extensions/LinphoneCore/PayloadType.swift @@ -17,12 +17,11 @@ * along with this program. If not, see . */ -#import - -#import "UIToggleButton.h" - -@interface UISpeakerButton : UIToggleButton { +import Foundation +import linphonesw +import linphone +extension linphonesw.PayloadType { + + } - -@end diff --git a/Classes/SwiftUtil/ViewModel/MutableLiveData.swift b/Classes/SwiftUtil/ViewModel/MutableLiveData.swift new file mode 100644 index 000000000..125939785 --- /dev/null +++ b/Classes/SwiftUtil/ViewModel/MutableLiveData.swift @@ -0,0 +1,138 @@ +/* +* Copyright (c) 2010-2020 Belledonne Communications SARL. +* +* This file is part of linhome +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + + +import Foundation + + +class MutableLiveDataOnChangeClosure: NSObject { + let value: (Type?) -> Void + let onlyOnce: Bool + init(_ function: @escaping (Type?) -> Void, onlyOnce:Bool = false) { + value = function + self.onlyOnce = onlyOnce + } +} + +class MutableLiveData { + + private var _value : T? = nil + private var observers = [MutableLiveDataOnChangeClosure] () + private var _opposite : MutableLiveData? = nil + + init(_ initial:T) { + self.value = initial + } + + init() { + } + + var value : T? { + get { + return self._value + } + set { + self._value = newValue + self.notifyAllObservers(with: newValue) + } + } + + + func addObserver(observer: MutableLiveDataOnChangeClosure, andNotifyOnce: Bool = false) { + observers.append(observer) + if (andNotifyOnce) { + notifyValue() + } + } + + func removeObserver(observer: MutableLiveDataOnChangeClosure) { + observers = observers.filter({$0 !== observer}) + } + + + func clearObservers() { + observers.forEach { + removeObserver(observer: $0) + } + } + + + func notifyAllObservers(with newValue: T?) { + for observer in observers { + observer.value(newValue) + if (observer.onlyOnce) { + removeObserver(observer: observer) + } + } + } + + func notifyValue() { + for observer in observers { + observer.value(value) + if (observer.onlyOnce) { + removeObserver(observer: observer) + } + } + } + + func observe(onChange : @escaping (T?)->Void) { + let observer = MutableLiveDataOnChangeClosure({ value in + onChange(value) + }, onlyOnce: false) + addObserver(observer: observer) + } + + func readCurrentAndObserve(onChange : @escaping (T?)->Void) { + let observer = MutableLiveDataOnChangeClosure({ value in + onChange(value) + }, onlyOnce: false) + addObserver(observer: observer) + observer.value(value) + } + + func observeAsUniqueObserver (onChange : @escaping (T?)->Void, unique: Bool = false) { + let observer = MutableLiveDataOnChangeClosure({ value in + onChange(value) + }, onlyOnce: false) + if (unique) { + clearObservers() + } + addObserver(observer: observer) + } + + func observeOnce(onChange : @escaping (T?)->Void) { + let observer = MutableLiveDataOnChangeClosure({ value in + onChange(value) + }, onlyOnce: true) + addObserver(observer: observer) + } + + func opposite() -> MutableLiveData? { + if (_opposite != nil) { + return _opposite + } + _opposite = MutableLiveData(!(value! as! Bool)) + observe { (value) in + self._opposite!.value = !(value! as! Bool) + } + return _opposite + } + + +} diff --git a/Classes/Utils/AudioHelper.h b/Classes/Utils/AudioHelper.h deleted file mode 100644 index fdf2845b1..000000000 --- a/Classes/Utils/AudioHelper.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-iphone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef AudioHelper_h -#define AudioHelper_h - -#import - -@import AVFoundation; - -@interface AudioHelper : NSObject - -+ (NSArray *)bluetoothRoutes; -+ (AVAudioSessionPortDescription *)bluetoothAudioDevice; -+ (AVAudioSessionPortDescription *)builtinAudioDevice; -+ (AVAudioSessionPortDescription *)speakerAudioDevice; -+ (AVAudioSessionPortDescription *)audioDeviceFromTypes:(NSArray *)types; -@end - -#endif /* AudioHelper_h */ diff --git a/Classes/Utils/FileTransferDelegate.m b/Classes/Utils/FileTransferDelegate.m index 0738c54b4..413c6c0b5 100644 --- a/Classes/Utils/FileTransferDelegate.m +++ b/Classes/Utils/FileTransferDelegate.m @@ -21,6 +21,8 @@ #import "LinphoneManager.h" #import "PhoneMainView.h" #import "Utils.h" +#import "linphoneapp-Swift.h" + @interface FileTransferDelegate () @property(strong) NSMutableData *data; diff --git a/Classes/Utils/Log.m b/Classes/Utils/Log.m index c7fe474c8..9c0b29c96 100644 --- a/Classes/Utils/Log.m +++ b/Classes/Utils/Log.m @@ -67,6 +67,24 @@ bctbx_log(BCTBX_LOG_DOMAIN, level, "%s", [text cStringUsingEncoding:NSUTF8StringEncoding]); } + ++(void)d:(NSString *)text { + [Log directLog:BCTBX_LOG_DEBUG text:text]; +} ++(void)i:(NSString *)text { + [Log directLog:BCTBX_LOG_MESSAGE text:text]; +} ++(void)w:(NSString *)text { + [Log directLog:BCTBX_LOG_WARNING text:text]; +} ++(void)e:(NSString *)text { + [Log directLog:BCTBX_LOG_ERROR text:text]; +} ++(void)f:(NSString *)text { + [Log directLog:BCTBX_LOG_FATAL text:text]; +} + + #pragma mark - Logs Functions callbacks void linphone_iphone_log_handler(const char *domain, OrtpLogLevel lev, const char *fmt, va_list args) { diff --git a/Classes/Voip/AudioRouteUtils.swift b/Classes/Voip/AudioRouteUtils.swift new file mode 100644 index 000000000..94a26f71e --- /dev/null +++ b/Classes/Voip/AudioRouteUtils.swift @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2010-2021 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import AVFoundation +import linphonesw + +@objc class AudioRouteUtils : NSObject { + + static let core = Core.get() + + static private func applyAudioRouteChange( call: Call?, types: [AudioDeviceType], output: Bool = true) { + let typesNames = types.map { String(describing: $0) }.joined(separator: "/") + + let currentCall = core.callsNb > 0 ? (call != nil) ? call : core.currentCall != nil ? core.currentCall : core.calls[0] : nil + if (currentCall == nil) { + Log.w("[Audio Route Helper] No call found, setting audio route on Core") + } + let conference = core.conference + let capability = output ? AudioDeviceCapabilities.CapabilityPlay : AudioDeviceCapabilities.CapabilityRecord + + var found = false + + core.audioDevices.forEach { (audioDevice) in + Log.i("[Audio Route Helper] cdes [\(audioDevice.deviceName)] [\(audioDevice.type)] [\(audioDevice.capabilities)] ") + } + + core.audioDevices.forEach { (audioDevice) in + if (!found && types.contains(audioDevice.type) && audioDevice.hasCapability(capability: capability)) { + if (conference != nil && conference?.isIn == true) { + Log.i("[Audio Route Helper] Found [\(audioDevice.type)] \(output ? "playback" : "recorder") audio device [\(audioDevice.deviceName)], routing conference audio to it") + if (output) { + conference?.outputAudioDevice = audioDevice + } else { + conference?.inputAudioDevice = audioDevice + } + } else if (currentCall != nil) { + Log.i("[Audio Route Helper] Found [\(audioDevice.type)] \(output ? "playback" : "recorder") audio device [\(audioDevice.deviceName)], routing call audio to it") + if (output) { + currentCall?.outputAudioDevice = audioDevice + } + else { + currentCall?.inputAudioDevice = audioDevice + } + } else { + Log.i("[Audio Route Helper] Found [\(audioDevice.type)] \(output ? "playback" : "recorder") audio device [\(audioDevice.deviceName)], changing core default audio device") + if (output) { + core.outputAudioDevice = audioDevice + } else { + core.inputAudioDevice = audioDevice + } + } + found = true + } + } + if (!found) { + Log.e("[Audio Route Helper] Couldn't find \(typesNames) audio device") + } + } + + static private func changeCaptureDeviceToMatchAudioRoute(call: Call?, types: [AudioDeviceType]) { + switch (types.first) { + case .Bluetooth :if (isBluetoothAudioRecorderAvailable()) { + Log.i("[Audio Route Helper] Bluetooth device is able to record audio, also change input audio device") + applyAudioRouteChange(call: call, types: [AudioDeviceType.Bluetooth], output: false) + } + case .Headset, .Headphones : if (isHeadsetAudioRecorderAvailable()) { + Log.i("[Audio Route Helper] Headphones/headset device is able to record audio, also change input audio device") + applyAudioRouteChange(call:call,types: [AudioDeviceType.Headphones, AudioDeviceType.Headset], output:false) + } + default: break + } + } + + static private func routeAudioTo( call: Call?, types: [AudioDeviceType]) { + let currentCall = call != nil ? call : core.currentCall != nil ? core.currentCall : core.calls[0] + if (call != nil || currentCall != nil) { + let callToUse = call != nil ? call : currentCall + applyAudioRouteChange(call: callToUse, types: types) + changeCaptureDeviceToMatchAudioRoute(call: callToUse, types: types) + } else { + applyAudioRouteChange(call: call, types: types) + changeCaptureDeviceToMatchAudioRoute(call: call, types: types) + } + } + + static func routeAudioToEarpiece(call: Call? = nil) { + routeAudioTo(call: call, types: [AudioDeviceType.Microphone]) // on iOS Earpiece = Microphone + } + + static func routeAudioToSpeaker(call: Call? = nil) { + routeAudioTo(call: call, types: [AudioDeviceType.Speaker]) + } + + @objc static func routeAudioToSpeaker() { + routeAudioTo(call: nil, types: [AudioDeviceType.Speaker]) + } + + static func routeAudioToBluetooth(call: Call? = nil) { + routeAudioTo(call: call, types: [AudioDeviceType.Bluetooth]) + } + + static func routeAudioToHeadset(call: Call? = nil) { + routeAudioTo(call: call, types: [AudioDeviceType.Headphones, AudioDeviceType.Headset]) + } + + static func isSpeakerAudioRouteCurrentlyUsed(call: Call? = nil) -> Bool { + + let currentCall = core.callsNb > 0 ? (call != nil) ? call : core.currentCall != nil ? core.currentCall : core.calls[0] : nil + if (currentCall == nil) { + Log.w("[Audio Route Helper] No call found, setting audio route on Core") + } + + let conference = core.conference + let audioDevice = conference != nil && conference?.isIn == true ? conference!.outputAudioDevice : currentCall != nil ? currentCall!.outputAudioDevice : core.outputAudioDevice + Log.i("[Audio Route Helper] Playback audio currently in use is [\(audioDevice?.deviceName ?? "n/a")] with type (\(audioDevice?.type ?? .Unknown)") + return audioDevice?.type == AudioDeviceType.Speaker + } + + static func isBluetoothAudioRouteCurrentlyUsed(call: Call? = nil) -> Bool { + if (core.callsNb == 0) { + Log.w("[Audio Route Helper] No call found, so bluetooth audio route isn't used") + return false + } + let currentCall = call != nil ? call : core.currentCall != nil ? core.currentCall : core.calls[0] + let conference = core.conference + + let audioDevice = conference != nil && conference?.isIn == true ? conference!.outputAudioDevice : currentCall?.outputAudioDevice + Log.i("[Audio Route Helper] Playback audio device currently in use is [\(audioDevice?.deviceName ?? "n/a")] with type (\(audioDevice?.type ?? .Unknown)") + return audioDevice?.type == AudioDeviceType.Bluetooth + } + + static func isBluetoothAudioRouteAvailable() -> Bool { + if let device = core.audioDevices.first(where: { $0.type == AudioDeviceType.Bluetooth && $0.hasCapability(capability: .CapabilityPlay) }) { + Log.i("[Audio Route Helper] Found bluetooth audio device [\(device.deviceName)]") + return true + } + return false + } + + static private func isBluetoothAudioRecorderAvailable() -> Bool { + if let device = core.audioDevices.first(where: { $0.type == AudioDeviceType.Bluetooth && $0.hasCapability(capability: .CapabilityRecord) }) { + Log.i("[Audio Route Helper] Found bluetooth audio recorder [\(device.deviceName)]") + return true + } + return false + } + + static func isHeadsetAudioRouteAvailable() -> Bool { + if let device = core.audioDevices.first(where: { ($0.type == AudioDeviceType.Headset||$0.type == AudioDeviceType.Headphones) && $0.hasCapability(capability: .CapabilityPlay) }) { + Log.i("[Audio Route Helper] Found headset/headphones audio device [\(device.deviceName)]") + return true + } + return false + } + + static private func isHeadsetAudioRecorderAvailable() -> Bool { + if let device = core.audioDevices.first(where: { ($0.type == AudioDeviceType.Headset||$0.type == AudioDeviceType.Headphones) && $0.hasCapability(capability: .CapabilityRecord) }) { + Log.i("[Audio Route Helper] Found headset/headphones audio recorder [\(device.deviceName)]") + return true + } + return false + } + + + + static func isReceiverEnabled() -> Bool { + if let outputDevice = core.outputAudioDevice { + return outputDevice.type == AudioDeviceType.Microphone + } + return false + } + +} diff --git a/Classes/Voip/Models/CallData.swift b/Classes/Voip/Models/CallData.swift new file mode 100644 index 000000000..49f5fa2a5 --- /dev/null +++ b/Classes/Voip/Models/CallData.swift @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linhome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import linphonesw +import Foundation + +class CallData { + + var call : Call + let address :String? + + let isPaused = MutableLiveData() + let isRemotelyPaused = MutableLiveData() + let canBePaused = MutableLiveData() + let isRecording = MutableLiveData() + let isRemotelyRecorded = MutableLiveData() + let isInRemoteConference = MutableLiveData() + let remoteConferenceSubject = MutableLiveData() + let isOutgoing = MutableLiveData() + let isIncoming = MutableLiveData() + let callState = MutableLiveData() + let iFrameReceived = MutableLiveData(false) + let outgoingEarlyMedia = MutableLiveData() + let enteredDTMF = MutableLiveData(" ") + + var chatRoom: ChatRoom? = nil + + private var callDelegate : CallDelegateStub? + + init (call:Call) { + self.call = call + address = call.remoteAddress?.asStringUriOnly() + callDelegate = CallDelegateStub( + onStateChanged : { (call: linphonesw.Call, state: linphonesw.Call.State, message: String) -> Void in + self.update() + }, + onNextVideoFrameDecoded : { (call: linphonesw.Call) -> Void in + self.iFrameReceived.value = true + }, + onRemoteRecording: { (call: linphonesw.Call, recording:Bool) -> Void in + self.isRemotelyRecorded.value = true + } + ) + call.addDelegate(delegate: callDelegate!) + update() + initChatRoom() + } + + + private func isCallPaused() -> Bool { + return [Call.State.Paused, Call.State.Pausing].contains(call.state) + } + + private func isCallRemotelyPaused() -> Bool { + return [Call.State.PausedByRemote].contains(call.state) + } + + private func isOutGoing() -> Bool { + return [Call.State.OutgoingInit, Call.State.OutgoingEarlyMedia, Call.State.OutgoingProgress, Call.State.OutgoingRinging].contains(call.state) + } + + private func isInComing() -> Bool { + return [Call.State.IncomingReceived, Call.State.IncomingEarlyMedia].contains(call.state) + } + + private func canCallBePaused() -> Bool { + return !call.mediaInProgress() && [Call.State.StreamsRunning, Call.State.PausedByRemote].contains(call.state) + } + + private func update() { + isPaused.value = isCallPaused() + isRemotelyPaused.value = isCallRemotelyPaused() + canBePaused.value = canCallBePaused() + let conference = call.conference + isInRemoteConference.value = conference != nil + if (conference != nil) { + remoteConferenceSubject.value = conference?.subject != nil && (conference?.subject.count)! > 0 ? conference!.subject : VoipTexts.conference_default_title + } + isOutgoing.value = isOutGoing() + isIncoming.value = isInComing() + if (call.mediaInProgress()) { + DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { + self.update() + } + } + outgoingEarlyMedia.value = callState.value == .OutgoingEarlyMedia + isRecording.value = call.params?.isRecording + callState.value = call.state + } + + private func initChatRoom() { + let localSipUri = Core.get().defaultAccount?.params?.identityAddress?.asStringUriOnly() + let remoteSipUri = call.remoteAddress?.asStringUriOnly() + + guard + let localSipUri = Core.get().defaultAccount?.params?.identityAddress?.asStringUriOnly(), + let remoteSipUri = call.remoteAddress?.asStringUriOnly(), + let localAddress = try?Factory.Instance.createAddress(addr: localSipUri), + let remoteSipAddress = try?Factory.Instance.createAddress(addr: remoteSipUri) + else { + Log.e("[Call] Failed to get either local \(localSipUri.logable) or remote \(remoteSipUri.logable) SIP address!") + return + } + do { + chatRoom = Core.get().searchChatRoom(params: nil, localAddr: localAddress, remoteAddr: remoteSipAddress, participants: []) + if (chatRoom == nil) { + chatRoom = Core.get().searchChatRoom(params: nil, localAddr: localAddress, remoteAddr: nil, participants: [remoteSipAddress]) + } + if (chatRoom == nil) { + Log.w("[Call] Failed to find existing chat room for local address [$localSipUri] and remote address [$remoteSipUri]") + let chatRoomParams = try Core.get().createDefaultChatRoomParams() + // TODO: configure chat room params + chatRoom = try Core.get().createChatRoom(params: chatRoomParams, localAddr: localAddress, participants: [remoteSipAddress]) + } + + if (chatRoom == nil) { + Log.e("[Call] Failed to create a chat room for local address \(localSipUri) and remote address \(remoteSipUri)!") + } + } catch { + Log.e("[Call] Exception caught initiating a chat room for local address \(localSipUri) and remote address \(remoteSipUri) Error : \(error)!") + } + } + + func sendDTMF(dtmf:String) { + enteredDTMF.value = enteredDTMF.value! + dtmf + Core.get().playDtmf(dtmf: dtmf.utf8CString[0], durationMs: 1000) + try?call.sendDtmf(dtmf: dtmf.utf8CString[0]) + } + + func destroy() { + call.removeDelegate(delegate: callDelegate!) + isPaused.clearObservers() + isRemotelyPaused.clearObservers() + canBePaused.clearObservers() + isRecording.clearObservers() + isRemotelyRecorded.clearObservers() + isInRemoteConference.clearObservers() + remoteConferenceSubject.clearObservers() + isOutgoing.clearObservers() + isIncoming.clearObservers() + callState.clearObservers() + iFrameReceived.clearObservers() + outgoingEarlyMedia.clearObservers() + enteredDTMF.clearObservers() + } + + func toggleRecord() { + if (call.params?.isRecording == true) { + call.stopRecording() + } else { + call.startRecording() + } + isRecording.value = call.params?.isRecording + } + + func togglePause() { + if (isCallPaused()) { + try?call.resume() + } else { + try?call.pause() + } + isPaused.value = isCallPaused() + } + +} diff --git a/Classes/Voip/Models/CallStatisticsData.swift b/Classes/Voip/Models/CallStatisticsData.swift new file mode 100644 index 000000000..5d075d063 --- /dev/null +++ b/Classes/Voip/Models/CallStatisticsData.swift @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2010-2021 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import linphonesw + +class CallStatisticsData { + + var call : Call + var audioStats:[StatItemData] = [] + var videoStats:[StatItemData] = [] + let isVideoEnabled = MutableLiveData() + let statsUpdated = MutableLiveData(true) + + private var callDelegate : CallDelegateStub? + + init (call:Call) { + self.call = call + callDelegate = CallDelegateStub( + onStatsUpdated : { (call: Call, stats: CallStats) -> Void in + self.isVideoEnabled.value = call.currentParams?.videoEnabled + self.updateCallStats(stats: stats) + self.statsUpdated.value = true + } + + ) + call.addDelegate(delegate: callDelegate!) + initCallStats() + isVideoEnabled.value = call.currentParams?.videoEnabled + call.audioStats.map { updateCallStats(stats: $0) } + call.videoStats.map { updateCallStats(stats: $0) } + } + + private func initCallStats() { + + audioStats.append(StatItemData(type: StatType.CAPTURE)) + audioStats.append(StatItemData(type: StatType.PLAYBACK)) + audioStats.append(StatItemData(type: StatType.PAYLOAD)) + audioStats.append(StatItemData(type: StatType.ENCODER)) + audioStats.append(StatItemData(type: StatType.DECODER)) + audioStats.append(StatItemData(type: StatType.DOWNLOAD_BW)) + audioStats.append(StatItemData(type: StatType.UPLOAD_BW)) + audioStats.append(StatItemData(type: StatType.ICE)) + audioStats.append(StatItemData(type: StatType.IP_FAM)) + audioStats.append(StatItemData(type: StatType.SENDER_LOSS)) + audioStats.append(StatItemData(type: StatType.RECEIVER_LOSS)) + audioStats.append(StatItemData(type: StatType.JITTER)) + + videoStats.append(StatItemData(type: StatType.CAPTURE)) + videoStats.append(StatItemData(type: StatType.PLAYBACK)) + videoStats.append(StatItemData(type: StatType.PAYLOAD)) + videoStats.append(StatItemData(type: StatType.ENCODER)) + videoStats.append(StatItemData(type: StatType.DECODER)) + videoStats.append(StatItemData(type: StatType.DOWNLOAD_BW)) + videoStats.append(StatItemData(type: StatType.UPLOAD_BW)) + videoStats.append(StatItemData(type: StatType.ESTIMATED_AVAILABLE_DOWNLOAD_BW)) + videoStats.append(StatItemData(type: StatType.ICE)) + videoStats.append(StatItemData(type: StatType.IP_FAM)) + videoStats.append(StatItemData(type: StatType.SENDER_LOSS)) + videoStats.append(StatItemData(type: StatType.RECEIVER_LOSS)) + videoStats.append(StatItemData(type: StatType.SENT_RESOLUTION)) + videoStats.append(StatItemData(type: StatType.RECEIVED_RESOLUTION)) + videoStats.append(StatItemData(type: StatType.SENT_FPS)) + videoStats.append(StatItemData(type: StatType.RECEIVED_FPS)) + } + + private func updateCallStats(stats: CallStats) { + if (stats.type == StreamType.Audio) { + audioStats.forEach{ $0.update(call: call, stats: stats)} + } else if (stats.type == StreamType.Video) { + videoStats.forEach{ $0.update(call: call, stats: stats)} + } + } +} + + +enum StatType { + case CAPTURE + case PLAYBACK + case PAYLOAD + case ENCODER + case DECODER + case DOWNLOAD_BW + case UPLOAD_BW + case ICE + case IP_FAM + case SENDER_LOSS + case RECEIVER_LOSS + case JITTER + case SENT_RESOLUTION + case RECEIVED_RESOLUTION + case SENT_FPS + case RECEIVED_FPS + case ESTIMATED_AVAILABLE_DOWNLOAD_BW +} + +struct StatItemData { + var type:StatType + + let value = MutableLiveData() + + func update(call: Call, stats: CallStats) { + guard let payloadType = stats.type == StreamType.Audio ? call.currentParams?.usedAudioPayloadType : call.currentParams?.usedVideoPayloadType, let core = call.core else { + value.value = "n/a" + return + } + switch(type) { + case StatType.CAPTURE: value.value = stats.type == StreamType.Audio ? core.captureDevice : core.videoDevice + case StatType.PLAYBACK: value.value = stats.type == StreamType.Audio ? core.playbackDevice : core.videoDisplayFilter + case StatType.PAYLOAD: value.value = "\(payloadType.mimeType)/\(payloadType.clockRate / 1000) kHz" + case StatType.ENCODER: value.value = payloadType.description + case StatType.DECODER: value.value = payloadType.description + case StatType.DOWNLOAD_BW: value.value = "\(stats.downloadBandwidth) kbits/s" + case StatType.UPLOAD_BW: value.value = "\(stats.uploadBandwidth) kbits/s" + case StatType.ICE: value.value = stats.iceState.toString() + case StatType.IP_FAM: value.value = stats.ipFamilyOfRemote == AddressFamily.Inet6 ? "IPv6" : "IPv4" + case StatType.SENDER_LOSS: value.value = String(format: "%.2f%",stats.senderLossRate) + case StatType.RECEIVER_LOSS: value.value = String(format: "%.2f%",stats.receiverLossRate) + case StatType.JITTER: value.value = String(format: "%.2f ms",stats.jitterBufferSizeMs) + case StatType.SENT_RESOLUTION: value.value = call.currentParams?.sentVideoDefinition?.name + case StatType.RECEIVED_RESOLUTION: value.value = call.currentParams?.receivedVideoDefinition?.name + case StatType.SENT_FPS: value.value = "\(call.currentParams?.sentFramerate ?? 0.0)" + case StatType.RECEIVED_FPS: value.value = "\(call.currentParams?.receivedFramerate ?? 0.0)" + case StatType.ESTIMATED_AVAILABLE_DOWNLOAD_BW: value.value = "\(stats.estimatedDownloadBandwidth) kbit/s" + } + } + + + func getTypeTitle() -> String { + switch (type) { + case .CAPTURE: return VoipTexts.call_stats_capture_filter + case .PLAYBACK: return VoipTexts.call_stats_player_filter + case .PAYLOAD: return VoipTexts.call_stats_codec + case .ENCODER: return VoipTexts.call_stats_encoder_name + case .DECODER: return VoipTexts.call_stats_decoder_name + case .DOWNLOAD_BW: return VoipTexts.call_stats_download + case .UPLOAD_BW: return VoipTexts.call_stats_upload + case .ICE: return VoipTexts.call_stats_ice + case .IP_FAM: return VoipTexts.call_stats_ip + case .SENDER_LOSS: return VoipTexts.call_stats_sender_loss_rate + case .RECEIVER_LOSS: return VoipTexts.call_stats_receiver_loss_rate + case .JITTER: return VoipTexts.call_stats_jitter_buffer + case .SENT_RESOLUTION: return VoipTexts.call_stats_video_resolution_sent + case .RECEIVED_RESOLUTION: return VoipTexts.call_stats_video_resolution_received + case .SENT_FPS: return VoipTexts.call_stats_video_fps_sent + case .RECEIVED_FPS: return VoipTexts.call_stats_video_fps_received + case .ESTIMATED_AVAILABLE_DOWNLOAD_BW: return VoipTexts.call_stats_estimated_download + } + } + + + + + +} diff --git a/Classes/Voip/Models/CallsViewModel.swift b/Classes/Voip/Models/CallsViewModel.swift new file mode 100644 index 000000000..2caa75232 --- /dev/null +++ b/Classes/Voip/Models/CallsViewModel.swift @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linhome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import linphonesw +import AVFoundation + + +class CallsViewModel { + + let currentCallData = MutableLiveData(nil) + let callsData = MutableLiveData<[CallData]>([]) + let inactiveCallsCount = MutableLiveData(0) + let currentCallUnreadChatMessageCount = MutableLiveData(0) + let chatAndCallsCount = MutableLiveData(0) + let callConnectedEvent = MutableLiveData() + let callUpdateEvent = MutableLiveData() + let noMoreCallEvent = MutableLiveData(false) + let core = Core.get() + + static let shared = CallsViewModel() + + private var coreDelegate : CoreDelegateStub? + + init () { + coreDelegate = CoreDelegateStub( + onCallStateChanged : { (core: Core, call: Call, state: Call.State, message:String) -> Void in + Log.i("[Calls] Call state changed: \(call) : \(state)") + let currentCall = core.currentCall + if (currentCall != nil && self.currentCallData.value??.call.getCobject != currentCall?.getCobject) { + self.updateCurrentCallData(currentCall: currentCall) + } else if (currentCall == nil && core.callsNb > 1) { + self.updateCurrentCallData(currentCall: currentCall) + } + if ([.End,.Released,.Error].contains(state)) { + self.removeCallFromList(call: call) + } else if ([.OutgoingInit].contains(state)) { + self.addCallToList(call:call) + } else if ([.IncomingReceived].contains(state)) { + self.addCallToList(call:call) + } else if (state == .UpdatedByRemote) { + let remoteVideo = call.remoteParams?.videoEnabled == true + let localVideo = call.currentParams?.videoEnabled == true + let autoAccept = call.core?.videoActivationPolicy?.automaticallyAccept == true + if (remoteVideo && !localVideo && !autoAccept) { + if (core.videoCaptureEnabled || core.videoDisplayEnabled) { + try?call.deferUpdate() + self.callUpdateEvent.value = call + } else { + call.answerVideoUpdateRequest(accept: false) + } + } + }else if (state == Call.State.Connected) { + self.callConnectedEvent.value = call + } else if (state == Call.State.StreamsRunning) { + self.callUpdateEvent.value = call + } + self.updateInactiveCallsCount() + self.callsData.notifyValue() + }, + + onMessageReceived : { (core: Core, room: ChatRoom, message: ChatMessage) -> Void in + self.updateUnreadChatCount() + }, + onChatRoomRead : { (core: Core, room: ChatRoom) -> Void in + self.updateUnreadChatCount() + }, + onLastCallEnded: { (core: Core) -> Void in + self.currentCallData.value??.destroy() + self.currentCallData.value = nil + self.noMoreCallEvent.value = true + } + ) + + Core.get().addDelegate(delegate: coreDelegate!) + + if let currentCall = core.currentCall { + currentCallData.value??.destroy() + currentCallData.value = CallData(call:currentCall) + } + + chatAndCallsCount.value = 0 + inactiveCallsCount.readCurrentAndObserve { (_) in + self.updateCallsAndChatCount() + } + currentCallUnreadChatMessageCount.readCurrentAndObserve { (_) in + self.updateCallsAndChatCount() + } + + initCallList() + updateInactiveCallsCount() + updateUnreadChatCount() + + } + + private func initCallList() { + core.calls.forEach { addCallToList(call: $0) } + } + + private func removeCallFromList(call: Call) { + Log.i("[Calls] Removing call \(call) from calls list") + if let removeCandidate = callsData.value?.filter{$0.call.getCobject == call.getCobject}.first { + removeCandidate.destroy() + } + + callsData.value = callsData.value?.filter(){$0.call.getCobject != call.getCobject} + callsData.notifyValue() + } + + private func addCallToList(call: Call) { + Log.i("[Calls] Adding call \(call) to calls list") + callsData.value?.append(CallData(call: call)) + callsData.notifyValue() + } + + private func updateUnreadChatCount() { + guard let unread = currentCallData.value??.chatRoom?.unreadMessagesCount else { + currentCallUnreadChatMessageCount.value = 0 + return + } + currentCallUnreadChatMessageCount.value = unread + } + + private func updateInactiveCallsCount() { + inactiveCallsCount.value = core.callsNb - 1 + } + + private func updateCallsAndChatCount() { + var value = 0 + if let calls = inactiveCallsCount.value { + value += calls + } + if let chats = currentCallUnreadChatMessageCount.value { + value += chats + } + chatAndCallsCount.value = value + } + + func mergeCallsIntoLocalConference() { + CallManager.instance().startLocalConference() + } + + private func updateCurrentCallData(currentCall: Call?) { + var callToUse = currentCall + if (currentCall == nil) { + Log.w("[Calls] Current call is now null") + + let firstCall = core.calls.first + if (firstCall != nil && currentCallData.value??.call.getCobject != firstCall?.getCobject) { + Log.i("[Calls] Using first call as \"current\" call") + callToUse = firstCall + } + } + + guard let callToUse = callToUse else { + Log.w("[Calls] No call found to be used as \"current\"") + return + } + + let firstToUse = callsData.value?.filter{$0.call.getCobject != callToUse.getCobject}.first + if (firstToUse != nil) { + currentCallData.value = firstToUse + } else { + Log.w("[Calls] Call not found in calls data list, shouldn't happen!") + currentCallData.value = CallData(call: callToUse) + } + + updateUnreadChatCount() + } + + +} diff --git a/Classes/Voip/Models/ConferenceParticipantData.swift b/Classes/Voip/Models/ConferenceParticipantData.swift new file mode 100644 index 000000000..2ccdf95d9 --- /dev/null +++ b/Classes/Voip/Models/ConferenceParticipantData.swift @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linhome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import linphonesw +import Foundation + +class ConferenceParticipantData { + + var conference:Conference + var participant:Participant + + let isAdmin = MutableLiveData() + let isMeAdmin = MutableLiveData() + + private var callDelegate : CallDelegateStub? + + init (conference:Conference, participant:Participant) { + self.conference = conference + self.participant = participant + isAdmin.value = participant.isAdmin + isMeAdmin.value = conference.me?.isAdmin + Log.i("[Conference Participant] Participant \(sipUri!) is admin=\(isAdmin.value!)") + + } + + var sipUri:String? { + get { + return self.participant.address?.asString() + } + } + + func destroy() { + isAdmin.clearObservers() + isMeAdmin.clearObservers() + } +} diff --git a/Classes/Voip/Models/ConferenceParticipantDeviceData.swift b/Classes/Voip/Models/ConferenceParticipantDeviceData.swift new file mode 100644 index 000000000..b10dd635f --- /dev/null +++ b/Classes/Voip/Models/ConferenceParticipantDeviceData.swift @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linhome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import linphonesw +import Foundation + +class ConferenceParticipantDeviceData { + + var participantDevice:ParticipantDevice + let isMe:Bool + + let videoEnabled = MutableLiveData() + let activeSpeaker = MutableLiveData() + let isInConference = MutableLiveData() + let core = Core.get() + + private var participantDeviceDelegate : ParticipantDeviceDelegate? + + init (participantDevice:ParticipantDevice, isMe:Bool) { + self.isMe = isMe + self.participantDevice = participantDevice + participantDeviceDelegate = ParticipantDeviceDelegateStub( + onIsSpeakingChanged: { (participantDevice, isSpeaking) in + Log.i("[Conference Participant Device] Participant \(participantDevice ) isspeaking = \(isSpeaking)") + self.activeSpeaker.value = isSpeaking + }, onConferenceJoined: { (participantDevice) in + Log.i("[Conference Participant Device] Participant \(participantDevice) has joined the conference") + self.isInConference.value = true + }, onConferenceLeft: { (participantDevice) in + Log.i("[Conference Participant Device] Participant \(participantDevice) has left the conference") + self.isInConference.value = false + }, onAudioDirectionChanged: { (participantDevice, direction) in + Log.i("[Conference Participant Device] Participant \(participantDevice) audio stream direction changed: \(direction)") + }, onVideoDirectionChanged: { (participantDevice, direction) in + Log.i("[Conference Participant Device] Participant \(participantDevice) video stream direction changed: \(direction)") + self.videoEnabled.value = direction == MediaDirection.SendOnly || direction == MediaDirection.SendRecv + }, onTextDirectionChanged: { (participantDevice, direction) in + Log.i("[Conference Participant Device] Participant \(participantDevice) text stream direction changed: \(direction)") + }) + + participantDevice.addDelegate(delegate: participantDeviceDelegate!) + activeSpeaker.value = false + + // TODO: What happens if we have disabled video locally? + videoEnabled.value = participantDevice.videoDirection == MediaDirection.SendOnly || participantDevice.videoDirection == MediaDirection.SendRecv + isInConference.value = participantDevice.isInConference + + } + + func destroy() { + participantDevice.removeDelegate(delegate: participantDeviceDelegate!) + } + + func switchCamera() { + Core.get().toggleCamera() + } + + func isSwitchCameraAvailable() -> Bool { + return isMe && Core.get().showSwitchCameraButton() + } + + func setVideoView(view:UIView) { + if (!isMe && participantDevice.videoDirection != MediaDirection.SendRecv) { + Log.e("[Conference Participant Device] Participant \(participantDevice) device video direction is \(participantDevice.videoDirection), don't set video window!") + return + } + Log.i("[Conference Participant Device] Setting textureView \(view) for participant \(participantDevice)") + if (isMe) { // TODO: remove + core.nativePreviewWindow = view + } else { + participantDevice.nativeVideoWindowId = UnsafeMutableRawPointer(Unmanaged.passRetained(view).toOpaque()) + } + } +} diff --git a/Classes/Voip/Models/ConferenceViewModel.swift b/Classes/Voip/Models/ConferenceViewModel.swift new file mode 100644 index 000000000..26206c306 --- /dev/null +++ b/Classes/Voip/Models/ConferenceViewModel.swift @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linhome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import linphonesw +import AVFoundation + +class ConferenceViewModel { + + let core = Core.get() + static let shared = ConferenceViewModel() + + + let isConferencePaused = MutableLiveData() + let canResumeConference = MutableLiveData() + + let isMeConferenceFocus = MutableLiveData() + let isMeAdmin = MutableLiveData() + + let conferenceAddress = MutableLiveData
() + + let conferenceParticipants = MutableLiveData<[ConferenceParticipantData]>() + let conferenceParticipantDevices = MutableLiveData<[ConferenceParticipantDeviceData]>() + let conferenceDisplayMode = MutableLiveData() + + let isInConference = MutableLiveData() + + let isVideoConference = MutableLiveData() + + let isRecording = MutableLiveData() + let isRemotelyRecorded = MutableLiveData() + + let subject = MutableLiveData() + + let conference = MutableLiveData() + + let maxParticipantsForMosaicLayout = ConfigManager.instance().lpConfigIntForKey(key: "max_conf_part_mosaic_layout",defaultValue: 6) + + private var conferenceDelegate : ConferenceDelegateStub? + private var coreDelegate : CoreDelegateStub? + + init () { + conferenceDelegate = ConferenceDelegateStub(onParticipantAdded: { (conference: Conference, participant: Participant)in + if (conference.isMe(uri: participant.address!)) { + Log.i("[Conference] \(conference) Entered conference") + self.isConferencePaused.value = false + } else { + Log.i("[Conference] \(conference) Participant \(participant) added") + } + self.updateParticipantsList(conference) + self.updateParticipantsDevicesList(conference) + + let count = self.conferenceParticipantDevices.value!.count + if (count > self.maxParticipantsForMosaicLayout) { + Log.w("[Conference] \(conference) More than \(self.maxParticipantsForMosaicLayout) participants \(count), forcing active speaker layout") + self.conferenceDisplayMode.value = .ActiveSpeaker + } + }, onParticipantRemoved: {(conference: Conference, participant: Participant) in + if (conference.isMe(uri: participant.address!)) { + Log.i("[Conference] \(conference) \(participant) Left conference") + self.isConferencePaused.value = true + } else { + Log.i("[Conference] \(conference) \(participant) Participant removed") + } + self.updateParticipantsList(conference) + self.updateParticipantsDevicesList(conference) + }, onParticipantDeviceAdded: {(conference: Conference, participantDevice: ParticipantDevice) in + Log.i("[Conference] \(conference) Participant device \(participantDevice) added") + self.updateParticipantsDevicesList(conference) + }, onParticipantDeviceRemoved: { (conference: Conference, participantDevice: ParticipantDevice) in + Log.i("[Conference] \(conference) Participant device \(participantDevice) removed") + self.updateParticipantsDevicesList(conference) + }, onParticipantAdminStatusChanged: { (conference: Conference, participant: Participant) in + Log.i("[Conference] \(conference) Participant admin status changed") + self.isMeAdmin.value = conference.me?.isAdmin + self.updateParticipantsList(conference) + } + ) + + coreDelegate = CoreDelegateStub( + onConferenceStateChanged: { (core, conference, state) in + Log.i("[Conference] \(conference) Conference state changed: \(state)") + self.isConferencePaused.value = !conference.isIn + self.canResumeConference.value = true // TODO: How can this value be false? + self.isVideoConference.value = conference.currentParams?.isVideoEnabled == true + + if (state == Conference.State.Instantiated) { + self.conference.value = conference + self.isInConference.value = true + conference.addDelegate(delegate: self.conferenceDelegate!) + } else if (state == Conference.State.Created) { + self.updateParticipantsList(conference) + self.updateParticipantsDevicesList(conference) + self.isMeConferenceFocus.value = conference.me?.isFocus == true + self.isMeAdmin.value = conference.me?.isAdmin == true + self.conferenceAddress.value = conference.conferenceAddress + self.subject.value = conference.subject.isEmpty ? ( + conference.me?.isFocus == true ? ( + VoipTexts.conference_local_title + ) : ( + VoipTexts.conference_default_title + ) + ) : ( + conference.subject + ) + } else if (state == Conference.State.Terminated || state == Conference.State.TerminationFailed) { + self.isInConference.value = false + self.isVideoConference.value = false + conference.removeDelegate(delegate: self.conferenceDelegate!) + self.conferenceParticipants.value?.forEach{ $0.destroy()} + self.conferenceParticipantDevices.value?.forEach{ $0.destroy()} + self.conferenceParticipants.value = [] + self.conferenceParticipantDevices.value = [] + } + + let layout = conference.layout == .None ? .Grid : conference.layout + self.conferenceDisplayMode.value = layout + Log.i("[Conference] \(conference) Conference current layout is: \(layout)") + } + ) + + Core.get().addDelegate(delegate: coreDelegate!) + + + conferenceParticipants.value = [] + conferenceParticipantDevices.value = [] + conferenceDisplayMode.value = .Grid + + subject.value = VoipTexts.conference_default_title + + if let conference = core.conference != nil ? core.conference : core.currentCall?.conference { + Log.i("[Conference] Found an existing conference: \(conference)") + self.conference.value = conference + conference.addDelegate(delegate: self.conferenceDelegate!) + + + isInConference.value = true + isConferencePaused.value = !conference.isIn + isMeConferenceFocus.value = conference.me?.isFocus == true + isMeAdmin.value = conference.me?.isAdmin == true + isVideoConference.value = conference.currentParams?.isVideoEnabled == true + conferenceAddress.value = conference.conferenceAddress + if (!conference.subject.isEmpty) { + subject.value = conference.subject + } + + let layout = conference.layout == .None ? .Grid : conference.layout + conferenceDisplayMode.value = layout + Log.i("[Conference] \(conference) Conference current layout is: \(layout)") + + updateParticipantsList(conference) + updateParticipantsDevicesList(conference) + } + + + } + + + func destroy() { + core.removeDelegate(delegate: self.coreDelegate!) + self.conferenceParticipants.value?.forEach{ $0.destroy()} + self.conferenceParticipantDevices.value?.forEach{ $0.destroy()} + } + + + func pauseConference() { + let defaultProxyConfig = core.defaultProxyConfig + let localAddress = defaultProxyConfig?.identityAddress + let participants : [Address] = [] + let remoteConference = core.searchConference(params: nil, localAddr: localAddress, remoteAddr: conferenceAddress.value, participants: participants) + let localConference = core.searchConference(params: nil, localAddr: conferenceAddress.value, remoteAddr: conferenceAddress.value, participants: participants) + let conference = remoteConference != nil ? remoteConference : localConference + + if (conference != nil) { + Log.i("[Conference] Leaving conference with address \(conference) temporarily") + conference!.leave() + } else { + Log.w("[Conference] Unable to find conference with address \(conference)") + } + } + + func resumeConference() { + let defaultProxyConfig = core.defaultProxyConfig + let localAddress = defaultProxyConfig?.identityAddress + let participants : [Address] = [] + let remoteConference = core.searchConference(params: nil, localAddr: localAddress, remoteAddr: conferenceAddress.value, participants: participants) + let localConference = core.searchConference(params: nil, localAddr: conferenceAddress.value, remoteAddr: conferenceAddress.value, participants: participants) + + if let conference = remoteConference != nil ? remoteConference : localConference { + Log.i("[Conference] Entering again conference with address \(conference)") + conference.enter() + } else { + Log.w("[Conference] Unable to find conference with address \(conference)") + } + } + + func togglePlayPause () { + if (isConferencePaused.value == true) { + resumeConference() + isConferencePaused.value = false + } else { + pauseConference() + isConferencePaused.value = true + } + } + + func toggleRecording() { + guard let conference = core.conference else { + Log.e("[Conference] Failed to find conference!") + return + } + + if (conference.isRecording == true) { + conference.stopRecording() + } else { + let path = AppManager.recordingFilePathFromCall(address: conference.conferenceAddress?.asStringUriOnly() ?? "") + Log.i("[Conference] Starting recording \(conference) in file \(path)") + conference.startRecording(path: path) + } + isRecording.value = conference.isRecording + } + + private func updateParticipantsList(_ conference: Conference) { + self.conferenceParticipants.value?.forEach{ $0.destroy()} + var participants :[ConferenceParticipantData] = [] + + let participantsList = conference.participantList + Log.i("[Conference] \(conference) Conference has \(participantsList.count) participants") + + participantsList.forEach { (participant) in + let participantDevices = participant.devices + Log.i("[Conference] \(conference) Participant found: \(participant) with \(participantDevices.count) device(s)") + let participantData = ConferenceParticipantData(conference: conference, participant: participant) + participants.append(participantData) + } + + conferenceParticipants.value = participants + } + + private func updateParticipantsDevicesList(_ conference: Conference) { + self.conferenceParticipantDevices.value?.forEach{ $0.destroy()} + var devices :[ConferenceParticipantDeviceData] = [] + + let participantsList = conference.participantList + Log.i("[Conference] \(conference) Conference has \(participantsList.count) participants") + + participantsList.forEach { (participant) in + let participantDevices = participant.devices + Log.i("[Conference] \(conference) Participant found: \(participant) with \(participantDevices.count) device(s)") + + participantDevices.forEach { (device) in + Log.i("[Conference] \(conference) Participant device found: \(device.name) (\(device.address!.asStringUriOnly()))") + let deviceData = ConferenceParticipantDeviceData(participantDevice: device, isMe: false) + devices.append(deviceData) + } + + } + conference.me?.devices.forEach { (device) in + Log.i("[Conference] \(conference) Participant device for myself found: \(device.name) (\(device.address!.asStringUriOnly()))") + let deviceData = ConferenceParticipantDeviceData(participantDevice: device, isMe: true) + devices.append(deviceData) + } + + + conferenceParticipantDevices.value = devices + } + +} + +enum FlexDirection { + case ROW + case ROW_REVERSE + case COLUMN + case COLUMN_REVERSE +} diff --git a/Classes/Voip/Models/ControlsViewModel.swift b/Classes/Voip/Models/ControlsViewModel.swift new file mode 100644 index 000000000..51109541e --- /dev/null +++ b/Classes/Voip/Models/ControlsViewModel.swift @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linhome + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import linphonesw +import AVFoundation + + +class ControlsViewModel { + let core = Core.get() + + let isSpeakerSelected = MutableLiveData() + let isMicrophoneMuted = MutableLiveData() + let isMuteMicrophoneEnabled = MutableLiveData() + let isBluetoothHeadsetSelected = MutableLiveData() + let nonEarpieceOutputAudioDevice = MutableLiveData() + let audioRoutesSelected = MutableLiveData() + let audioRoutesEnabled = MutableLiveData() + + let isVideoUpdateInProgress = MutableLiveData() + let isVideoEnabled = MutableLiveData() + let isVideoAvailable = MutableLiveData() + + let fullScreenMode = MutableLiveData(false) + let numpadVisible = MutableLiveData(false) + let callStatsVisible = MutableLiveData(false) + let goToConferenceLayoutSettings = MutableLiveData(false) + let goToConferenceParticipantsListEvent = MutableLiveData(false) + let goToChatEvent = MutableLiveData(false) + let goToCallsListEvent = MutableLiveData(false) + let hideExtraButtons = MutableLiveData(true) + + let proximitySensorEnabled = MutableLiveData() + + + static let shared = ControlsViewModel() + private var coreDelegate : CoreDelegateStub? + private var previousCallState = Call.State.Idle + + + init () { + coreDelegate = CoreDelegateStub( + onCallStateChanged : { (core: Core, call: Call, state: Call.State, message:String) -> Void in + Log.i("[Call Controls] Call state changed: \(call) : \(state)") + if (state == Call.State.StreamsRunning) { + self.isVideoUpdateInProgress.value = false + } + self.updateUI() + self.setAudioRoutes(call,state) + self.previousCallState = state + }, + onAudioDeviceChanged : { (core: Core, audioDevice: AudioDevice) -> Void in + Log.i("[Call Controls] Audio device changed: \(audioDevice.deviceName)") + self.nonEarpieceOutputAudioDevice.value = audioDevice.type != AudioDeviceType.Microphone // on iOS Earpiece = Microphone + self.updateSpeakerState() + self.updateBluetoothHeadsetState() + } + ) + Core.get().addDelegate(delegate: coreDelegate!) + proximitySensorEnabled.value = shouldProximitySensorBeEnabled() + isVideoEnabled.readCurrentAndObserve { _ in + self.proximitySensorEnabled.value = self.shouldProximitySensorBeEnabled() + } + nonEarpieceOutputAudioDevice.readCurrentAndObserve { _ in + self.proximitySensorEnabled.value = self.shouldProximitySensorBeEnabled() + } + proximitySensorEnabled.readCurrentAndObserve { (enabled) in + UIDevice.current.isProximityMonitoringEnabled = enabled == true + } + updateUI() + } + + private func setAudioRoutes(_ call:Call,_ state:Call.State) { + if (state == .OutgoingProgress) { + if (core.callsNb == 1 && ConfigManager.instance().lpConfigBoolForKey(key: "route_audio_to_bluetooth_if_available",defaultValue:true)) { + AudioRouteUtils.routeAudioToBluetooth(call: call) + } + } + if (state == .StreamsRunning) { + if (core.callsNb == 1) { + // Only try to route bluetooth / headphone / headset when the call is in StreamsRunning for the first time + if (previousCallState == Call.State.Connected) { + Log.i("[Context] First call going into StreamsRunning state for the first time, trying to route audio to headset or bluetooth if available") + if (AudioRouteUtils.isHeadsetAudioRouteAvailable()) { + AudioRouteUtils.routeAudioToHeadset(call: call) + } else if (ConfigManager.instance().lpConfigBoolForKey(key: "route_audio_to_bluetooth_if_available",defaultValue:true) && + AudioRouteUtils.isBluetoothAudioRouteAvailable()) { + AudioRouteUtils.routeAudioToBluetooth(call: call) + } + } + } + + if (ConfigManager.instance().lpConfigBoolForKey(key: "route_audio_to_speaker_when_video_enabled",defaultValue:true) && call.currentParams?.videoEnabled == true) { + // Do not turn speaker on when video is enabled if headset or bluetooth is used + if (!AudioRouteUtils.isHeadsetAudioRouteAvailable() && + !AudioRouteUtils.isBluetoothAudioRouteCurrentlyUsed(call: call) + ) { + Log.i("[Context] Video enabled and no wired headset not bluetooth in use, routing audio to speaker") + AudioRouteUtils.routeAudioToSpeaker(call: call) + } + } + } + } + + + private func shouldProximitySensorBeEnabled() -> Bool { + return isVideoEnabled.value != true && nonEarpieceOutputAudioDevice.value != true + } + + + func hangUp() { + if (core.currentCall != nil) { + try?core.currentCall?.terminate() + } else if (core.conference?.isIn == true) { + try?core.terminateConference() + } else { + try?core.terminateAllCalls() + } + } + + func toggleVideo() { + if let conference = core.conference, conference.isIn { + if let params = try?core.createConferenceParams() { + let videoEnabled = conference.currentParams?.isVideoEnabled == true + params.videoEnabled = !videoEnabled + _ = conference.updateParams(params: params) + } + } else if let currentCall = core.currentCall { + let state = currentCall.state + if (state == Call.State.End || state == Call.State.Released || state == Call.State.Error) { + return + } + isVideoUpdateInProgress.value = true + if let params = try?core.createCallParams(call: currentCall) { + params.videoEnabled = !(currentCall.currentParams?.videoEnabled == true) + try?currentCall.update(params: params) + if (params.videoEnabled) { + currentCall.requestNotifyNextVideoFrameDecoded() + } + } + } + } + + + private func updateUI() { + updateVideoAvailable() + updateVideoEnabled() + updateMicState() + updateSpeakerState() + updateAudioRoutesState() + proximitySensorEnabled.value = shouldProximitySensorBeEnabled() + } + + private func updateAudioRoutesState() { + let bluetoothDeviceAvailable = AudioRouteUtils.isBluetoothAudioRouteAvailable() + audioRoutesEnabled.value = bluetoothDeviceAvailable + + if (!bluetoothDeviceAvailable) { + audioRoutesSelected.value = false + audioRoutesEnabled.value = false + } + } + + private func updateSpeakerState() { + isSpeakerSelected.value = AudioRouteUtils.isSpeakerAudioRouteCurrentlyUsed() + } + + private func updateBluetoothHeadsetState() { + isBluetoothHeadsetSelected.value = AudioRouteUtils.isBluetoothAudioRouteCurrentlyUsed() + } + + private func updateVideoAvailable() { + let currentCall = core.currentCall + isVideoAvailable.value = (core.videoCaptureEnabled || core.videoPreviewEnabled) && + ((currentCall != nil && currentCall?.mediaInProgress() != true) || core.conference?.isIn == true) + } + + private func updateVideoEnabled() { + let enabled = isVideoCallOrConferenceActive() + isVideoEnabled.value = enabled + } + + func updateMicState() { + isMicrophoneMuted.value = !micAuthorized() || !core.micEnabled + isMuteMicrophoneEnabled.value = core.currentCall != nil || core.conference?.isIn == true + } + + func micAuthorized() -> Bool { + return AVCaptureDevice.authorizationStatus(for: .audio) == .authorized + } + + func isVideoCallOrConferenceActive() -> Bool { + if let conference = core.conference, conference.isIn { + return conference.currentParams?.videoEnabled == true + } else { + return core.currentCall?.currentParams?.videoEnabled == true + } + } + + func toggleFullScreen() { + if (isVideoEnabled.value == true) { + fullScreenMode.value = fullScreenMode.value != true + } + } + + func toggleMuteMicrophone() { + if (!micAuthorized()) { + AVAudioSession.sharedInstance().requestRecordPermission { granted in + if granted { + self.core.micEnabled = !self.core.micEnabled + self.updateMicState() + } + } + } + core.micEnabled = !core.micEnabled + updateMicState() + } + + func forceEarpieceAudioRoute() { + if (AudioRouteUtils.isHeadsetAudioRouteAvailable()) { + Log.i("[Call Controls] Headset found, route audio to it instead of earpiece") + AudioRouteUtils.routeAudioToHeadset() + } else { + AudioRouteUtils.routeAudioToEarpiece() + } + } + + func forceSpeakerAudioRoute() { + AudioRouteUtils.routeAudioToSpeaker() + } + + func forceBluetoothAudioRoute() { + AudioRouteUtils.routeAudioToBluetooth() + } + + func toggleSpeaker() { + if (AudioRouteUtils.isSpeakerAudioRouteCurrentlyUsed()) { + forceEarpieceAudioRoute() + } else { + forceSpeakerAudioRoute() + } + } + + func toggleRoutesMenu() { + audioRoutesSelected.value = audioRoutesSelected.value != true + } + +} diff --git a/Classes/CallSideMenuView.h b/Classes/Voip/Theme/ButtonTheme.swift similarity index 70% rename from Classes/CallSideMenuView.h rename to Classes/Voip/Theme/ButtonTheme.swift index 2a97f78d5..88b8306bb 100644 --- a/Classes/CallSideMenuView.h +++ b/Classes/Voip/Theme/ButtonTheme.swift @@ -1,7 +1,7 @@ /* * Copyright (c) 2010-2020 Belledonne Communications SARL. * - * This file is part of linphone-iphone + * This file is part of linphone-iphone * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,15 +17,17 @@ * along with this program. If not, see . */ -#import -#import "SideMenuTableView.h" -#import "PhoneMainView.h" +import Foundation +import UIKit -@interface CallSideMenuView : UIViewController -@property(weak, nonatomic) IBOutlet UILabel *statsLabel; +struct ButtonTheme { + var tintableStateIcons: [UInt: TintableIcon] // State indexed + var backgroundStateColors: [UInt: LightDarkColor] // State indexed +} -- (IBAction)onLateralSwipe:(id)sender; - -@end +struct TintableIcon { + var name:String + var tintColor: LightDarkColor? = nil +} diff --git a/Classes/Voip/Theme/LightDarkColor.swift b/Classes/Voip/Theme/LightDarkColor.swift new file mode 100644 index 000000000..a01e375b2 --- /dev/null +++ b/Classes/Voip/Theme/LightDarkColor.swift @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation + +class LightDarkColor { + var light: UIColor + var dark : UIColor + init(_ l:UIColor,_ d:UIColor){ + light = l + dark = d + } + + func get() -> UIColor { + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .light { + return light + } else { + return dark + } + } else { + return light + } + } + +} diff --git a/Classes/Voip/Theme/TextStyle.swift b/Classes/Voip/Theme/TextStyle.swift new file mode 100644 index 000000000..ceff5a5eb --- /dev/null +++ b/Classes/Voip/Theme/TextStyle.swift @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import UIKit + +struct TextStyle { + var fgColor:LightDarkColor + var bgColor:LightDarkColor + var allCaps:Bool + var align:NSTextAlignment + var font:String + var size:Float + + func boldEd() -> TextStyle { + return self.font.contains("Bold") ? self : TextStyle(fgColor: self.fgColor,bgColor: self.bgColor,allCaps: self.allCaps,align: self.align,font: self.font.replacingOccurrences(of: "Regular", with: "Bold"), size: self.size) + } +} + + +extension UILabel { + func applyStyle(_ style:TextStyle) { + textColor = style.fgColor.get() + backgroundColor = style.bgColor.get() + if (style.allCaps) { + text = self.text?.uppercased() + tag = 1 + } + textAlignment = style.align + let fontSizeMultiplier: Float = (UIDevice.ipad() ? 1.25 : UIDevice.is5SorSEGen1() ? 0.9 : 1.0) + font = UIFont.init(name: style.font, size: CGFloat(style.size*fontSizeMultiplier)) + } +} + +extension UIButton { + func applyTitleStyle(_ style:TextStyle) { + titleLabel?.applyStyle(style) + if (style.allCaps) { + setTitle(self.title(for: .normal)?.uppercased(), for: .normal) + tag = 1 + } + setTitleColor(style.fgColor.get(), for: .normal) + contentHorizontalAlignment = style.align == .left ? .left : style.align == .center ? .center : style.align == .right ? .right : .left + } +} diff --git a/Classes/Voip/Theme/VoipTexts.swift b/Classes/Voip/Theme/VoipTexts.swift new file mode 100644 index 000000000..4df37ec4d --- /dev/null +++ b/Classes/Voip/Theme/VoipTexts.swift @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import UIKit + +class VoipTexts { // From android key names. Added intentionnally with NSLocalizedString calls for each key, so it can be picked up by translation system (Weblate or Xcode). + + static let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String + + // Calls + static let call_incoming_title = NSLocalizedString("Incoming Call",comment:"") + static let call_outgoing_title = NSLocalizedString("Outgoing Call",comment:"") + static let call_notification_paused = NSLocalizedString("Paused call",comment:"") + static let call_notification_outgoing = NSLocalizedString("Outgoing call",comment:"") + static let call_notification_active = NSLocalizedString("Call running",comment:"") + static let call_error_declined = NSLocalizedString("Call has been declined",comment:"") + static let call_error_user_busy = NSLocalizedString("User is busy",comment:"") + static let call_error_user_not_found = NSLocalizedString("User hasn't been found",comment:"") + static let call_error_incompatible_media_params = NSLocalizedString("Incompatible media parameters",comment:"") + static let call_error_network_unreachable = NSLocalizedString("Network is unreachable",comment:"") + static let call_error_io_error = NSLocalizedString("Service unavailable or network error",comment:"") + static let call_error_server_timeout = NSLocalizedString("Server timeout",comment:"") + static let call_error_temporarily_unavailable = NSLocalizedString("Temporarily unavailable",comment:"") + static let call_error_generic = NSLocalizedString("Error: %s",comment:"") + static let call_video_update_requested_dialog = NSLocalizedString("Correspondent would like to turn the video on",comment:"") + static let call_action_participants_list = NSLocalizedString("Participants list",comment:"") + static let call_action_chat = NSLocalizedString("Chat",comment:"") + static let call_action_calls_list = NSLocalizedString("Calls list",comment:"") + static let call_action_numpad = NSLocalizedString("Numpad",comment:"") + static let call_action_change_conf_layout = NSLocalizedString("Change layout",comment:"") + static let call_action_transfer_call = NSLocalizedString("Transfer call",comment:"") + static let call_action_add_call = NSLocalizedString("Start new call",comment:"") + + static let call_action_statistics = NSLocalizedString("Call statistics",comment:"") + static let call_context_action_resume = NSLocalizedString("Resume call",comment:"") + static let call_context_action_pause = NSLocalizedString("Pause call",comment:"") + static let call_context_action_transfer = NSLocalizedString("Transfer call",comment:"") + static let call_context_action_answer = NSLocalizedString("Answer call",comment:"") + static let call_context_action_hangup = NSLocalizedString("Terminate call",comment:"") + static let call_remote_recording = NSLocalizedString("This call is being recorded.",comment:"") + static let call_remotely_paused_title = NSLocalizedString("Call has been paused by remote.",comment:"") + + // Conference + static let conference_schedule_title = NSLocalizedString("Start a conference",comment:"") + static let conference_schedule_later = NSLocalizedString("Do you want to schedule this conference for later?",comment:"") + static let conference_schedule_mandatory_field = NSLocalizedString("Mandatory",comment:"") + static let conference_schedule_subject_title = NSLocalizedString("Subject",comment:"") + static let conference_schedule_subject_hint = NSLocalizedString("Conference subject",comment:"") + static let conference_schedule_address_title = NSLocalizedString("Conference address",comment:"") + static let conference_schedule_description_title = NSLocalizedString("Add a description",comment:"") + static let conference_schedule_description_hint = NSLocalizedString("Description",comment:"") + static let conference_schedule_date = NSLocalizedString("Date",comment:"") + static let conference_schedule_time = NSLocalizedString("Time",comment:"") + static let conference_schedule_duration = NSLocalizedString("Duration",comment:"") + static let conference_schedule_timezone = NSLocalizedString("Timezone",comment:"") + static let conference_schedule_send_invite_chat = NSLocalizedString("Send invite via \(appName)",comment:"") + static let conference_schedule_send_invite_email = NSLocalizedString("Send invite via email",comment:"") + static let conference_schedule_encryption = NSLocalizedString("Would you like to encrypt the conference?",comment:"") + static let conference_schedule_send_invite_chat_summary = NSLocalizedString("Invite will be sent out from my \(appName) account",comment:"") + static let conference_schedule_participants_list = NSLocalizedString("Participants list",comment:"") + static let conference_schedule_summary = NSLocalizedString("Conference info",comment:"") + static let conference_schedule_create = NSLocalizedString("Create conference",comment:"") + static let conference_schedule = NSLocalizedString("Schedule conference",comment:"") + static let conference_schedule_address_copied_to_clipboard = NSLocalizedString("Conference address copied into clipboard",comment:"") + static let conference_schedule_creation_failure = NSLocalizedString("Failed to create conference!",comment:"") + static let conference_schedule_info_not_sent_to_participant = NSLocalizedString("Failed to send conference info to a participant",comment:"") + static let conference_paused_title = NSLocalizedString("You are currently out of the conference.",comment:"") + static let conference_paused_subtitle = NSLocalizedString("Click on play button to join it back.",comment:"") + static let conference_default_title = NSLocalizedString("Remote conference",comment:"") + static let conference_local_title = NSLocalizedString("Local conference",comment:"") + static let conference_invite_title = NSLocalizedString("Conference invite:",comment:"") + static let conference_description_title = NSLocalizedString("Description:",comment:"") + static let conference_invite_join = NSLocalizedString("Join",comment:"") + static let conference_invite_participants_count = NSLocalizedString("%d participants",comment:"") + static let conference_display_mode_mosaic = NSLocalizedString("Mosaic mode",comment:"") + static let conference_display_mode_active_speaker = NSLocalizedString("Active speaker mode",comment:"") + static let conference_display_no_active_speaker = NSLocalizedString("No active speaker",comment:"") + static let conference_waiting_room_start_call = NSLocalizedString("Start",comment:"") + static let conference_waiting_room_cancel_call = NSLocalizedString("Cancel",comment:"") + static let conference_scheduled = NSLocalizedString("Conferences",comment:"") + static let conference_too_many_participants_for_mosaic_layout = NSLocalizedString("You can't change conference layout as there is too many participants",comment:"") + static let conference_participant_paused = NSLocalizedString("(paused)",comment:"") + + + // Call Stats + + static let call_stats_audio = "Audio" + static let call_stats_video = "Video" + static let call_stats_codec = "Codec:" + static let call_stats_ip = "IP Family:" + static let call_stats_upload = "Upload bandwidth:" + static let call_stats_download = "Download bandwidth:" + static let call_stats_estimated_download = "Estimated download bandwidth:" + static let call_stats_ice = "ICE connectivity:" + static let call_stats_video_resolution_sent = "Sent video resolution:" + static let call_stats_video_resolution_received = "Received video resolution:" + static let call_stats_video_fps_sent = "Sent video fps:" + static let call_stats_video_fps_received = "Received video fps:" + static let call_stats_sender_loss_rate = "Sender loss rate:" + static let call_stats_receiver_loss_rate = "Receiver loss rate:" + static let call_stats_jitter_buffer = "Jitter buffer:" + static let call_stats_encoder_name = "Encoder:" + static let call_stats_decoder_name = "Decoder:" + static let call_stats_player_filter = "Player filter:" + static let call_stats_capture_filter = "Capture filter:" + + + // Added in iOS + static let camera_required_for_video = NSLocalizedString("Camera use is not Authorized for \(appName). This permission is required to activate Video.",comment:"") + static let ok = NSLocalizedString("ok",comment:"") + static let cancel = NSLocalizedString("cancel",comment:"") + + static let dialog_accept = NSLocalizedString("Accept",comment:"") + static let dialog_decline = NSLocalizedString("Decline",comment:"") + + // Participants list : + static let chat_room_group_info_admin = NSLocalizedString("Admin",comment:"") + + +} diff --git a/Classes/Voip/Theme/VoipTheme.swift b/Classes/Voip/Theme/VoipTheme.swift new file mode 100644 index 000000000..1a5d77d9d --- /dev/null +++ b/Classes/Voip/Theme/VoipTheme.swift @@ -0,0 +1,342 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import UIKit + +class VoipTheme { // Names & values replicated from Android + + // Voip Colors + static let voip_gray_blue_color = UIColor(hex:"#798791") + static let voip_light_gray = UIColor(hex:"#D0D8DE") + static let voip_dark_gray = UIColor(hex:"#4B5964") + static let voip_gray = UIColor(hex:"#96A5B1") + static let voip_gray_background = UIColor(hex:"#D8D8D8") + static let voip_call_record_background = UIColor(hex:"#EBEBEB") + static let voip_calls_list_inactive_background = UIColor(hex:"#F0F1F2") + static let voip_translucent_popup_background = UIColor(hex:"#A64B5964") + static let voip_translucent_popup_alt_background = UIColor(hex:"#E64B5964") + static let voip_numpad_background = UIColor(hex:"#E4E4E4") + static let voip_contact_avatar_background_alt = UIColor(hex:"#AFAFAF") + static let voip_contact_avatar_calls_list = UIColor(hex:"#A1A1A1") + static let voip_conference_participant_paused_background = UIColor(hex:"#303030") + static let voip_drawable_color = UIColor(hex:"#A6B2BC") + static let voip_dark_color = UIColor(hex:"#252E35") + static let voip_dark_color2 = UIColor(hex:"#3F464B") + static let voip_dark_color3 = UIColor(hex:"#475663") + static let voip_dark_color4 = UIColor(hex:"#2D3841") + + // General colors (used by VoIP) + + static let primary_color = UIColor(hex:"#ff5e00") + static let primary_dark_color = UIColor(hex:"#e65000") + static let green_color = UIColor(hex:"#96c11f") + static let dark_green_color = UIColor(hex:"#7d9f21") + static let toolbar_color = UIColor(hex:"#e1e1e1") + static let form_field_gray_background = UIColor(hex:"#F7F7F7") + static let light_grey_color = UIColor(hex:"#c4c4c4") + static let header_background_color = UIColor(hex:"#f3f3f3") + static let dark_grey_color = UIColor(hex:"#444444") + + // Light / Dark variations + static let voipBackgroundColor = LightDarkColor(voip_gray_blue_color,voip_dark_color) + static let voipBackgroundBWColor = LightDarkColor(UIColor.white,voip_dark_color) + static let voipParticipantBackgroundColor = LightDarkColor(voip_gray_background,voip_dark_color2) + static let voipExtraButtonsBackgroundColor = LightDarkColor(voip_gray,voip_dark_color3) + static let voipToolbarBackgroundColor = LightDarkColor(toolbar_color,voip_dark_color4) + static let voipDrawableColor = LightDarkColor(voip_dark_gray,.white) + static let voipDrawableColorHighlighted = LightDarkColor(voip_gray,voip_gray) + static let voipTextColor = LightDarkColor(voip_dark_gray,UIColor.white) + static let voipFormBackgroundColor = LightDarkColor(form_field_gray_background,voip_dark_color4) + static let voipFormFieldBackgroundColor = LightDarkColor(light_grey_color,voip_dark_color4) + static let voipFormDisabledFieldBackgroundColor = LightDarkColor(header_background_color,voip_dark_color4) + static let primarySubtextLightColor = LightDarkColor(light_grey_color,toolbar_color) + static let primaryTextColor = LightDarkColor(dark_grey_color,.white) + + + + + // Text styles + static let fontName = "Roboto" + static let call_header_title = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Bold", size: 18.0) + static let call_header_subtitle = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 14.0) + static let call_generated_avatar_large = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .center, font: fontName+"-Regular", size: 53.0) + static let call_generated_avatar_medium = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .center, font: fontName+"-Regular", size: 27.0) + static let call_generated_avatar_small = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .center, font: fontName+"-Regular", size: 16.0) + + static let dtmf_label = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 30.0) + static let call_remote_name = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Regular", size: 18.0) + static let call_remote_recording = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 16.0) + static let call_or_conference_title = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Bold", size: 30.0) + static let call_or_conference_subtitle = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Bold", size: 20.0) + static let basic_popup_title = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 21.0) + static let big_button = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .center, font: fontName+"-Bold", size: 17.0) + + static let call_display_name_duration = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Regular", size: 17.0) + static let call_sip_address = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Regular", size: 14.0) + static let voip_extra_button = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 12.0) + static let unread_count_font = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 11.0) + static let call_stats_font = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 12.0) + static let call_stats_font_title = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 18.0) + static let calls_list_header_font = TextStyle(fgColor: voipTextColor, bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 20.0) + + static let call_list_active_name_font = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 18.0) + static let call_list_active_sip_uri_font = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 12.0) + + static let call_list_name_font = TextStyle(fgColor: voipTextColor, bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 18.0) + static let call_list_sip_uri_font = TextStyle(fgColor: voipTextColor, bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 12.0) + + static let call_context_menu_item_font = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .left, font: fontName+"-Bold", size: 16.0) + + static let conference_participant_admin_label = TextStyle(fgColor: primarySubtextLightColor, bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Bold", size: 13.0) + static let conference_participant_name_font = TextStyle(fgColor: LightDarkColor(dark_grey_color,dark_grey_color), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 18.0) + static let conference_participant_sip_uri_font = TextStyle(fgColor: LightDarkColor(primary_color,primary_color), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 12.0) + static let conference_participant_name_font_grid = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Bold", size: 15.0) + static let conference_participant_name_font_as = TextStyle(fgColor: LightDarkColor(.white,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Bold", size: 12.0) + + + static let conference_mode_title = TextStyle(fgColor: LightDarkColor(dark_grey_color,dark_grey_color), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .left, font: fontName+"-Regular", size: 17.0) + static let conference_mode_title_selected = conference_mode_title.boldEd() + + + + // Buttons Background (State colors) + + static let button_background = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.highlighted.rawValue : LightDarkColor(voip_dark_gray,voip_dark_gray), + UIButton.State.selected.union(.highlighted).rawValue : LightDarkColor(voip_dark_gray,voip_dark_gray), + UIButton.State.disabled.rawValue : LightDarkColor(voip_light_gray,voip_light_gray) + ] + + static let button_background_reverse = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_dark_gray,voip_dark_gray), + UIButton.State.highlighted.rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.selected.union(.highlighted).rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.disabled.rawValue : LightDarkColor(voip_light_gray,voip_light_gray) + ] + + static let button_call_recording_background = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_call_record_background,voip_call_record_background), + UIButton.State.selected.rawValue : LightDarkColor(primary_color,primary_color), + UIButton.State.disabled.rawValue : LightDarkColor(voip_light_gray,voip_light_gray) + ] + + static let button_toggle_background = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.selected.rawValue : LightDarkColor(primary_color,primary_color), + UIButton.State.highlighted.rawValue : LightDarkColor(voip_dark_gray,voip_dark_gray), + UIButton.State.disabled.rawValue : LightDarkColor(voip_light_gray,voip_light_gray) + ] + + static let button_toggle_background_reverse = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_dark_gray,voip_dark_gray), + UIButton.State.selected.rawValue : LightDarkColor(primary_color,primary_color), + UIButton.State.highlighted.rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.disabled.rawValue : LightDarkColor(voip_light_gray,voip_light_gray) + ] + + + + static let primary_colors_background = [ + UIButton.State.normal.rawValue : LightDarkColor(primary_color,primary_color), + UIButton.State.highlighted.rawValue : LightDarkColor(primary_dark_color,primary_dark_color), + ] + + static let primary_colors_background_gray = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.highlighted.rawValue : LightDarkColor(voip_dark_gray,voip_dark_gray), + ] + + static let numpad_digit_background = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_numpad_background,voip_numpad_background), + UIButton.State.highlighted.rawValue : LightDarkColor(voip_gray_blue_color,voip_gray_blue_color) + ] + + static let button_round_background = [ + UIButton.State.normal.rawValue : LightDarkColor(primary_color,primary_color), + UIButton.State.highlighted.rawValue : LightDarkColor(dark_grey_color,dark_grey_color), + UIButton.State.disabled.rawValue : LightDarkColor(voip_light_gray,voip_light_gray) + ] + + static let button_call_context_menu_background = [ + UIButton.State.normal.rawValue : LightDarkColor(voip_gray,voip_gray), + UIButton.State.highlighted.rawValue : LightDarkColor(primary_color,primary_color), + ] + + // Buttons Icons (State colors) + Background colors + + + static let call_terminate = ButtonTheme( + tintableStateIcons:[UIButton.State.normal.rawValue : TintableIcon(name: "voip_hangup",tintColor: LightDarkColor(.white,.white))], + backgroundStateColors: [ + UIButton.State.normal.rawValue : LightDarkColor(primary_color,primary_color), + UIButton.State.highlighted.rawValue : LightDarkColor(primary_dark_color,primary_dark_color) + ]) + + static let call_record = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_call_record",tintColor: LightDarkColor(voip_gray_blue_color,voip_gray_blue_color)), + UIButton.State.selected.rawValue : TintableIcon(name: "voip_call_record",tintColor: LightDarkColor(.white,.white)), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_call_record",tintColor: LightDarkColor(primary_color,primary_color)), + ], + backgroundStateColors: button_call_recording_background) + + static let call_pause = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_pause",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_toggle_background) + + static let call_accept = ButtonTheme( + tintableStateIcons:[UIButton.State.normal.rawValue : TintableIcon(name: "voip_call",tintColor: LightDarkColor(.white,.white))], + backgroundStateColors: [ + UIButton.State.normal.rawValue : LightDarkColor(green_color,green_color), + UIButton.State.highlighted.rawValue : LightDarkColor(dark_green_color,dark_green_color) + ]) + + static let call_mute = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_micro_on",tintColor: LightDarkColor(.white,.white)), + UIButton.State.selected.rawValue : TintableIcon(name: "voip_micro_off",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_background_reverse) + + static let call_speaker = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_speaker_off",tintColor: LightDarkColor(.white,.white)), + UIButton.State.selected.rawValue : TintableIcon(name: "voip_speaker_on",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_background_reverse) + + static let call_audio_route = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_audio_routes",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_toggle_background_reverse) + + + static let call_video = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_camera_off",tintColor: LightDarkColor(.white,.white)), + UIButton.State.selected.rawValue : TintableIcon(name: "voip_camera_on",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_background_reverse) + + static let call_numpad = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_call_numpad",tintColor: LightDarkColor(.white,.white)), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_call_numpad",tintColor: LightDarkColor(voip_dark_gray,voip_dark_gray)), + UIButton.State.disabled.rawValue : TintableIcon(name: "voip_call_numpad",tintColor: LightDarkColor(voip_light_gray,voip_light_gray)), + ], + backgroundStateColors: button_background) + + // AUdio routes + static let route_bluetooth = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_bluetooth",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_toggle_background_reverse) + + static let route_earpiece = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_earpiece",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_toggle_background_reverse) + + static let route_speaker = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_speaker_on",tintColor: LightDarkColor(.white,.white)), + ], + backgroundStateColors: button_toggle_background_reverse) + + + + static let call_more = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_call_more",tintColor: LightDarkColor(.white,.white)) + ], + backgroundStateColors: button_background) + + + static let voip_cancel = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_cancel",tintColor: voipDrawableColor), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_cancel",tintColor: voipDrawableColorHighlighted) + ], + backgroundStateColors: [UIButton.State.normal.rawValue : LightDarkColor(.clear,.clear)]) + + + static let voip_cancel_light = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_cancel",tintColor: LightDarkColor(voip_gray,voip_gray)), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_cancel",tintColor: LightDarkColor(voip_dark_gray,voip_dark_gray)) + ], + backgroundStateColors: [UIButton.State.normal.rawValue : LightDarkColor(.clear,.clear)]) + + static let voip_edit = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_edit",tintColor: LightDarkColor(dark_grey_color,dark_grey_color)), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_edit",tintColor: voipDrawableColorHighlighted) + ], + backgroundStateColors: [UIButton.State.normal.rawValue : LightDarkColor(.clear,.clear)]) + + static let radio_button = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_radio_off",tintColor: LightDarkColor(dark_grey_color,dark_grey_color)), + UIButton.State.selected.rawValue : TintableIcon(name: "voip_radio_on",tintColor: LightDarkColor(primary_color,primary_color)) + ], + backgroundStateColors: [UIButton.State.normal.rawValue : LightDarkColor(.clear,.clear)]) + + static let voip_call_list_active_menu = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_call_list_menu",tintColor: LightDarkColor(.white,.white)), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_call_list_menu",tintColor: voipDrawableColorHighlighted) + ], + backgroundStateColors: [UIButton.State.normal.rawValue : LightDarkColor(.clear,.clear)]) + + static let voip_call_list_menu = ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: "voip_call_list_menu",tintColor: voipTextColor), + UIButton.State.highlighted.rawValue : TintableIcon(name: "voip_call_list_menu",tintColor: voipDrawableColorHighlighted) + ], + backgroundStateColors: [UIButton.State.normal.rawValue : LightDarkColor(.clear,.clear)]) + + + static func call_action(_ iconName:String) -> ButtonTheme { + return ButtonTheme( + tintableStateIcons:[ + UIButton.State.normal.rawValue : TintableIcon(name: iconName,tintColor: LightDarkColor(.white,.white)), + UIButton.State.highlighted.rawValue : TintableIcon(name: iconName,tintColor: LightDarkColor(voip_dark_gray,voip_dark_gray)), + UIButton.State.disabled.rawValue : TintableIcon(name: iconName,tintColor: LightDarkColor(voip_light_gray,voip_light_gray)), + ], + backgroundStateColors: [:]) + } + + static let call_add = ButtonTheme( + tintableStateIcons:[UIButton.State.normal.rawValue : TintableIcon(name: "voip_call_add",tintColor: LightDarkColor(.white,.white))], + backgroundStateColors: button_round_background) + + static let call_merge = ButtonTheme( + tintableStateIcons:[UIButton.State.normal.rawValue : TintableIcon(name: "voip_merge_calls",tintColor: LightDarkColor(.white,.white))], + backgroundStateColors: button_round_background) + +} + + diff --git a/Classes/Voip/Views/CompositeViewControllers/ActiveCallOrConferenceView.swift b/Classes/Voip/Views/CompositeViewControllers/ActiveCallOrConferenceView.swift new file mode 100644 index 000000000..f85be7062 --- /dev/null +++ b/Classes/Voip/Views/CompositeViewControllers/ActiveCallOrConferenceView.swift @@ -0,0 +1,348 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import linphonesw + + +class ActiveCallOrConferenceView: UIViewController, UICompositeViewDelegate { // Replaces CallView + + // Layout constants + let content_inset = 12.0 + + var callPausedByRemoteView : PausedCallOrConferenceView? = nil + var conferencePausedView : PausedCallOrConferenceView? = nil + + var currentCallView : ActiveCallView? = nil + var conferenceGridView: VoipConferenceGridView? = nil + var conferenceActiveSpeakerView: VoipConferenceActiveSpeakerView? = nil + + let extraButtonsView = VoipExtraButtonsView() + var numpadView : NumpadView? = nil + var currentCallStatsVew : CallStatsView? = nil + var shadingMask = UIView() + var videoAcceptDialog : VoipDialog? = nil + var dismissableView : DismissableView? = nil + var participantsListView : ParticipantsListView? = nil + + var audioRoutesView : AudioRoutesView? = nil + + + static let compositeDescription = UICompositeViewDescription(ActiveCallOrConferenceView.self, statusBar: StatusBarView.self, tabBar: nil, sideMenu: nil, fullscreen: false, isLeftFragment: false,fragmentWith: nil) + static func compositeViewDescription() -> UICompositeViewDescription! { return compositeDescription } + func compositeViewDescription() -> UICompositeViewDescription! { return type(of: self).compositeDescription } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = VoipTheme.voipBackgroundColor.get() + + // Hangup + let hangup = CallControlButton(width: 65, imageInset:IncomingOutgoingCommonView.answer_decline_inset, buttonTheme: VoipTheme.call_terminate, onClickAction: { + ControlsViewModel.shared.hangUp() + }) + view.addSubview(hangup) + hangup.alignParentLeft(withMargin:SharedLayoutConstants.margin_call_view_side_controls_buttons).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + + // Controls + let controlsView = ControlsView(showVideo: true) + view.addSubview(controlsView) + controlsView.alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).centerX().done() + + + // Container fiew + let fullScreenMutableContainerView = UIView() + fullScreenMutableContainerView.backgroundColor = .clear + self.view.addSubview(fullScreenMutableContainerView) + fullScreenMutableContainerView.matchParentSideBorders(insetedByDx: content_inset).matchParentHeight().alignAbove(view:controlsView,withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + // Current (Single) Call (VoipCallView) + currentCallView = ActiveCallView() + currentCallView!.isHidden = true + fullScreenMutableContainerView.addSubview(currentCallView!) + CallsViewModel.shared.currentCallData.readCurrentAndObserve { (currentCallData) in + self.updateNavigation() + self.currentCallView!.isHidden = currentCallData == nil || ConferenceViewModel.shared.isInConference.value == true + self.currentCallView!.callData = currentCallData != nil ? currentCallData! : nil + currentCallData??.isRemotelyPaused.readCurrentAndObserve { remotelyPaused in + self.callPausedByRemoteView?.isHidden = remotelyPaused != true + } + if (currentCallData == nil) { + self.callPausedByRemoteView?.isHidden = true + } else { + currentCallData??.isIncoming.readCurrentAndObserve { _ in self.updateNavigation() } + currentCallData??.isOutgoing.readCurrentAndObserve { _ in self.updateNavigation() } + } + self.extraButtonsView.isHidden = true + self.conferencePausedView?.isHidden = true + } + + currentCallView!.matchParentDimmensions().done() + + // Paused by remote (Call) + callPausedByRemoteView = PausedCallOrConferenceView(iconName: "voip_conference_paused_big",titleText: VoipTexts.call_remotely_paused_title,subTitleText: nil) + view.addSubview(callPausedByRemoteView!) + callPausedByRemoteView?.matchParentSideBorders().matchParentHeight().alignAbove(view:controlsView,withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + callPausedByRemoteView?.isHidden = true + + // Conference paused + conferencePausedView = PausedCallOrConferenceView(iconName: "voip_conference_paused_big",titleText: VoipTexts.conference_paused_title,subTitleText: VoipTexts.conference_paused_subtitle) + view.addSubview(conferencePausedView!) + conferencePausedView?.matchParentSideBorders().matchParentHeight().alignAbove(view:controlsView,withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + conferencePausedView?.isHidden = true + + // Conference grid + conferenceGridView = VoipConferenceGridView() + fullScreenMutableContainerView.addSubview(conferenceGridView!) + conferenceGridView?.matchParentDimmensions().done() + conferenceGridView?.isHidden = true + ConferenceViewModel.shared.isInConference.readCurrentAndObserve { (isInConference) in + self.updateNavigation() + if (isInConference == true) { + self.currentCallView!.isHidden = true + self.extraButtonsView.isHidden = true + self.conferencePausedView?.isHidden = true + self.conferenceGridView!.isHidden = false + self.conferenceActiveSpeakerView!.isHidden = true + self.conferenceGridView?.conferenceViewModel = ConferenceViewModel.shared + } else { + self.conferenceGridView?.isHidden = true + } + } + + // Conference active speaker + conferenceActiveSpeakerView = VoipConferenceActiveSpeakerView() + fullScreenMutableContainerView.addSubview(conferenceActiveSpeakerView!) + conferenceActiveSpeakerView?.matchParentDimmensions().done() + conferenceActiveSpeakerView?.isHidden = true + + // Conference mode switching + + ConferenceViewModel.shared.conferenceDisplayMode.readCurrentAndObserve { (conferenceMode) in + if (ConferenceViewModel.shared.isInConference.value == true) { + self.conferenceGridView!.isHidden = conferenceMode != .Grid + self.conferenceActiveSpeakerView!.isHidden = conferenceMode != .ActiveSpeaker + self.conferenceActiveSpeakerView?.conferenceViewModel = ConferenceViewModel.shared + } else { + self.conferenceActiveSpeakerView?.isHidden = true + } + } + + ConferenceViewModel.shared.isInConference.readCurrentAndObserve { (isInConference) in + self.updateNavigation() + } + + // Calls List + ControlsViewModel.shared.goToCallsListEvent.observe { (_) in + self.dismissableView = CallsListView() + self.view.addSubview(self.dismissableView!) + self.dismissableView?.matchParentDimmensions().done() + } + + // Conference Participants List + ControlsViewModel.shared.goToConferenceParticipantsListEvent.observe { (_) in + self.participantsListView = ParticipantsListView() + self.view.addSubview(self.participantsListView!) + self.participantsListView?.matchParentDimmensions().done() + } + + // Goto chat + ControlsViewModel.shared.goToChatEvent.observe { (_) in + self.goToChat() + } + + // Conference mode selection + ControlsViewModel.shared.goToConferenceLayoutSettings.observe { (_) in + self.dismissableView = VoipConferenceDisplayModeSelectionView() + self.view.addSubview(self.dismissableView!) + self.dismissableView?.matchParentDimmensions().done() + let activeDisplayMode = ConferenceViewModel.shared.conferenceDisplayMode.value! + let indexPath = IndexPath(row: activeDisplayMode == .Grid ? 0 : 1, section: 0) + (self.dismissableView as! VoipConferenceDisplayModeSelectionView).optionsListView.selectRow(at:indexPath, animated: true, scrollPosition: .bottom) + + } + + // Shading mask, everything before will be shaded upon displaying of the mask + shadingMask.backgroundColor = VoipTheme.voip_translucent_popup_background + shadingMask.isHidden = true + self.view.addSubview(shadingMask) + shadingMask.matchParentDimmensions().done() + + // Extra Buttons + let showextraButtons = CallControlButton(imageInset:IncomingOutgoingCommonView.answer_decline_inset, buttonTheme: VoipTheme.call_more, onClickAction: { + self.showModalSubview(view: self.extraButtonsView) + ControlsViewModel.shared.audioRoutesSelected.value = false + }) + view.addSubview(showextraButtons) + showextraButtons.alignParentRight(withMargin:SharedLayoutConstants.margin_call_view_side_controls_buttons).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + let boucingCounter = BouncingCounter(inButton:showextraButtons) + view.addSubview(boucingCounter) + boucingCounter.dataSource = CallsViewModel.shared.chatAndCallsCount + + view.addSubview(extraButtonsView) + extraButtonsView.matchParentSideBorders(insetedByDx: content_inset).alignParentBottom().done() + ControlsViewModel.shared.hideExtraButtons.readCurrentAndObserve { (_) in + self.hideModalSubview(view: self.extraButtonsView) + } + self.view.onClick { + if (!self.extraButtonsView.isHidden) { + self.hideModalSubview(view: self.extraButtonsView) + } + ControlsViewModel.shared.audioRoutesSelected.value = false + } + + // Numpad + ControlsViewModel.shared.numpadVisible.readCurrentAndObserve { (visible) in + if (visible == true && CallsViewModel.shared.currentCallData.value != nil ) { + self.numpadView?.removeFromSuperview() + self.shadingMask.isHidden = false + self.numpadView = NumpadView(superView: self.view,callData: CallsViewModel.shared.currentCallData.value!!, onDismissAction: { + self.numpadView?.removeFromSuperview() + self.shadingMask.isHidden = true + }) + } + } + + // Call stats + ControlsViewModel.shared.callStatsVisible.readCurrentAndObserve { (visible) in + if (visible == true && CallsViewModel.shared.currentCallData.value != nil ) { + self.currentCallStatsVew?.removeFromSuperview() + self.shadingMask.isHidden = false + self.currentCallStatsVew = CallStatsView(superView: self.view,callData: CallsViewModel.shared.currentCallData.value!!, onDismissAction: { + self.currentCallStatsVew?.removeFromSuperview() + self.shadingMask.isHidden = true + }) + } + } + + // Video activation dialog request + CallsViewModel.shared.callUpdateEvent.observe { (call) in + let core = Core.get() + if (call?.state == .StreamsRunning) { + self.videoAcceptDialog?.removeFromSuperview() + self.videoAcceptDialog = nil + } else if (call?.state == .UpdatedByRemote) { + if (core.videoCaptureEnabled || core.videoDisplayEnabled) { + 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) + self.videoAcceptDialog = VoipDialog(message:VoipTexts.call_video_update_requested_dialog, givenButtons: [cancel,accept]) + self.videoAcceptDialog?.show() + } + } else { + Log.w("[Call] Video display & capture are disabled, don't show video dialog") + } + } + } + + // Audio Routes + audioRoutesView = AudioRoutesView() + view.addSubview(audioRoutesView!) + audioRoutesView!.alignBottomWith(otherView: controlsView).done() + ControlsViewModel.shared.audioRoutesSelected.readCurrentAndObserve { (audioRoutesSelected) in + self.audioRoutesView!.isHidden = audioRoutesSelected != true + } + audioRoutesView!.alignAbove(view:controlsView,withMargin:SharedLayoutConstants.buttons_bottom_margin).centerX().done() + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(true) + extraButtonsView.refresh() + ControlsViewModel.shared.callStatsVisible.notifyValue() + CallsViewModel.shared.currentCallData.notifyValue() + ControlsViewModel.shared.audioRoutesSelected.value = false + } + + override func viewWillDisappear(_ animated: Bool) { + dismissableView?.removeFromSuperview() + dismissableView = nil + + participantsListView?.removeFromSuperview() + participantsListView = nil + + ControlsViewModel.shared.fullScreenMode.value = false + super.viewWillDisappear(animated) + } + + func showModalSubview(view:UIView) { + view.isHidden = false + shadingMask.isHidden = false + } + func hideModalSubview(view:UIView) { + view.isHidden = true + shadingMask.isHidden = true + } + + func updateNavigation() { + if (Core.get().callsNb == 0) { + PhoneMainView.instance().popView(self.compositeViewDescription()) + } else { + if let data = CallsViewModel.shared.currentCallData.value { + if (data?.isOutgoing.value == true || data?.isIncoming.value == true) { + PhoneMainView.instance().popView(self.compositeViewDescription()) + } else { + PhoneMainView.instance().changeCurrentView(self.compositeViewDescription()) + } + } else { + PhoneMainView.instance().changeCurrentView(self.compositeViewDescription()) + } + } + } + + func goToChat() { + let core = Core.get() + guard + let localSipUri = core.defaultAccount?.params?.identityAddress?.asStringUriOnly(), + let remoteSipUri = ConferenceViewModel.shared.isInConference.value == true ? ConferenceViewModel.shared.conferenceAddress.value?.asStringUriOnly() : core.currentCall?.remoteAddress?.asStringUriOnly(), + let localAddress = try?Factory.Instance.createAddress(addr: localSipUri), + let remoteSipAddress = try?Factory.Instance.createAddress(addr: remoteSipUri), + let chatRoomParams = try?core.createDefaultChatRoomParams() + else { + return + } + + var chatRoom = core.searchChatRoom(params: nil, localAddr: localAddress, remoteAddr: remoteSipAddress, participants: []) + if (chatRoom == nil) { + chatRoom = core.searchChatRoom(params: nil, localAddr: localAddress, remoteAddr: nil, participants: [remoteSipAddress]) + } + if (chatRoom == nil) { + Log.w("[Call] Failed to find existing chat room for local address \(localSipUri) and remote address \(remoteSipUri)") + + // TODO: configure chat room params + if (ConferenceViewModel.shared.isInConference.value == true) { + // TODO: compute conference participants addresses list + } else { + chatRoom = try?core.createChatRoom(params: chatRoomParams, localAddr: localAddress, participants: [remoteSipAddress]) + } + } + + if (chatRoom != nil) { + PhoneMainView.instance().go(to: chatRoom?.getCobject) + } else { + Log.w("[Call] Failed to create chat room for local address \(localSipUri) and remote address \(remoteSipUri)") + } + + } + + +} diff --git a/Classes/Voip/Views/CompositeViewControllers/IncomingCallView.swift b/Classes/Voip/Views/CompositeViewControllers/IncomingCallView.swift new file mode 100644 index 000000000..6009bf0a5 --- /dev/null +++ b/Classes/Voip/Views/CompositeViewControllers/IncomingCallView.swift @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import linphonesw + +@objc class IncomingCallView: IncomingOutgoingCommonView, UICompositeViewDelegate { + + // Layout constants + let buttons_distance_from_center_x = 38 + + static let compositeDescription = UICompositeViewDescription(IncomingCallView.self, statusBar: nil, tabBar: nil, sideMenu: nil, fullscreen: true, isLeftFragment: false,fragmentWith: nil) + static func compositeViewDescription() -> UICompositeViewDescription! { return compositeDescription } + func compositeViewDescription() -> UICompositeViewDescription! { return type(of: self).compositeDescription } + + var earlyMediaView : UIView? = nil + + override func viewDidLoad() { + + super.viewDidLoad(forCallType: VoipTexts.call_incoming_title) + + // Accept + let accept = CallControlButton(width: CallControlButton.hungup_width, imageInset:IncomingOutgoingCommonView.answer_decline_inset, buttonTheme: VoipTheme.call_accept, onClickAction: { + self.callData.map { CallManager.instance().acceptCall(call: $0.call.getCobject, hasVideo: false)} + }) + view.addSubview(accept) + accept.centerX(withDx: buttons_distance_from_center_x).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + // Decline + let decline = CallControlButton(width: CallControlButton.hungup_width, imageInset:IncomingOutgoingCommonView.answer_decline_inset, buttonTheme: VoipTheme.call_terminate, onClickAction: { + self.callData.map { CallManager.instance().terminateCall(call: $0.call.getCobject)} + }) + view.addSubview(decline) + decline.centerX(withDx: -buttons_distance_from_center_x).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + } + + @objc override func setCall(call:OpaquePointer) { + super.setCall(call: call) + callData?.iFrameReceived.observe(onChange: { (video) in + if (video == true) { + Core.get().nativeVideoWindow = self.earlyMediaView + self.earlyMediaView?.isHidden = false + } + }) + callData?.callState.readCurrentAndObserve(onChange: { (state) in + if (ConfigManager.instance().lpConfigBoolForKey(key: "pref_accept_early_media") && state == .IncomingReceived) { + try?self.callData?.call.acceptEarlyMedia() + self.callData?.call.requestNotifyNextVideoFrameDecoded() + } + }) + callData?.isIncoming.readCurrentAndObserve { (incoming) in + if (incoming != true) { + PhoneMainView.instance().popView(self.compositeViewDescription()) + } + } + + if (ConfigManager.instance().lpConfigBoolForKey(key: "auto_answer")) { + CallManager.instance().acceptCall(call: call, hasVideo: false) // TODO check with old version for Video accept separate button - Not implemented in Android + } + } + + +} diff --git a/Classes/Voip/Views/CompositeViewControllers/OutgoingCallView.swift b/Classes/Voip/Views/CompositeViewControllers/OutgoingCallView.swift new file mode 100644 index 000000000..d2898a148 --- /dev/null +++ b/Classes/Voip/Views/CompositeViewControllers/OutgoingCallView.swift @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import linphonesw + +@objc class OutgoingCallView: IncomingOutgoingCommonView, UICompositeViewDelegate { + + // Layout constants + let numpad_icon_padding = 10.0 + + var numpadView : NumpadView? = nil + var showNumPad : CallControlButton? = nil + var shadingMask = UIView() + + + static let compositeDescription = UICompositeViewDescription(OutgoingCallView.self, statusBar: nil, tabBar: nil, sideMenu: nil, fullscreen: true, isLeftFragment: false,fragmentWith: nil) + static func compositeViewDescription() -> UICompositeViewDescription! { return compositeDescription } + func compositeViewDescription() -> UICompositeViewDescription! { return OutgoingCallView.compositeDescription } + + override func viewDidLoad() { + super.viewDidLoad(forCallType: VoipTexts.call_outgoing_title) + + // Cancel + let cancelCall = CallControlButton(width: CallControlButton.hungup_width, imageInset:IncomingOutgoingCommonView.answer_decline_inset, buttonTheme: VoipTheme.call_terminate, onClickAction: { + self.callData.map { CallManager.instance().terminateCall(call: $0.call.getCobject)} + }) + view.addSubview(cancelCall) + cancelCall.alignParentLeft(withMargin:SharedLayoutConstants.margin_call_view_side_controls_buttons).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + // Controls + let controlsView = ControlsView(showVideo: false) + view.addSubview(controlsView) + controlsView.alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).centerX().done() + + // Shading mask, everything after will be shaded upon displayed + shadingMask.backgroundColor = VoipTheme.voip_translucent_popup_background + shadingMask.isHidden = true + self.view.addSubview(shadingMask) + shadingMask.matchParentDimmensions().done() + + // Numpad + showNumPad = CallControlButton(imageInset:UIEdgeInsets(top: numpad_icon_padding, left: numpad_icon_padding, bottom: numpad_icon_padding, right: numpad_icon_padding), buttonTheme: VoipTheme.call_numpad, onClickAction: { + self.numpadView?.removeFromSuperview() + self.shadingMask.isHidden = false + self.numpadView = NumpadView(superView: self.view,callData: self.callData!, onDismissAction: { + self.numpadView?.removeFromSuperview() + self.shadingMask.isHidden = true + }) + }) + view.addSubview(showNumPad!) + showNumPad?.alignParentRight(withMargin:SharedLayoutConstants.margin_call_view_side_controls_buttons).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + showNumPad!.isHidden = true + + // Audio Routes + let audioRoutesView = AudioRoutesView() + view.addSubview(audioRoutesView) + audioRoutesView.alignBottomWith(otherView: controlsView).done() + ControlsViewModel.shared.audioRoutesSelected.readCurrentAndObserve { (audioRoutesSelected) in + audioRoutesView.isHidden = audioRoutesSelected != true + } + audioRoutesView.alignAbove(view:controlsView,withMargin:SharedLayoutConstants.buttons_bottom_margin).matchRightOf(view: controlsView, withMargin:+ControlsView.controls_button_spacing).done() + } + + + override func viewWillAppear(_ animated: Bool) { + ControlsViewModel.shared.audioRoutesSelected.value = false + super.viewWillAppear(animated) + } + + @objc override func setCall(call:OpaquePointer) { + super.setCall(call: call) + self.callData?.outgoingEarlyMedia.readCurrentAndObserve(onChange: { (outgoingEM) in + self.showNumPad!.isHidden = outgoingEM != true + }) + callData?.isOutgoing.readCurrentAndObserve { (outgoing) in + if (outgoing != true) { + PhoneMainView.instance().popView(self.compositeViewDescription()) + } + } + } + + +} diff --git a/Classes/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift b/Classes/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift new file mode 100644 index 000000000..2b8194b70 --- /dev/null +++ b/Classes/Voip/Views/Fragments/ActiveCall/ActiveCallView.swift @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class ActiveCallView: UIView { // = currentCall + + // Layout constants : + static let top_displayname_margin_top = 20.0 + let sip_address_margin_top = 4.0 + static let remote_recording_margin_top = 10.0 + static let remote_recording_height = 30 + static let bottom_displayname_margin_bottom = 10.0 + static let bottom_displayname_margin_left = 12.0 + static let center_view_margin_top = 15.0 + static let center_view_corner_radius = 20.0 + let record_pause_button_size = 40 + let record_pause_button_inset = UIEdgeInsets(top: 7, left: 7, bottom: 7, right: 7) + let record_pause_button_margin = 10.0 + static let local_video_width = 150.0 + static let local_video_margins = 15.0 + + + let displayNameTop = StyledLabel(VoipTheme.call_display_name_duration) + let duration = CallTimer(nil, VoipTheme.call_display_name_duration) + let sipAddress = StyledLabel(VoipTheme.call_sip_address) + let remotelyRecordedIndicator = RemotelyRecordingView(height: ActiveCallView.remote_recording_height,text: VoipTexts.call_remote_recording) + let avatar = Avatar(diameter: CGFloat(Avatar.diameter_for_call_views), color:VoipTheme.voipBackgroundColor, textStyle: VoipTheme.call_generated_avatar_large) + let displayNameBottom = StyledLabel(VoipTheme.call_remote_name) + var recordCallButtons : [CallControlButton] = [] + var pauseCallButtons : [CallControlButton] = [] + let remoteVideo = UIView() + let localVideo = LocalVideoView(width: local_video_width) + + var callData: CallData? = nil { + didSet { + duration.call = callData?.call + callData?.call.remoteAddress.map { + avatar.fillFromAddress(address: $0) + if let displayName = $0.addressBookEnhancedDisplayName() { + displayNameTop.text = displayName+" - " + displayNameBottom.text = displayName + } + sipAddress.text = $0.asStringUriOnly() + } + self.remotelyRecordedIndicator.isRemotelyRecorded = callData?.isRemotelyRecorded + callData?.isRecording.readCurrentAndObserve { (selected) in + self.recordCallButtons.forEach { + $0.isSelected = selected == true + } + } + callData?.isPaused.readCurrentAndObserve { (paused) in + self.pauseCallButtons.forEach { + $0.isSelected = paused == true + } + if (paused == true) { + self.localVideo.isHidden = true + } + } + + Core.get().nativeVideoWindow = remoteVideo + Core.get().nativePreviewWindow = localVideo + + ControlsViewModel.shared.isVideoEnabled.readCurrentAndObserve{ (video) in + self.remoteVideo.isHidden = video != true + self.localVideo.isHidden = video != true + self.recordCallButtons.first?.isHidden = video != true + self.pauseCallButtons.first?.isHidden = video != true + self.recordCallButtons.last?.isHidden = video == true + self.pauseCallButtons.last?.isHidden = video == true + } + + } + } + + init() { + super.init(frame: .zero) + let stack = UIStackView() + stack.distribution = .equalSpacing + stack.alignment = .bottom + stack.spacing = record_pause_button_margin + stack.axis = .vertical + + let displayNameDurationSipAddress = UIView() + + displayNameDurationSipAddress.addSubview(displayNameTop) + displayNameTop.alignParentLeft().done() + + displayNameDurationSipAddress.addSubview(duration) + duration.toRightOf(displayNameTop).alignParentRight().done() + + displayNameDurationSipAddress.addSubview(sipAddress) + sipAddress.matchParentSideBorders().alignUnder(view: displayNameTop,withMargin:sip_address_margin_top).done() + + let upperSection = UIStackView() + upperSection.distribution = .equalSpacing + upperSection.alignment = .center + upperSection.spacing = record_pause_button_margin + upperSection.axis = .horizontal + + upperSection.addArrangedSubview(displayNameDurationSipAddress) + displayNameDurationSipAddress.wrapContentY().done() + + let recordPauseView = UIStackView() + recordPauseView.spacing = record_pause_button_margin + + // Record (with video) + var recordCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_record, onClickAction: { + self.callData.map { $0.toggleRecord() } + }) + recordCallButtons.append(recordCall) + recordPauseView.addArrangedSubview(recordCall) + + // Pause (with video) + var pauseCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_pause, onClickAction: { + self.callData.map { $0.togglePause() } + }) + pauseCallButtons.append(pauseCall) + recordPauseView.addArrangedSubview(pauseCall) + upperSection.addArrangedSubview(recordPauseView) + + + stack.addArrangedSubview(upperSection) + upperSection.matchParentSideBorders().alignParentTop(withMargin:ActiveCallView.top_displayname_margin_top).done() + + + stack.addArrangedSubview(remotelyRecordedIndicator) + remotelyRecordedIndicator.matchParentSideBorders().alignUnder(view:upperSection, withMargin:ActiveCallView.remote_recording_margin_top).height(CGFloat(ActiveCallView.remote_recording_height)).done() + + // Center Section : Avatar + video + record/pause buttons + videos + let centerSection = UIView() + centerSection.layer.cornerRadius = ActiveCallView.center_view_corner_radius + centerSection.clipsToBounds = true + centerSection.backgroundColor = VoipTheme.voipParticipantBackgroundColor.get() + + // Record (w/o video) + recordCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_record, onClickAction: { + self.callData.map { $0.toggleRecord() } + }) + recordCallButtons.append(recordCall) + centerSection.addSubview(recordCall) + recordCall.alignParentLeft(withMargin:record_pause_button_margin).alignParentTop(withMargin:record_pause_button_margin).done() + + // Pause (w/o video) + pauseCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_pause, onClickAction: { + self.callData.map { $0.togglePause() } + }) + pauseCallButtons.append(pauseCall) + centerSection.addSubview(pauseCall) + pauseCall.alignParentRight(withMargin:record_pause_button_margin).alignParentTop(withMargin:record_pause_button_margin).done() + + // Avatar + centerSection.addSubview(avatar) + avatar.square(Avatar.diameter_for_call_views).center().done() + + // Remote Video Display + centerSection.addSubview(remoteVideo) + remoteVideo.isHidden = true + remoteVideo.matchParentDimmensions().done() + + // Local Video Display + centerSection.addSubview(localVideo) + localVideo.backgroundColor = .black + localVideo.alignParentBottom(withMargin: ActiveCallView.local_video_margins).alignParentRight(withMargin: ActiveCallView.local_video_margins).done() + localVideo.isHidden = true + localVideo.dragZone = centerSection + + // Full screen video togggle + remoteVideo.onClick { + ControlsViewModel.shared.toggleFullScreen() + } + ControlsViewModel.shared.fullScreenMode.observe { (fullScreen) in + if (self.isHidden) { + return + } + self.remoteVideo.removeConstraints().done() + self.localVideo.removeConstraints().done() + if (fullScreen == true) { + self.remoteVideo.removeFromSuperview() + self.localVideo.removeFromSuperview() + PhoneMainView.instance().mainViewController.view?.addSubview(self.remoteVideo) + PhoneMainView.instance().mainViewController.view?.addSubview(self.localVideo) + } else { + self.remoteVideo.removeFromSuperview() + self.localVideo.removeFromSuperview() + centerSection.addSubview(self.remoteVideo) + centerSection.addSubview(self.localVideo) + } + self.remoteVideo.matchParentDimmensions().done() + self.localVideo.alignParentBottom(withMargin: ActiveCallView.local_video_margins).alignParentRight(withMargin: ActiveCallView.local_video_margins).done() + self.localVideo.setSizeConstraint() + } + + + // Bottom display name + centerSection.addSubview(displayNameBottom) + displayNameBottom.alignParentLeft(withMargin:ActiveCallView.bottom_displayname_margin_left).alignParentRight().alignParentBottom(withMargin:ActiveCallView.bottom_displayname_margin_bottom).done() + + stack.addArrangedSubview(centerSection) + centerSection.matchParentSideBorders().alignUnder(view:upperSection,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done() + + addSubview(stack) + stack.matchParentDimmensions().done() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Classes/Voip/Views/Fragments/AudioRoutesView.swift b/Classes/Voip/Views/Fragments/AudioRoutesView.swift new file mode 100644 index 000000000..1618e3727 --- /dev/null +++ b/Classes/Voip/Views/Fragments/AudioRoutesView.swift @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import UIKit + +class AudioRoutesView: UIStackView { + + // Layout constants + let corner_radius = 6.7 + let margin = 10.0 + + init () { + super.init(frame: .zero) + axis = .vertical + distribution = .equalCentering + alignment = .center + spacing = ControlsView.controls_button_spacing + backgroundColor = VoipTheme.voip_gray + layer.cornerRadius = corner_radius + clipsToBounds = true + + // bluetooth + let blueTooth = CallControlButton(buttonTheme: VoipTheme.route_bluetooth, onClickAction: { + ControlsViewModel.shared.forceBluetoothAudioRoute() + }) + addArrangedSubview(blueTooth) + + ControlsViewModel.shared.isBluetoothHeadsetSelected.readCurrentAndObserve { (selected) in + blueTooth.isSelected = selected == true + } + + // Earpiece + let earpiece = CallControlButton(buttonTheme: VoipTheme.route_earpiece, onClickAction: { + ControlsViewModel.shared.forceEarpieceAudioRoute() + }) + addArrangedSubview(earpiece) + ControlsViewModel.shared.isSpeakerSelected.readCurrentAndObserve { (isSpeakerSelected) in + earpiece.isSelected = isSpeakerSelected != true && ControlsViewModel.shared.isBluetoothHeadsetSelected.value != true + } + ControlsViewModel.shared.isBluetoothHeadsetSelected.readCurrentAndObserve { (isBluetoothHeadsetSelected) in + earpiece.isSelected = isBluetoothHeadsetSelected != true && ControlsViewModel.shared.isSpeakerSelected.value != true + } + + // Speaker + let speaker = CallControlButton(buttonTheme: VoipTheme.route_speaker, onClickAction: { + ControlsViewModel.shared.forceSpeakerAudioRoute() + }) + addArrangedSubview(speaker) + ControlsViewModel.shared.isSpeakerSelected.readCurrentAndObserve { (selected) in + speaker.isSelected = selected == true + } + + size(w:CGFloat(CallControlButton.default_size)+margin, h : 3*CGFloat(CallControlButton.default_size)+2*CGFloat(ControlsView.controls_button_spacing)+margin).done() + + } + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + + diff --git a/Classes/Voip/Views/Fragments/CallStatsView.swift b/Classes/Voip/Views/Fragments/CallStatsView.swift new file mode 100644 index 000000000..142cc03d6 --- /dev/null +++ b/Classes/Voip/Views/Fragments/CallStatsView.swift @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +@objc class CallStatsView: UIView { + + // Layout constants + let side_margins = 10.0 + let margin_top = 50 + let corner_radius = 20.0 + let view_height = 600 + let audio_video_margin = 20 + + init(superView:UIView, callData:CallData, onDismissAction : @escaping ()->Void) { + super.init(frame:.zero) + backgroundColor = VoipTheme.voip_translucent_popup_background + layer.cornerRadius = corner_radius + clipsToBounds = true + superView.addSubview(self) + snp.makeConstraints { make in + make.left.equalToSuperview().offset(side_margins) + make.right.equalToSuperview().offset(-side_margins) + make.height.equalTo(view_height) + make.bottom.equalToSuperview().offset(-side_margins) + } + callData.callState.observe { state in + if (state == Call.State.End) { + onDismissAction() + } + } + + let hide = CallControlButton(buttonTheme: VoipTheme.voip_cancel_light, onClickAction: { + onDismissAction() + }) + addSubview(hide) + hide.alignParentRight(withMargin: side_margins).alignParentTop(withMargin: side_margins).done() + + + let model = CallStatisticsData(call: callData.call) + let audioTitle = StyledLabel(VoipTheme.call_stats_font_title,NSLocalizedString("Audio", comment: "")) + addSubview(audioTitle) + audioTitle.matchParentSideBorders().alignParentTop(withMargin: margin_top).done() + + let audioStats = StyledLabel(VoipTheme.call_stats_font) + + audioStats.numberOfLines = 0 + addSubview(audioStats) + audioStats.matchParentSideBorders().alignUnder(view: audioTitle).done() + + let videoTitle = StyledLabel(VoipTheme.call_stats_font_title,NSLocalizedString("Video", comment: "")) + addSubview(videoTitle) + videoTitle.alignUnder(view: audioStats, withMargin:audio_video_margin).matchParentSideBorders().done() + + let videoStats = StyledLabel(VoipTheme.call_stats_font) + + videoStats.numberOfLines = 0 + addSubview(videoStats) + videoStats.matchParentSideBorders().alignUnder(view: videoTitle).done() + + model.isVideoEnabled.readCurrentAndObserve { (video) in + videoTitle.isHidden = video != true + videoStats.isHidden = video != true + } + + model.statsUpdated.readCurrentAndObserve { (updated) in + var stats = "" + model.audioStats.forEach { + stats += "\n\($0.getTypeTitle())\($0.value.value ?? "n/a")" + } + audioStats.text = stats + stats = "" + model.videoStats.forEach { + stats += "\n\($0.getTypeTitle())\($0.value.value ?? "n/a")" + } + videoStats.text = stats + } + + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + +} + + + diff --git a/Classes/Voip/Views/Fragments/CallsList/CallsListView.swift b/Classes/Voip/Views/Fragments/CallsList/CallsListView.swift new file mode 100644 index 000000000..6fad29f47 --- /dev/null +++ b/Classes/Voip/Views/Fragments/CallsList/CallsListView.swift @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import linphonesw + +@objc class CallsListView: DismissableView, UITableViewDataSource { + + // Layout constants + let buttons_distance_from_center_x = 38 + let buttons_size = 60 + + let callsListTableView = UITableView() + let menuView = VoipCallContextMenu() + + var callsDataObserver : MutableLiveDataOnChangeClosure<[CallData]>? = nil + + init() { + super.init(title: VoipTexts.call_action_calls_list) + + // New Call + let newCall = CallControlButton(width: buttons_size,height: buttons_size, buttonTheme: VoipTheme.call_add, onClickAction: { + let view: DialerView = self.VIEW(DialerView.compositeViewDescription()); + view.setAddress("") + CallManager.instance().nextCallIsTransfer = false + PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) + }) + addSubview(newCall) + newCall.centerX(withDx: -buttons_distance_from_center_x).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + // Merge Calls + let mergeIntoLocalConference = CallControlButton(width: buttons_size,height: buttons_size, buttonTheme: VoipTheme.call_merge, onClickAction: { + self.removeFromSuperview() + CallsViewModel.shared.mergeCallsIntoLocalConference() + }) + addSubview(mergeIntoLocalConference) + mergeIntoLocalConference.centerX(withDx: buttons_distance_from_center_x).alignParentBottom(withMargin:SharedLayoutConstants.buttons_bottom_margin).done() + + + CallsViewModel.shared.callsData.readCurrentAndObserve{ (callsData) in + if let callsData = callsData { + mergeIntoLocalConference.isEnabled = callsData.count >= 2 && Core.get().conference?.isIn != true + } else { + mergeIntoLocalConference.isEnabled = false + } + self.callsListTableView.reloadData() + } + + + // CallsList + super.contentView.addSubview(callsListTableView) + callsListTableView.matchParentDimmensions().done() + callsListTableView.dataSource = self + callsListTableView.register(VoipCallCell.self, forCellReuseIdentifier: "VoipCallCell") + callsListTableView.allowsSelection = false + if #available(iOS 15.0, *) { + callsListTableView.allowsFocus = false + } + callsListTableView.separatorStyle = .singleLine + callsListTableView.separatorColor = .white + callsListTableView.onClick { + self.hideMenu() + } + + // Floating menu + super.contentView.addSubview(menuView) + + menuView.isHidden = true + + } + + + func toggleMenu(forCell:VoipCallCell) { + if (menuView.isHidden) { + showMenu(forCell: forCell) + } else if (menuView.callData?.call.callLog?.callId != forCell.callData?.call.callLog?.callId) { + hideMenu() + showMenu(forCell: forCell) + } else { + hideMenu() + } + } + + func showMenu(forCell:VoipCallCell) { + menuView.removeConstraints().alignUnder(view: forCell).alignParentRight().done() + menuView.callData = forCell.callData + menuView.isHidden = false + } + + func hideMenu() { + menuView.isHidden = true + } + + // TableView datasource delegate + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + guard let callsData = CallsViewModel.shared.callsData.value else { + return 0 + } + return callsData.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell:VoipCallCell = tableView.dequeueReusableCell(withIdentifier: "VoipCallCell") as! VoipCallCell + guard let callData = CallsViewModel.shared.callsData.value?[indexPath.row] else { + return cell + } + cell.selectionStyle = .none + cell.callData = callData + cell.owningCallsListView = self + return cell + } + + // View controller + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Classes/Voip/Views/Fragments/CallsList/VoipCallCell.swift b/Classes/Voip/Views/Fragments/CallsList/VoipCallCell.swift new file mode 100644 index 000000000..22c92def4 --- /dev/null +++ b/Classes/Voip/Views/Fragments/CallsList/VoipCallCell.swift @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipCallCell: UITableViewCell { + + // Layout Constants + let cell_height = 80.0 + let call_status_icon_size = 65.0 + static let avatar_size = 45.0 + let avatar_left_margin = 40.0 + let texts_left_margin = 20.0 + let side_menu_icon_size = 80.0 + + + var onMenuClickAction : (()->Void) = {} + let callStatusIcon = UIImageView() + let avatar = Avatar(diameter:VoipCallCell.avatar_size,color:LightDarkColor(VoipTheme.voip_contact_avatar_calls_list,VoipTheme.voip_contact_avatar_calls_list), textStyle: VoipTheme.call_generated_avatar_small) + let conferenceAvatar = UIImageView(image:UIImage(named:"voip_multiple_contacts_avatar")) + let displayName = StyledLabel(VoipTheme.call_list_active_name_font) + let sipAddress = StyledLabel(VoipTheme.call_list_active_sip_uri_font) + var menuButton : CallControlButton? = nil + var owningCallsListView : CallsListView? = nil + + var callData: CallData? = nil { + didSet { + if let data = callData { + contentView.backgroundColor = data.isPaused.value == true ? VoipTheme.voip_calls_list_inactive_background : VoipTheme.voip_dark_gray + callStatusIcon.image = + data.isIncoming.value == true ? UIImage(named:"voip_call_header_incoming") : + data.isOutgoing.value == true ? UIImage(named:"voip_call_header_outgoing") : + data.isPaused.value == true ? UIImage(named:"voip_call_header_paused") : + UIImage(named:"voip_call_header_active") + if (data.isInRemoteConference.value == true) { + avatar.isHidden = true + conferenceAvatar.isHidden = false + displayName.text = data.remoteConferenceSubject.value + } else { + displayName.text = data.call.remoteAddress?.addressBookEnhancedDisplayName() + avatar.fillFromAddress(address: data.call.remoteAddress!) + avatar.isHidden = false + conferenceAvatar.isHidden = true + } + sipAddress.text = data.call.remoteAddress?.asStringUriOnly() + displayName.applyStyle(data.isPaused.value == true ? VoipTheme.call_list_name_font : VoipTheme.call_list_active_name_font) + sipAddress.applyStyle(data.isPaused.value == true ? VoipTheme.call_list_sip_uri_font : VoipTheme.call_list_active_sip_uri_font) + menuButton?.applyTintedIcons(tintedIcons: data.isPaused.value == true ? VoipTheme.voip_call_list_menu.tintableStateIcons : VoipTheme.voip_call_list_active_menu.tintableStateIcons) + } + } + } + + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + contentView.height(cell_height).matchParentSideBorders().done() + + contentView.addSubview(callStatusIcon) + callStatusIcon.size(w: call_status_icon_size, h: call_status_icon_size).done() + + contentView.addSubview(avatar) + avatar.size(w: VoipCallCell.avatar_size, h: VoipCallCell.avatar_size).centerY().alignParentLeft(withMargin: avatar_left_margin).done() + + contentView.addSubview(conferenceAvatar) + conferenceAvatar.size(w: VoipCallCell.avatar_size, h: VoipCallCell.avatar_size).centerY().alignParentLeft(withMargin: avatar_left_margin).done() + + let nameAddress = UIView() + nameAddress.addSubview(displayName) + nameAddress.addSubview(sipAddress) + displayName.alignParentTop().done() + sipAddress.alignUnder(view: displayName).done() + contentView.addSubview(nameAddress) + nameAddress.toRightOf(avatar,withLeftMargin:texts_left_margin).toRightOf(conferenceAvatar,withLeftMargin:texts_left_margin).wrapContentY().centerY().done() + + menuButton = CallControlButton(buttonTheme: VoipTheme.voip_call_list_active_menu, onClickAction: { + self.owningCallsListView?.toggleMenu(forCell: self) + }) + contentView.addSubview(menuButton!) + menuButton!.size(w: side_menu_icon_size, h: side_menu_icon_size).alignParentRight().centerY().done() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Classes/Voip/Views/Fragments/CallsList/VoipCallContextMenu.swift b/Classes/Voip/Views/Fragments/CallsList/VoipCallContextMenu.swift new file mode 100644 index 000000000..79cdaa063 --- /dev/null +++ b/Classes/Voip/Views/Fragments/CallsList/VoipCallContextMenu.swift @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipCallContextMenu: UIStackView { + + //Layout constants + static let item_height = 50.0 + let width = 250.0 + let margin_bw_items = 1.0 + static let texts_margin_left = 10.0 + + + let resume : ButtonWithStateBackgrounds + let pause : ButtonWithStateBackgrounds + let transfer : ButtonWithStateBackgrounds + let answer : ButtonWithStateBackgrounds + let terminate : ButtonWithStateBackgrounds + + var callData: CallData? = nil { + didSet { + callData?.callState.readCurrentAndObserve(onChange: { (state) in + self.resume.isHidden = false + self.pause.isHidden = false + self.transfer.isHidden = false + self.answer.isHidden = false + self.terminate.isHidden = false + var count = 5.0 + + if let callData = self.callData { + if (callData.isPaused.value == true || + callData.isIncoming.value == true || + callData.isOutgoing.value == true || + callData.isInRemoteConference.value == true + ) { + self.pause.isHidden = true + count -= 1 + } + + if (callData.isIncoming.value == true || + callData.isOutgoing.value == true || + callData.isInRemoteConference.value == true + ) { + self.resume.isHidden = true + self.transfer.isHidden = true + count -= 2 + } else if (callData.isPaused.value == false) { + self.resume.isHidden = true + count -= 1 + } + + if (callData.isIncoming.value == false) { + count -= 1 + self.answer.isHidden = true + } + self.size(w:self.width,h:count*VoipCallContextMenu.item_height).done() + } + + }) + } + } + + + init () { + + resume = VoipCallContextMenu.getButton(title: VoipTexts.call_context_action_resume) + pause = VoipCallContextMenu.getButton(title: VoipTexts.call_context_action_pause) + transfer = VoipCallContextMenu.getButton(title: VoipTexts.call_context_action_transfer) + answer = VoipCallContextMenu.getButton(title: VoipTexts.call_context_action_answer) + terminate = VoipCallContextMenu.getButton(title: VoipTexts.call_context_action_hangup) + + super.init(frame: .zero) + backgroundColor = .white + axis = .vertical + spacing = margin_bw_items + + + addArrangedSubview(resume) + addArrangedSubview(pause) + addArrangedSubview(transfer) + addArrangedSubview(answer) + addArrangedSubview(terminate) + + resume.onClick { + self.isHidden = true + guard let call = self.callData?.call else { return } + if (CallManager.callKitEnabled()) { + CallManager.instance().setHeld(call:call,hold:false); + } else { + try?call.resume() + } + } + pause.onClick { + self.isHidden = true + guard let call = self.callData?.call else { return } + if (CallManager.callKitEnabled()) { + CallManager.instance().setHeld(call:call,hold:true); + } else { + try?call.pause() + } + } + transfer.onClick { + let view: DialerView = self.VIEW(DialerView.compositeViewDescription()); + view.setAddress("") + CallManager.instance().nextCallIsTransfer = true + PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) + } + answer.onClick { + self.isHidden = true + guard let call = self.callData?.call else { return } + if (CallManager.callKitEnabled()) { + CallManager.instance().acceptCall(call: call, hasVideo: false) + } else { + try?call.accept() + } + } + terminate.onClick { + self.isHidden = true + guard let call = self.callData?.call else { return } + try?call.terminate() + } + } + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + static func getButton(title:String) -> ButtonWithStateBackgrounds { + let button = ButtonWithStateBackgrounds(backgroundStateColors: VoipTheme.button_call_context_menu_background) + button.setTitle(title, for: .normal) + button.applyTitleStyle(VoipTheme.call_context_menu_item_font) + button.titleEdgeInsets = UIEdgeInsets(top: 0, left: texts_margin_left, bottom: 0, right: 0) + button.height(VoipCallContextMenu.item_height).done() + return button + } + + + +} diff --git a/Classes/Voip/Views/Fragments/Conference/VoipActiveSpeakerParticipantCell.swift b/Classes/Voip/Views/Fragments/Conference/VoipActiveSpeakerParticipantCell.swift new file mode 100644 index 000000000..02c2f384f --- /dev/null +++ b/Classes/Voip/Views/Fragments/Conference/VoipActiveSpeakerParticipantCell.swift @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipActiveSpeakerParticipantCell: UICollectionViewCell { + + // Layout Constants + let corner_radius = 20.0 + static let avatar_size = 80.0 + let switch_camera_button_margins = 8.0 + let switch_camera_button_size = 30 + + + let videoView = UIView() + let avatar = Avatar(diameter:VoipGridParticipantCell.avatar_size,color:VoipTheme.voipBackgroundColor, textStyle: VoipTheme.call_generated_avatar_medium) + let pause = UIImageView(image: UIImage(named: "voip_pause")?.tinted(with: .white)) + let switchCamera = UIImageView(image: UIImage(named:"voip_change_camera")?.tinted(with:.white)) + let displayName = StyledLabel(VoipTheme.conference_participant_name_font_as) + let pauseLabel = StyledLabel(VoipTheme.conference_participant_name_font_as,VoipTexts.conference_participant_paused) + + var participantData: ConferenceParticipantDeviceData? = nil { + didSet { + if let data = participantData { + data.isInConference.readCurrentAndObserve { (isIn) in + self.updateBackground() + self.pause.isHidden = isIn == true + self.pauseLabel.isHidden = self.pause.isHidden + } + data.videoEnabled.readCurrentAndObserve { (videoEnabled) in + self.updateBackground() + if (videoEnabled == true) { + data.setVideoView(view: self.videoView) + self.avatar.isHidden = true + } else { + self.avatar.isHidden = false + } + self.switchCamera.isHidden = videoEnabled != true || !data.isSwitchCameraAvailable() + } + data.participantDevice.address.map { + avatar.fillFromAddress(address: $0) + if let displayName = $0.addressBookEnhancedDisplayName() { + self.displayName.text = displayName + } + } + } + } + } + + func updateBackground() { + if let data = participantData { + if (data.isInConference.value != true) { + self.contentView.backgroundColor = VoipTheme.voip_conference_participant_paused_background + } else if (data.videoEnabled.value == true) { + self.contentView.backgroundColor = .black + } else { + self.contentView.backgroundColor = VoipTheme.voipParticipantBackgroundColor.get() + + } + } + } + + + override init(frame:CGRect) { + super.init(frame:.zero) + layer.cornerRadius = corner_radius + clipsToBounds = true + + contentView.addSubview(videoView) + videoView.matchParentDimmensions().done() + + contentView.addSubview(avatar) + avatar.size(w: VoipGridParticipantCell.avatar_size, h: VoipGridParticipantCell.avatar_size).center().done() + + contentView.addSubview(pause) + pause.layer.cornerRadius = VoipGridParticipantCell.avatar_size/2 + pause.clipsToBounds = true + pause.backgroundColor = VoipTheme.voip_gray + pause.size(w: VoipGridParticipantCell.avatar_size, h: VoipGridParticipantCell.avatar_size).center().done() + + contentView.addSubview(switchCamera) + switchCamera.alignParentTop(withMargin: switch_camera_button_margins).alignParentRight(withMargin: switch_camera_button_margins).square(switch_camera_button_size).done() + switchCamera.contentMode = .scaleAspectFit + + switchCamera.onClick { + Core.get().toggleCamera() + } + + contentView.addSubview(displayName) + displayName.matchParentSideBorders(insetedByDx:ActiveCallView.bottom_displayname_margin_left).alignParentBottom(withMargin:ActiveCallView.bottom_displayname_margin_bottom).done() + + contentView.addSubview(pauseLabel) + pauseLabel.toRightOf(displayName).alignParentBottom(withMargin:ActiveCallView.bottom_displayname_margin_bottom).done() + + contentView.matchParentDimmensions().done() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Classes/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift b/Classes/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift new file mode 100644 index 000000000..e0bc2d937 --- /dev/null +++ b/Classes/Voip/Views/Fragments/Conference/VoipConferenceActiveSpeakerView.swift @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipConferenceActiveSpeakerView: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { + + // Layout constants : + let inter_cell = 10.0 + let record_pause_button_margin = 10.0 + let duration_margin_top = 4.0 + let record_pause_button_size = 40 + let record_pause_button_inset = UIEdgeInsets(top: 7, left: 7, bottom: 7, right: 7) + let grid_height = 150.0 + let cell_width = 100.0 + + + let subjectLabel = StyledLabel(VoipTheme.call_display_name_duration) + let duration = CallTimer(nil, VoipTheme.call_display_name_duration) + + let remotelyRecording = RemotelyRecordingView(height: ActiveCallView.remote_recording_height,text: VoipTexts.call_remote_recording) + var recordCallButtons : [CallControlButton] = [] + var pauseCallButtons : [CallControlButton] = [] + + let activeSpeakerView = UIView() + let activeSpeakerVideoView = UIView() + let activeSpeakerAvatar = Avatar(diameter: CGFloat(Avatar.diameter_for_call_views), color:VoipTheme.voipBackgroundColor, textStyle: VoipTheme.call_generated_avatar_large) + let activeSpeakerDisplayName = StyledLabel(VoipTheme.call_remote_name) + var activeSpeakerMonitorTimer : Timer? = nil + + var grid : UICollectionView + + + var conferenceViewModel: ConferenceViewModel? = nil { + didSet { + if let model = conferenceViewModel { + model.subject.readCurrentAndObserve { (subject) in + self.subjectLabel.text = subject + } + duration.conference = model.conference.value + self.remotelyRecording.isRemotelyRecorded = model.isRemotelyRecorded + model.conferenceParticipantDevices.readCurrentAndObserve { (_) in + self.grid.reloadData() + } + model.isConferencePaused.readCurrentAndObserve { (paused) in + self.pauseCallButtons.forEach { + $0.isSelected = paused == true + } + } + model.isRecording.readCurrentAndObserve { (selected) in + self.recordCallButtons.forEach { + $0.isSelected = selected == true + } + } + Core.get().nativeVideoWindow = self.activeSpeakerVideoView + activeSpeakerMonitorTimer?.invalidate() + activeSpeakerMonitorTimer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { timer in + var thereIsAnActiveSpeaker = false + model.conferenceParticipantDevices.value?.forEach { (data) in + if (data.activeSpeaker.value == true) { + thereIsAnActiveSpeaker = true + data.participantDevice.address.map { + self.activeSpeakerAvatar.isHidden = false + self.activeSpeakerAvatar.fillFromAddress(address: $0) + self.activeSpeakerDisplayName.text = $0.addressBookEnhancedDisplayName() + } + self.activeSpeakerVideoView.isHidden = data.videoEnabled.value != true + return + } + } + if (!thereIsAnActiveSpeaker) { + self.activeSpeakerAvatar.isHidden = true + self.activeSpeakerVideoView.isHidden = true + self.activeSpeakerDisplayName.text = VoipTexts.conference_display_no_active_speaker + } + } + } else { + activeSpeakerMonitorTimer?.invalidate() + } + self.grid.reloadData() + + } + } + + init() { + + let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() + layout.minimumInteritemSpacing = 0 + layout.minimumLineSpacing = 0 + layout.scrollDirection = .horizontal + layout.itemSize = CGSize(width:cell_width, height:grid_height) + grid = UICollectionView(frame:.zero, collectionViewLayout: layout) + + super.init(frame: .zero) + + let headerView = UIStackView() + addSubview(headerView) + headerView.matchParentSideBorders().alignParentTop().done() + + headerView.distribution = .equalSpacing + headerView.alignment = .bottom + headerView.spacing = record_pause_button_margin + headerView.axis = .vertical + + let subjectDuration = UIView() + + subjectDuration.addSubview(subjectLabel) + subjectLabel.alignParentLeft().done() + + subjectDuration.addSubview(duration) + duration.alignParentLeft().alignUnder(view: subjectLabel,withMargin:duration_margin_top).done() + + let upperSection = UIStackView() + upperSection.distribution = .equalSpacing + upperSection.alignment = .center + upperSection.spacing = record_pause_button_margin + upperSection.axis = .horizontal + + upperSection.addArrangedSubview(subjectDuration) + subjectDuration.wrapContentY().done() + + // Record (with video) + let recordCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_record, onClickAction: { + self.conferenceViewModel?.toggleRecording() + }) + + let recordPauseView = UIStackView() + recordPauseView.spacing = record_pause_button_margin + recordCallButtons.append(recordCall) + recordPauseView.addArrangedSubview(recordCall) + + // Pause (with video) + let pauseCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_pause, onClickAction: { + self.conferenceViewModel?.togglePlayPause() + + }) + pauseCallButtons.append(pauseCall) + recordPauseView.addArrangedSubview(pauseCall) + + upperSection.addArrangedSubview(recordPauseView) + + headerView.addArrangedSubview(upperSection) + upperSection.matchParentSideBorders().alignParentTop(withMargin:ActiveCallView.top_displayname_margin_top).done() + + headerView.addArrangedSubview(remotelyRecording) + remotelyRecording.matchParentSideBorders().alignUnder(view:upperSection, withMargin:ActiveCallView.remote_recording_margin_top).height(CGFloat(ActiveCallView.remote_recording_height)).done() + + + // Container view that can toggle full screen by ckick + let fullScreenMutableView = UIView() + addSubview(fullScreenMutableView) + fullScreenMutableView.backgroundColor = VoipTheme.voipBackgroundColor.get() + fullScreenMutableView.matchParentSideBorders().alignUnder(view:headerView,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done() + + + // Active speaker + fullScreenMutableView.addSubview(activeSpeakerView) + activeSpeakerView.layer.cornerRadius = ActiveCallView.center_view_corner_radius + activeSpeakerView.clipsToBounds = true + activeSpeakerView.backgroundColor = VoipTheme.voipParticipantBackgroundColor.get() + activeSpeakerView.matchParentSideBorders().alignParentTop().done() + + activeSpeakerView.addSubview(activeSpeakerAvatar) + activeSpeakerAvatar.square(Avatar.diameter_for_call_views).center().done() + + activeSpeakerView.addSubview(activeSpeakerVideoView) + activeSpeakerVideoView.matchParentDimmensions().done() + + activeSpeakerView.addSubview(activeSpeakerDisplayName) + activeSpeakerDisplayName.alignParentLeft(withMargin:ActiveCallView.bottom_displayname_margin_left).alignParentRight().alignParentBottom(withMargin:ActiveCallView.bottom_displayname_margin_bottom).done() + + // CollectionView + grid.dataSource = self + grid.delegate = self + grid.register(VoipActiveSpeakerParticipantCell.self, forCellWithReuseIdentifier: "VoipActiveSpeakerParticipantCell") + grid.backgroundColor = .clear + grid.isScrollEnabled = true + fullScreenMutableView.addSubview(grid) + + grid.matchParentSideBorders().height(grid_height).alignParentBottom().alignUnder(view: activeSpeakerView, withMargin:ActiveCallView.center_view_margin_top).done() + + // Full screen video togggle + activeSpeakerView.onClick { + ControlsViewModel.shared.toggleFullScreen() + } + + ControlsViewModel.shared.fullScreenMode.observe { (fullScreen) in + if (self.isHidden) { + return + } + fullScreenMutableView.removeConstraints().done() + if (fullScreen == true) { + fullScreenMutableView.removeFromSuperview() + PhoneMainView.instance().mainViewController.view?.addSubview(fullScreenMutableView) + fullScreenMutableView.matchParentDimmensions().done() + } else { + fullScreenMutableView.removeFromSuperview() + self.addSubview(fullScreenMutableView) + fullScreenMutableView.matchParentSideBorders().alignUnder(view:headerView,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done() + } + } + + } + + + // UICollectionView related delegates + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { + return inter_cell + } + + func collectionView(_ collectionView: UICollectionView, layout + collectionViewLayout: UICollectionViewLayout, + minimumLineSpacingForSectionAt section: Int) -> CGFloat { + return inter_cell + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + guard let participantsCount = conferenceViewModel?.conferenceParticipantDevices.value?.count else { + return .zero + } + return participantsCount + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell:VoipActiveSpeakerParticipantCell = collectionView.dequeueReusableCell(withReuseIdentifier: "VoipActiveSpeakerParticipantCell", for: indexPath) as! VoipActiveSpeakerParticipantCell + guard let participantData = conferenceViewModel?.conferenceParticipantDevices.value?[indexPath.row] else { + return cell + } + cell.participantData = participantData + return cell + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + + +} diff --git a/Classes/Voip/Views/Fragments/Conference/VoipConferenceDisplayModeSelectionView.swift b/Classes/Voip/Views/Fragments/Conference/VoipConferenceDisplayModeSelectionView.swift new file mode 100644 index 000000000..42a694bbd --- /dev/null +++ b/Classes/Voip/Views/Fragments/Conference/VoipConferenceDisplayModeSelectionView.swift @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import linphonesw + +@objc class VoipConferenceDisplayModeSelectionView: DismissableView, UITableViewDataSource, UITableViewDelegate{ + + // Layout constants + let buttons_distance_from_center_x = 38 + let buttons_size = 60 + + let optionsListView = UITableView() + + init() { + super.init(title: VoipTexts.call_action_change_conf_layout) + + super.contentView.addSubview(optionsListView) + optionsListView.matchParentDimmensions().done() + optionsListView.dataSource = self + optionsListView.delegate = self + optionsListView.register(ConferenceDisplayModeSelectionCell.self, forCellReuseIdentifier: "ConferenceDisplayModeSelectionCell") + optionsListView.separatorStyle = .singleLine + optionsListView.separatorColor = VoipTheme.light_grey_color + optionsListView.isScrollEnabled = false + } + + // TableView datasource delegate + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 2 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell:ConferenceDisplayModeSelectionCell = tableView.dequeueReusableCell(withIdentifier: "ConferenceDisplayModeSelectionCell") as! ConferenceDisplayModeSelectionCell + cell.selectionStyle = .none + if (indexPath.row == 0) { + cell.setOption(title: VoipTexts.conference_display_mode_mosaic, onSelectAction: { + ConferenceViewModel.shared.conference.value?.layout = .Grid + ConferenceViewModel.shared.conferenceDisplayMode.value = .Grid + }, image:(UIImage(named: "voip_conference_mosaic")?.tinted(with: VoipTheme.voipDrawableColor.get())!)!) + cell.isUserInteractionEnabled = ConferenceViewModel.shared.conferenceParticipantDevices.value!.count <= ConferenceViewModel.shared.maxParticipantsForMosaicLayout + } + if (indexPath.row == 1) { + cell.setOption(title: VoipTexts.conference_display_mode_active_speaker, onSelectAction: { + ConferenceViewModel.shared.conference.value?.layout = .ActiveSpeaker + ConferenceViewModel.shared.conferenceDisplayMode.value = .ActiveSpeaker + }, image:(UIImage(named: "voip_conference_active_speaker")?.tinted(with: VoipTheme.voipDrawableColor.get())!)!) + cell.isUserInteractionEnabled = true + } + + cell.separatorInset = .zero + cell.selectionStyle = .none + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let cell = tableView.cellForRow(at: indexPath) as! ConferenceDisplayModeSelectionCell + cell.onSelectAction?() + cell.isSelected = true + if (indexPath.row == 0) { + tableView.deselectRow(at: IndexPath(row: 1, section: 0), animated: false) + } + if (indexPath.row == 1) { + tableView.deselectRow(at: IndexPath(row: 0, section: 0), animated: false) + } + } + + func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { + let cell = tableView.cellForRow(at: indexPath) as! ConferenceDisplayModeSelectionCell + cell.isSelected = false + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +class ConferenceDisplayModeSelectionCell : UITableViewCell { + + let cell_height = 60.0 + let icon_size = 40.0 + let side_margins = 20.0 + + let radio = CallControlButton(buttonTheme: VoipTheme.radio_button) + let label = StyledLabel(VoipTheme.conference_mode_title) + let icon = UIImageView() + + var onSelectAction : (()->Void)? = nil + + override var isSelected: Bool { + didSet { + radio.isSelected = isSelected + label.applyStyle(isSelected ? VoipTheme.conference_mode_title_selected : VoipTheme.conference_mode_title) + } + } + + + func setOption(title:String, onSelectAction:@escaping ()->Void, image:UIImage) { + self.onSelectAction = onSelectAction + label.text = title + icon.image = image + } + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + contentView.height(cell_height).matchParentSideBorders().done() + contentView.addSubview(radio) + radio.alignParentLeft(withMargin: side_margins).centerY().done() + contentView.addSubview(label) + label.toRightOf(radio).centerY().done() + contentView.addSubview(icon) + icon.size(w: icon_size, h: icon_size).alignParentRight(withMargin: side_margins).centerY().done() + radio.isUserInteractionEnabled = false + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Classes/Voip/Views/Fragments/Conference/VoipConferenceGridView.swift b/Classes/Voip/Views/Fragments/Conference/VoipConferenceGridView.swift new file mode 100644 index 000000000..1b6509c03 --- /dev/null +++ b/Classes/Voip/Views/Fragments/Conference/VoipConferenceGridView.swift @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipConferenceGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { + + // Layout constants : + let inter_cell = 10.0 + let record_pause_button_margin = 10.0 + let duration_margin_top = 4.0 + let record_pause_button_size = 40 + let record_pause_button_inset = UIEdgeInsets(top: 7, left: 7, bottom: 7, right: 7) + + + let subjectLabel = StyledLabel(VoipTheme.call_display_name_duration) + let duration = CallTimer(nil, VoipTheme.call_display_name_duration) + + let remotelyRecording = RemotelyRecordingView(height: ActiveCallView.remote_recording_height,text: VoipTexts.call_remote_recording) + var recordCallButtons : [CallControlButton] = [] + var pauseCallButtons : [CallControlButton] = [] + var grid : UICollectionView + + + var conferenceViewModel: ConferenceViewModel? = nil { + didSet { + if let model = conferenceViewModel { + model.subject.readCurrentAndObserve { (subject) in + self.subjectLabel.text = subject + } + duration.conference = model.conference.value + self.remotelyRecording.isRemotelyRecorded = model.isRemotelyRecorded + model.conferenceParticipantDevices.readCurrentAndObserve { (_) in + self.grid.reloadData() + } + model.isConferencePaused.readCurrentAndObserve { (paused) in + self.pauseCallButtons.forEach { + $0.isSelected = paused == true + } + } + model.isRecording.readCurrentAndObserve { (selected) in + self.recordCallButtons.forEach { + $0.isSelected = selected == true + } + } + } + self.grid.reloadData() + } + } + + init() { + + let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() + layout.minimumInteritemSpacing = 0 + layout.minimumLineSpacing = 0 + grid = UICollectionView(frame:.zero, collectionViewLayout: layout) + + super.init(frame: .zero) + + let headerView = UIStackView() + addSubview(headerView) + + headerView.distribution = .equalSpacing + headerView.alignment = .bottom + headerView.spacing = record_pause_button_margin + headerView.axis = .vertical + + let subjectDuration = UIView() + + subjectDuration.addSubview(subjectLabel) + subjectLabel.alignParentLeft().done() + + subjectDuration.addSubview(duration) + duration.alignParentLeft().alignUnder(view: subjectLabel,withMargin:duration_margin_top).done() + + let upperSection = UIStackView() + upperSection.distribution = .equalSpacing + upperSection.alignment = .center + upperSection.spacing = record_pause_button_margin + upperSection.axis = .horizontal + + upperSection.addArrangedSubview(subjectDuration) + subjectDuration.wrapContentY().done() + + // Record (with video) + let recordCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_record, onClickAction: { + self.conferenceViewModel?.toggleRecording() + }) + + let recordPauseView = UIStackView() + recordPauseView.spacing = record_pause_button_margin + recordCallButtons.append(recordCall) + recordPauseView.addArrangedSubview(recordCall) + + // Pause (with video) + let pauseCall = CallControlButton(width: record_pause_button_size, height: record_pause_button_size, imageInset:record_pause_button_inset, buttonTheme: VoipTheme.call_pause, onClickAction: { + self.conferenceViewModel?.togglePlayPause() + + }) + pauseCallButtons.append(pauseCall) + recordPauseView.addArrangedSubview(pauseCall) + + upperSection.addArrangedSubview(recordPauseView) + + headerView.addArrangedSubview(upperSection) + upperSection.matchParentSideBorders().alignParentTop(withMargin:ActiveCallView.top_displayname_margin_top).done() + + headerView.addArrangedSubview(remotelyRecording) + remotelyRecording.matchParentSideBorders().alignUnder(view:upperSection, withMargin:ActiveCallView.remote_recording_margin_top).height(CGFloat(ActiveCallView.remote_recording_height)).done() + + // CollectionView + grid.dataSource = self + grid.delegate = self + grid.register(VoipGridParticipantCell.self, forCellWithReuseIdentifier: "VoipGridParticipantCell") + grid.backgroundColor = VoipTheme.voipBackgroundColor.get() + grid.isScrollEnabled = false + addSubview(grid) + grid.matchParentSideBorders().alignUnder(view:headerView,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done() + + headerView.matchParentSideBorders().alignParentTop().done() + + + // Full screen video togggle + grid.onClick { + ControlsViewModel.shared.toggleFullScreen() + } + + ControlsViewModel.shared.fullScreenMode.observe { (fullScreen) in + if (self.isHidden) { + return + } + self.grid.removeConstraints().done() + if (fullScreen == true) { + self.grid.removeFromSuperview() + PhoneMainView.instance().mainViewController.view?.addSubview(self.grid) + self.grid.matchParentDimmensions().center().done() + self.grid.reloadData() // Cauz of the frames + } else { + self.grid.removeFromSuperview() + self.addSubview(self.grid) + self.grid.matchParentSideBorders().alignUnder(view:headerView,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done() + self.grid.reloadData() + } + } + } + + + // UICollectionView related delegates + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { + return inter_cell + } + + func collectionView(_ collectionView: UICollectionView, layout + collectionViewLayout: UICollectionViewLayout, + minimumLineSpacingForSectionAt section: Int) -> CGFloat { + return inter_cell + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + guard let participantsCount = conferenceViewModel?.conferenceParticipantDevices.value?.count else { + return .zero + } + return participantsCount + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell:VoipGridParticipantCell = collectionView.dequeueReusableCell(withReuseIdentifier: "VoipGridParticipantCell", for: indexPath) as! VoipGridParticipantCell + guard let participantData = conferenceViewModel?.conferenceParticipantDevices.value?[indexPath.row] else { + return cell + } + cell.participantData = participantData + return cell + } + + func collectionView(_ collectionView: UICollectionView, + layout collectionViewLayout: UICollectionViewLayout, + sizeForItemAt indexPath: IndexPath) -> CGSize { + + guard let participantsCount = conferenceViewModel?.conferenceParticipantDevices.value?.count else { + return .zero + } + + var cellSize : CGSize = .zero + let availableSize = collectionView.frame.size + + if (participantsCount == 1) { + cellSize = availableSize + } else if (participantsCount == 2) { + cellSize = CGSize(width:availableSize.width, height:availableSize.height/2) + cellSize.height -= inter_cell/2 + } else if (participantsCount == 3) { + cellSize = CGSize(width:availableSize.width, height:availableSize.height/3) + cellSize.height -= 2*inter_cell/3 + } else if (participantsCount == 4) { + cellSize = CGSize(width:availableSize.width/2, height:availableSize.height/2) + cellSize.height -= inter_cell/2 + cellSize.width -= inter_cell/2 + } else if (participantsCount == 5) { + if (indexPath.row == 4) { // last (local) participant takes full width (under discussion) + cellSize = CGSize(width:availableSize.width, height:availableSize.height/3) + } else { + cellSize = CGSize(width:availableSize.width/2, height:availableSize.height/3) + cellSize.width -= inter_cell/2 + } + cellSize.height -= 2*inter_cell/3 + } else { + cellSize = CGSize(width:availableSize.width/2, height:availableSize.height/CGFloat((participantsCount/2))) + cellSize.height -= 2*inter_cell/3 + cellSize.width -= inter_cell/2 + } + return cellSize + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + + +} diff --git a/Classes/Voip/Views/Fragments/Conference/VoipGridParticipantCell.swift b/Classes/Voip/Views/Fragments/Conference/VoipGridParticipantCell.swift new file mode 100644 index 000000000..6339a0d15 --- /dev/null +++ b/Classes/Voip/Views/Fragments/Conference/VoipGridParticipantCell.swift @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipGridParticipantCell: UICollectionViewCell { + + // Layout Constants + let corner_radius = 20.0 + static let avatar_size = 80.0 + let switch_camera_button_margins = 8.0 + let switch_camera_button_size = 30 + + + let videoView = UIView() + let avatar = Avatar(diameter:VoipGridParticipantCell.avatar_size,color:VoipTheme.voipBackgroundColor, textStyle: VoipTheme.call_generated_avatar_medium) + let pause = UIImageView(image: UIImage(named: "voip_pause")?.tinted(with: .white)) + let switchCamera = UIImageView(image: UIImage(named:"voip_change_camera")?.tinted(with:.white)) + let displayName = StyledLabel(VoipTheme.conference_participant_name_font_grid) + let pauseLabel = StyledLabel(VoipTheme.conference_participant_name_font_grid,VoipTexts.conference_participant_paused) + + var participantData: ConferenceParticipantDeviceData? = nil { + didSet { + if let data = participantData { + data.isInConference.readCurrentAndObserve { (isIn) in + self.updateBackground() + self.pause.isHidden = isIn == true + self.pauseLabel.isHidden = self.pause.isHidden + } + data.videoEnabled.readCurrentAndObserve { (videoEnabled) in + self.updateBackground() + if (videoEnabled == true) { + data.setVideoView(view: self.videoView) + self.avatar.isHidden = true + } else { + self.avatar.isHidden = false + } + self.switchCamera.isHidden = videoEnabled != true || !data.isSwitchCameraAvailable() + } + data.participantDevice.address.map { + avatar.fillFromAddress(address: $0) + if let displayName = $0.addressBookEnhancedDisplayName() { + self.displayName.text = displayName + } + } + data.activeSpeaker.readCurrentAndObserve { (active) in + if (active == true) { + self.layer.borderWidth = 2 + } else { + self.layer.borderWidth = 0 + } + } + } + } + } + + func updateBackground() { + if let data = participantData { + if (data.isInConference.value != true) { + self.contentView.backgroundColor = VoipTheme.voip_conference_participant_paused_background + } else if (data.videoEnabled.value == true) { + self.contentView.backgroundColor = .black + } else { + self.contentView.backgroundColor = VoipTheme.voipParticipantBackgroundColor.get() + + } + } + } + + + override init(frame:CGRect) { + super.init(frame:.zero) + layer.cornerRadius = corner_radius + clipsToBounds = true + layer.borderColor = VoipTheme.primary_color.cgColor + + contentView.addSubview(videoView) + videoView.matchParentDimmensions().done() + + contentView.addSubview(avatar) + avatar.size(w: VoipGridParticipantCell.avatar_size, h: VoipGridParticipantCell.avatar_size).center().done() + + contentView.addSubview(pause) + pause.layer.cornerRadius = VoipGridParticipantCell.avatar_size/2 + pause.clipsToBounds = true + pause.backgroundColor = VoipTheme.voip_gray + pause.size(w: VoipGridParticipantCell.avatar_size, h: VoipGridParticipantCell.avatar_size).center().done() + + contentView.addSubview(switchCamera) + switchCamera.alignParentTop(withMargin: switch_camera_button_margins).alignParentRight(withMargin: switch_camera_button_margins).square(switch_camera_button_size).done() + switchCamera.contentMode = .scaleAspectFit + + switchCamera.onClick { + Core.get().toggleCamera() + } + + contentView.addSubview(displayName) + displayName.alignParentLeft(withMargin:ActiveCallView.bottom_displayname_margin_left).alignParentBottom(withMargin:ActiveCallView.bottom_displayname_margin_bottom).done() + + contentView.addSubview(pauseLabel) + pauseLabel.toRightOf(displayName).alignParentBottom(withMargin:ActiveCallView.bottom_displayname_margin_bottom).done() + + contentView.matchParentDimmensions().done() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Classes/Voip/Views/Fragments/ControlsView.swift b/Classes/Voip/Views/Fragments/ControlsView.swift new file mode 100644 index 000000000..58c285aa5 --- /dev/null +++ b/Classes/Voip/Views/Fragments/ControlsView.swift @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import UIKit + +class ControlsView: UIStackView { + + // Layout constants + static let controls_button_spacing = 5.0 + + init (showVideo:Bool) { + super.init(frame: .zero) + axis = .horizontal + distribution = .equalSpacing + alignment = .center + spacing = ControlsView.controls_button_spacing + + // Mute + let mute = CallControlButton(buttonTheme: VoipTheme.call_mute, onClickAction: { + ControlsViewModel.shared.toggleMuteMicrophone() + }) + addArrangedSubview(mute) + ControlsViewModel.shared.isMicrophoneMuted.readCurrentAndObserve { (muted) in + mute.isSelected = muted == true + } + ControlsViewModel.shared.isMuteMicrophoneEnabled.readCurrentAndObserve { (enabled) in + mute.isEnabled = enabled == true + } + + // Speaker + let speaker = CallControlButton(buttonTheme: VoipTheme.call_speaker, onClickAction: { + ControlsViewModel.shared.toggleSpeaker() + }) + addArrangedSubview(speaker) + ControlsViewModel.shared.isSpeakerSelected.readCurrentAndObserve { (selected) in + speaker.isSelected = selected == true + } + + // Audio routes + let routes = CallControlButton(buttonTheme: VoipTheme.call_audio_route, onClickAction: { + ControlsViewModel.shared.toggleRoutesMenu() + }) + addArrangedSubview(routes) + ControlsViewModel.shared.audioRoutesSelected.readCurrentAndObserve { (selected) in + routes.isSelected = selected == true + } + + ControlsViewModel.shared.audioRoutesEnabled.readCurrentAndObserve { (routesEnabled) in + speaker.isHidden = routesEnabled == true + routes.isHidden = !speaker.isHidden + } + + // Video + if (showVideo) { + let video = CallControlButton(buttonTheme: VoipTheme.call_video, onClickAction: { + if AVCaptureDevice.authorizationStatus(for: .video) == .authorized { + ControlsViewModel.shared.toggleVideo() + } else { + AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in + if granted { + ControlsViewModel.shared.toggleVideo() + } else { + VoipDialog(message:VoipTexts.camera_required_for_video).show() + } + }) + } + }) + addArrangedSubview(video) + video.showActivityIndicatorDataSource = ControlsViewModel.shared.isVideoUpdateInProgress + ControlsViewModel.shared.isVideoEnabled.readCurrentAndObserve { (selected) in + video.isSelected = selected == true + } + ControlsViewModel.shared.isVideoAvailable.readCurrentAndObserve { (available) in + video.isEnabled = available == true && ControlsViewModel.shared.isVideoUpdateInProgress.value != true + } + ControlsViewModel.shared.isVideoUpdateInProgress.readCurrentAndObserve { (updateInProgress) in + video.isEnabled = updateInProgress != true && ControlsViewModel.shared.isVideoAvailable.value == true + } + + } + + height(CallControlButton.default_size).done() + + } + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + + diff --git a/Classes/Voip/Views/Fragments/DismissableView.swift b/Classes/Voip/Views/Fragments/DismissableView.swift new file mode 100644 index 000000000..9bb1f7d9b --- /dev/null +++ b/Classes/Voip/Views/Fragments/DismissableView.swift @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation + +class DismissableView: UIView { + + // Layout constants + let header_height = 60.0 + let title_left_margin = 20 + let dismiss_right_margin = 10 + let dismiss_icon_inset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + let headerView = UIView() + let contentView = UIView() + var dismiss : CallControlButton? = nil + + init(title:String) { + super.init(frame:.zero) + + headerView.backgroundColor = VoipTheme.voipToolbarBackgroundColor.get() + self.addSubview(headerView) + headerView.matchParentSideBorders().alignParentTop().height(header_height).done() + + dismiss = CallControlButton(imageInset:dismiss_icon_inset,buttonTheme: VoipTheme.voip_cancel, onClickAction: { + self.removeFromSuperview() + }) + headerView.addSubview(dismiss!) + dismiss?.alignParentRight(withMargin: dismiss_right_margin).centerY().done() + + let title = StyledLabel(VoipTheme.calls_list_header_font,title) + headerView.addSubview(title) + title.alignParentTop().alignParentLeft(withMargin: title_left_margin).centerY().done() + + self.addSubview(contentView) + contentView.alignUnder(view: headerView).matchParentSideBorders().alignParentBottom().done() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Classes/Voip/Views/Fragments/IncomingOuntgoingCommonView.swift b/Classes/Voip/Views/Fragments/IncomingOuntgoingCommonView.swift new file mode 100644 index 000000000..40a21da83 --- /dev/null +++ b/Classes/Voip/Views/Fragments/IncomingOuntgoingCommonView.swift @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import linphonesw + +@objc class IncomingOutgoingCommonView: UIViewController { // Shared between IncomingCallView and OutgoingCallVIew (all upper part except control buttons) + + // Layout constants + static let spinner_size = 50 + static let spinner_margin_top = 8.0 + static let call_type_margin_top = 10.0 + static let duration_margin_top = 10.0 + static let display_name_height = 20.0 + static let display_name_margin_top = 18.0 + static let sip_address_height = 16.0 + static let sip_address_margin_top = 6.0 + static let answer_decline_inset = UIEdgeInsets(top: 2, left: 7, bottom: 2, right: 7) + + let spinner = RotatingSpinner() + let duration = CallTimer(nil, VoipTheme.call_header_subtitle) + let avatar = Avatar(diameter: CGFloat(Avatar.diameter_for_call_views),color:VoipTheme.voipParticipantBackgroundColor, textStyle: VoipTheme.call_generated_avatar_large) + let displayName = StyledLabel(VoipTheme.call_header_title) + let sipAddress = StyledLabel(VoipTheme.call_header_subtitle) + + var callData: CallData? = nil { + didSet { + duration.call = callData?.call + callData?.call.remoteAddress.map { + avatar.fillFromAddress(address: $0) + displayName.text = $0.addressBookEnhancedDisplayName() + sipAddress.text = $0.asStringUriOnly() + } + } + } + + func viewDidLoad(forCallType:String) { + super.viewDidLoad() + + view.backgroundColor = VoipTheme.voipBackgroundColor.get() + + view.addSubview(spinner) + spinner.square(IncomingOutgoingCommonView.spinner_size).matchParentSideBorders().alignParentTop(withMargin:IncomingOutgoingCommonView.spinner_margin_top + UIDevice.notchHeight()).done() + + let callType = StyledLabel(VoipTheme.call_header_title,forCallType) + view.addSubview(callType) + callType.matchParentSideBorders().alignUnder(view:spinner,withMargin:IncomingOutgoingCommonView.call_type_margin_top).done() + + self.view.addSubview(duration) + duration.matchParentSideBorders().alignUnder(view:callType,withMargin:IncomingOutgoingCommonView.duration_margin_top).done() + + // Center : Avatar + Display name + SIP Address + let centerSection = UIView() + centerSection.addSubview(avatar) + avatar.square(Avatar.diameter_for_call_views).center().done() + centerSection.addSubview(displayName) + displayName.height(IncomingOutgoingCommonView.display_name_height).matchParentSideBorders().alignUnder(view:avatar,withMargin:IncomingOutgoingCommonView.display_name_margin_top).done() + centerSection.addSubview(sipAddress) + sipAddress.height(IncomingOutgoingCommonView.sip_address_height).matchParentSideBorders().alignUnder(view:displayName,withMargin:IncomingOutgoingCommonView.sip_address_margin_top).done() + self.view.addSubview(centerSection) + centerSection.matchParentSideBorders().center().done() + + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + spinner.startRotation() + } + + override func viewWillDisappear(_ animated: Bool) { + spinner.stopRotation() + super.viewWillDisappear(animated) + } + + @objc func setCall(call:OpaquePointer) { + callData = CallData(call: Call.getSwiftObject(cObject: call)) + } + +} diff --git a/Classes/Voip/Views/Fragments/LocalVideoView.swift b/Classes/Voip/Views/Fragments/LocalVideoView.swift new file mode 100644 index 000000000..dba74002d --- /dev/null +++ b/Classes/Voip/Views/Fragments/LocalVideoView.swift @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class LocalVideoView: UIView { + + //Layout constants + let corner_radius = 15.0 + let aspect_ratio = 4.0/3.0 + let switch_camera_button_margins = 8.0 + let switch_camera_button_size = 30 + + var width : CGFloat + + var dragZone : UIView? { + didSet { + let panGesture = UIPanGestureRecognizer(target: self, action: #selector(drag)) + isUserInteractionEnabled = true + addGestureRecognizer(panGesture) + } + } + + let switchCamera = UIImageView(image: UIImage(named:"voip_change_camera")?.tinted(with:.white)) + + var callData: CallData? = nil { + didSet { + callData?.isRemotelyRecorded.readCurrentAndObserve(onChange: { (isRemotelyRecording) in + self.isHidden = !(isRemotelyRecording == true) + }) + } + } + + required init?(coder: NSCoder) { + width = 0.0 + super.init(coder: coder) + } + + init (width:CGFloat) { + self.width = width + super.init(frame: .zero) + layer.cornerRadius = corner_radius + clipsToBounds = true + + addSubview(switchCamera) + switchCamera.alignParentTop(withMargin: switch_camera_button_margins).alignParentRight(withMargin: switch_camera_button_margins).square(switch_camera_button_size).done() + switchCamera.contentMode = .scaleAspectFit + + switchCamera.onClick { + Core.get().toggleCamera() + } + setSizeConstraint() + } + + func setSizeConstraint() { + size(w: width, h: width*aspect_ratio).done() + } + + + @objc func drag(_ sender:UIPanGestureRecognizer){ + dragZone?.bringSubviewToFront(self) + let translation = sender.translation(in: dragZone) + center = CGPoint(x: center.x + translation.x, y: center.y + translation.y) + sender.setTranslation(CGPoint.zero, in: dragZone) + } + +} diff --git a/Classes/Voip/Views/Fragments/NumpadView.swift b/Classes/Voip/Views/Fragments/NumpadView.swift new file mode 100644 index 000000000..e949e82f8 --- /dev/null +++ b/Classes/Voip/Views/Fragments/NumpadView.swift @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +@objc class NumpadView: UIView { + + // Layout constants + let side_margins = 10.0 + let margin_top = 100.0 + let button_size = 70 + let button_vertical_space = 17.0 + let button_horizontal_space = 14.0 + let digit_icon_inset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20) + let corner_radius = 20.0 + let pad_height = 550 + let side_padding = 50.0 + + + init(superView:UIView, callData:CallData, onDismissAction : @escaping ()->Void) { + super.init(frame:.zero) + backgroundColor = VoipTheme.voip_translucent_popup_background + layer.cornerRadius = corner_radius + clipsToBounds = true + superView.addSubview(self) + snp.makeConstraints { make in + make.left.equalToSuperview().offset(side_margins) + make.right.equalToSuperview().offset(-side_margins) + make.height.equalTo(pad_height) + make.bottom.equalToSuperview().offset(-side_margins) + } + callData.callState.observe { state in + if (state == Call.State.End) { + onDismissAction() + } + } + + // Hide numpad button + let hide = CallControlButton(buttonTheme: VoipTheme.voip_cancel_light, onClickAction: { + onDismissAction() + }) + addSubview(hide) + hide.alignParentRight(withMargin: side_margins).alignParentTop(withMargin: side_margins).done() + + // DTMF History : + + let eneteredDtmf = StyledLabel(VoipTheme.dtmf_label) + addSubview(eneteredDtmf) + _ = eneteredDtmf.matchParentSideBorders().alignUnder(view:hide,withMargin:side_margins) + callData.enteredDTMF.readCurrentAndObserve { (dtmfs) in + eneteredDtmf.text = dtmfs + } + + // Digit buttons + + let allRows = UIStackView() + allRows.axis = .vertical + allRows.distribution = .equalSpacing + allRows.alignment = .center + allRows.spacing = button_vertical_space + allRows.layoutMargins = UIEdgeInsets(top: 0, left: side_padding, bottom: 0, right: side_padding) + allRows.isLayoutMarginsRelativeArrangement = true + addSubview(allRows) + _ = allRows.matchParentSideBorders().alignUnder(view:eneteredDtmf,withMargin: side_margins) + + + for key in [["1","2","3"],["4","5","6"],["7","8","9"],["*","0","#"]] { + let newRow = addRow(allRows: allRows) + for subkey in key { + let digit = CallControlButton(width:button_size, height:button_size, imageInset: digit_icon_inset, buttonTheme: ButtonTheme(tintableStateIcons:[UIButton.State.normal.rawValue : TintableIcon(name: "voip_numpad_\(iconNameForDigit(digit: subkey))")],backgroundStateColors:VoipTheme.numpad_digit_background), onClickAction: { + callData.sendDTMF(dtmf: "\(subkey)") + }) + newRow.addArrangedSubview(digit) + } + } + } + + func iconNameForDigit(digit:String) -> String { + if (digit == "*") { + return "star" + } + if (digit == "#") { + return "hash" + } + return digit + } + + func addRow(allRows:UIStackView) -> UIStackView { + let row = UIStackView() + row.axis = .horizontal + row.distribution = .equalSpacing + row.alignment = .center + row.spacing = button_vertical_space + row.isLayoutMarginsRelativeArrangement = true + allRows.addArrangedSubview(row) + return row + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + +} + + + diff --git a/Classes/Voip/Views/Fragments/ParticipantsList/ParticipantsListView.swift b/Classes/Voip/Views/Fragments/ParticipantsList/ParticipantsListView.swift new file mode 100644 index 000000000..b81357bb7 --- /dev/null +++ b/Classes/Voip/Views/Fragments/ParticipantsList/ParticipantsListView.swift @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import linphonesw + +@objc class ParticipantsListView: DismissableView, UITableViewDataSource { + + // Layout constants + + + let participantsListTableView = UITableView() + + var callsDataObserver : MutableLiveDataOnChangeClosure<[CallData]>? = nil + + init() { + super.init(title: VoipTexts.call_action_participants_list) + + + let edit = CallControlButton(buttonTheme: VoipTheme.voip_edit, onClickAction: { + // Todo (not implemented in Android yet as of 22.11.21) + }) + super.headerView.addSubview(edit) + edit.centerY().done() + super.dismiss?.toRightOf(edit,withLeftMargin: dismiss_right_margin).centerY().done() + + + // ParticipantsList + super.contentView.addSubview(participantsListTableView) + participantsListTableView.matchParentDimmensions().done() + participantsListTableView.dataSource = self + participantsListTableView.register(VoipParticipantCell.self, forCellReuseIdentifier: "VoipParticipantCell") + participantsListTableView.allowsSelection = false + if #available(iOS 15.0, *) { + participantsListTableView.allowsFocus = false + } + participantsListTableView.separatorStyle = .singleLine + participantsListTableView.separatorColor = .white + + + CallsViewModel.shared.callsData.readCurrentAndObserve{ (callsData) in + self.participantsListTableView.reloadData() + } + + ConferenceViewModel.shared.isMeAdmin.readCurrentAndObserve { (meAdmin) in + edit.isHidden = meAdmin != true + } + + } + + + // TableView datasource delegate + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + guard let participants = ConferenceViewModel.shared.conferenceParticipants.value else { + return 0 + } + return participants.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell:VoipParticipantCell = tableView.dequeueReusableCell(withIdentifier: "VoipParticipantCell") as! VoipParticipantCell + guard let participantData = ConferenceViewModel.shared.conferenceParticipants.value?[indexPath.row] else { + return cell + } + cell.selectionStyle = .none + cell.participantData = participantData + cell.owningParticpantsListView = self + return cell + } + + // View controller + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Classes/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift b/Classes/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift new file mode 100644 index 000000000..c57a4e7a0 --- /dev/null +++ b/Classes/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipParticipantCell: UITableViewCell { + + // Layout Constants + + let dismiss_icon_inset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + let dismiss_right_margin = 10 + let check_box_size = 20.0 + let cell_height = 80.0 + let avatar_left_margin = 15.0 + let texts_left_margin = 20.0 + + + let avatar = Avatar(diameter:VoipCallCell.avatar_size,color:VoipTheme.primaryTextColor, textStyle: VoipTheme.call_generated_avatar_small) + let displayName = StyledLabel(VoipTheme.conference_participant_name_font) + let sipAddress = StyledLabel(VoipTheme.conference_participant_sip_uri_font) + let isAdminView = UIView() + var removePart : CallControlButton? + + + var owningParticpantsListView : ParticipantsListView? = nil + + var participantData: ConferenceParticipantData? = nil { + didSet { + if let data = participantData { + avatar.fillFromAddress(address: data.participant.address!) + displayName.text = data.participant.address?.addressBookEnhancedDisplayName() + sipAddress.text = data.participant.address?.asStringUriOnly() + data.isAdmin.readCurrentAndObserve { (isAdmin) in self.isAdminView.isHidden = isAdmin != true + + } + data.isMeAdmin.readCurrentAndObserve { (isMeAdmin) in + self.removePart!.isHidden = isMeAdmin != true + self.isAdminView.alpha = isMeAdmin == true ? 1.0 : 0.6 + self.isAdminView.isUserInteractionEnabled = isMeAdmin == true + } + self.isAdminView.onClick { + data.conference.setParticipantAdminStatus(participant: data.participant, isAdmin: data.isAdmin.value != true) + self.owningParticpantsListView?.participantsListTableView.reloadData() + } + self.removePart?.onClick { + try?data.conference.removeParticipant(participant: data.participant) + self.owningParticpantsListView?.participantsListTableView.reloadData() + } + } + } + } + + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + contentView.height(cell_height).matchParentSideBorders().done() + + + contentView.addSubview(avatar) + avatar.size(w: VoipCallCell.avatar_size, h: VoipCallCell.avatar_size).centerY().alignParentLeft(withMargin: avatar_left_margin).done() + + let nameAddress = UIView() + nameAddress.addSubview(displayName) + nameAddress.addSubview(sipAddress) + displayName.alignParentTop().done() + sipAddress.alignUnder(view: displayName).done() + contentView.addSubview(nameAddress) + nameAddress.toRightOf(avatar,withLeftMargin:texts_left_margin).wrapContentY().centerY().done() + + removePart = CallControlButton(imageInset:dismiss_icon_inset,buttonTheme: VoipTheme.voip_cancel, onClickAction: { + self.removeFromSuperview() + }) + contentView.addSubview(removePart!) + removePart!.alignParentRight(withMargin: dismiss_right_margin).centerY().done() + + let isAdminLabel = StyledLabel(VoipTheme.conference_participant_admin_label,VoipTexts.chat_room_group_info_admin) + isAdminView.addSubview(isAdminLabel) + isAdminLabel.alignParentRight().centerY().done() + + let isAdminCheck = UIImageView(image: UIImage(named:("check_unselected"))) + isAdminView.addSubview(isAdminCheck) + isAdminCheck.size(w: check_box_size, h: check_box_size).toLeftOf(isAdminLabel).done() + + contentView.addSubview(isAdminView) + isAdminView.height(check_box_size).toLeftOf(removePart!).centerY().done() + + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Classes/Voip/Views/Fragments/PausedCallOrConferenceView.swift b/Classes/Voip/Views/Fragments/PausedCallOrConferenceView.swift new file mode 100644 index 000000000..45a1a9a98 --- /dev/null +++ b/Classes/Voip/Views/Fragments/PausedCallOrConferenceView.swift @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class PausedCallOrConferenceView: UIView { + + // Layout constants + let icon_size = 200 + let icon_padding = 80.0 + let title_margin_top = 20 + + var icon : UIImageView? = nil + let title = StyledLabel(VoipTheme.call_or_conference_title) + let subtitle = StyledLabel(VoipTheme.call_or_conference_subtitle) + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init (iconName:String, titleText:String, subTitleText:String? = nil) { + super.init(frame: .zero) + + backgroundColor = VoipTheme.voip_translucent_popup_background + + let centeredView = UIView() + icon = UIImageView(image: UIImage(named:iconName)?.withPadding(padding: icon_padding)) + icon!.backgroundColor = VoipTheme.primary_color + icon!.layer.cornerRadius = CGFloat(icon_size/2) + icon!.clipsToBounds = true + icon!.contentMode = .scaleAspectFit + centeredView.addSubview(icon!) + icon!.square(icon_size).centerX().done() + + title.numberOfLines = 0 + centeredView.addSubview(title) + title.alignUnder(view:icon!, withMargin:title_margin_top).matchParentSideBorders().done() + title.text = titleText + + subtitle.numberOfLines = 0 + centeredView.addSubview(subtitle) + subtitle.alignUnder(view: title).matchParentSideBorders().done() + subtitle.text = subTitleText + + self.addSubview(centeredView) + centeredView.center().matchParentSideBorders().wrapContentY().done() + + } + +} diff --git a/Classes/Voip/Views/Fragments/RemotelyRecording.swift b/Classes/Voip/Views/Fragments/RemotelyRecording.swift new file mode 100644 index 000000000..a3e957865 --- /dev/null +++ b/Classes/Voip/Views/Fragments/RemotelyRecording.swift @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class RemotelyRecordingView: UIView { + + let label = StyledLabel(VoipTheme.call_remote_recording) + let icon = UIImageView(image: UIImage(named:"voip_remote_recording")) + + var isRemotelyRecorded: MutableLiveData? = nil { + didSet { + isRemotelyRecorded?.readCurrentAndObserve(onChange: { (isRemotelyRecording) in + self.isHidden = !(isRemotelyRecording == true) + }) + } + } + + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init (height:Int, text:String) { + super.init(frame: .zero) + backgroundColor = VoipTheme.dark_grey_color + layer.cornerRadius = CGFloat(height/2) + clipsToBounds = true + + addSubview(label) + label.center().height(CGFloat(height)).done() + label.text = text + + addSubview(icon) + icon.square(height).toLeftOf(label).done() + + isHidden = true + + } + +} diff --git a/Classes/Voip/Views/Fragments/VoipExtraButtonsView.swift b/Classes/Voip/Views/Fragments/VoipExtraButtonsView.swift new file mode 100644 index 000000000..2a7deca61 --- /dev/null +++ b/Classes/Voip/Views/Fragments/VoipExtraButtonsView.swift @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import UIKit +import Foundation +import SnapKit +import linphonesw + +class VoipExtraButtonsView: UIStackView { + + //Layout constants + let height = 200.0 + let corner_radius = 20.0 + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + init () { + super.init(frame: .zero) + + axis = .vertical + distribution = .fillEqually + alignment = .center + + layer.cornerRadius = corner_radius + clipsToBounds = true + + backgroundColor = VoipTheme.voipExtraButtonsBackgroundColor.get() + height(height).done() + + let row1 = UIStackView() + row1.axis = .horizontal + row1.distribution = .fillEqually + row1.alignment = .center + + + // First row + let numpad = VoipExtraButton(text: VoipTexts.call_action_numpad, buttonTheme: VoipTheme.call_action("voip_call_numpad"),onClickAction: { + ControlsViewModel.shared.numpadVisible.notifyAllObservers(with: true) + }) + row1.addArrangedSubview(numpad) + + let stats = VoipExtraButton(text: VoipTexts.call_action_statistics, buttonTheme: VoipTheme.call_action("voip_call_stats"),onClickAction: { + ControlsViewModel.shared.callStatsVisible.notifyAllObservers(with: true) + }) + row1.addArrangedSubview(stats) + + let chats = VoipExtraButton(text: VoipTexts.call_action_chat, buttonTheme: VoipTheme.call_action("voip_call_chat"),withbBoucinCounterDataSource:CallsViewModel.shared.currentCallUnreadChatMessageCount, onClickAction: { + ControlsViewModel.shared.goToChatEvent.notifyAllObservers(with: true) + }) + row1.addArrangedSubview(chats) + + addArrangedSubview(row1) + row1.matchParentSideBorders().done() + + // Second row + + let row2 = UIStackView() + row2.axis = .horizontal + 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()) + }) + row2.addArrangedSubview(transfer) + + let participants = VoipExtraButton(text: VoipTexts.call_action_participants_list, buttonTheme: VoipTheme.call_action("voip_call_participants"),onClickAction: { + ControlsViewModel.shared.goToConferenceParticipantsListEvent.notifyAllObservers(with: true) + }) + row2.addArrangedSubview(participants) + + + let addcall = VoipExtraButton(text: VoipTexts.call_action_add_call, buttonTheme: VoipTheme.call_action("voip_call_add"),onClickAction: { + let view: DialerView = self.VIEW(DialerView.compositeViewDescription()); + view.setAddress("") + CallManager.instance().nextCallIsTransfer = false + PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) + }) + row2.addArrangedSubview(addcall) + + + let layoutselect = VoipExtraButton(text: VoipTexts.call_action_change_conf_layout, buttonTheme: VoipTheme.call_action("voip_conference_mosaic"),onClickAction: { + ControlsViewModel.shared.goToConferenceLayoutSettings.notifyAllObservers(with: true) + }) + row2.addArrangedSubview(layoutselect) + + 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) + }) + row2.addArrangedSubview(calls) + + addArrangedSubview(row2) + row2.matchParentSideBorders().done() + + ConferenceViewModel.shared.isInConference.readCurrentAndObserve { (isIn) in + participants.isHidden = isIn != true + layoutselect.isHidden = isIn != true + transfer.isHidden = isIn == true + addcall.isHidden = isIn == true + } + + } + + func refresh() { + CallsViewModel.shared.currentCallUnreadChatMessageCount.notifyValue() + CallsViewModel.shared.inactiveCallsCount.notifyValue() + } + + + +} diff --git a/Classes/LinphoneUI/UIHangUpButton.h b/Classes/Voip/Views/SharedLayoutConstants.swift similarity index 79% rename from Classes/LinphoneUI/UIHangUpButton.h rename to Classes/Voip/Views/SharedLayoutConstants.swift index 784369828..163d8ba07 100644 --- a/Classes/LinphoneUI/UIHangUpButton.h +++ b/Classes/Voip/Views/SharedLayoutConstants.swift @@ -1,7 +1,7 @@ /* * Copyright (c) 2010-2020 Belledonne Communications SARL. * - * This file is part of linphone-iphone + * This file is part of linphone-iphone * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,13 +17,11 @@ * along with this program. If not, see . */ -#import -#import "UIIconButton.h" +import Foundation + +class SharedLayoutConstants { + static let buttons_bottom_margin = 15 + static let margin_call_view_side_controls_buttons = 12 -@interface UIHangUpButton : UIIconButton { } - -- (void)update; - -@end diff --git a/Classes/Voip/VoipDialog.swift b/Classes/Voip/VoipDialog.swift new file mode 100644 index 000000000..8488e8764 --- /dev/null +++ b/Classes/Voip/VoipDialog.swift @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import UIKit + +class VoipDialog : UIView{ + + // Layout constants + let center_corner_radius = 7.0 + let title_margin_top = 20 + let button_margin = 20.0 + let button_width = 135.0 + let button_height = 40.0 + let button_radius = 3.0 + let button_spacing = 15.0 + + let center_view_sides_margin = 13.0 + + + let title = StyledLabel(VoipTheme.basic_popup_title) + + init(message:String, givenButtons:[ButtonAttributes]? = nil) { + + super.init(frame: .zero) + backgroundColor = VoipTheme.voip_translucent_popup_background + + let centerView = UIView() + centerView.backgroundColor = VoipTheme.dark_grey_color.withAlphaComponent(0.8) + centerView.layer.cornerRadius = center_corner_radius + centerView.clipsToBounds = true + addSubview(centerView) + + title.numberOfLines = 0 + centerView.addSubview(title) + title.alignParentTop(withMargin:title_margin_top).matchParentSideBorders().done() + title.text = message + + let buttonsView = UIStackView() + buttonsView.axis = .horizontal + buttonsView.spacing = button_spacing + + var buttons = givenButtons + + if (buttons == nil) { // assuming info popup, just putting an ok button + let ok = ButtonAttributes(text:VoipTexts.ok, action: {}, isDestructive:false) + buttons = [ok] + } + + buttons?.forEach { + let b = ButtonWithStateBackgrounds(backgroundStateColors: $0.isDestructive ? VoipTheme.primary_colors_background_gray : VoipTheme.primary_colors_background) + b.setTitle($0.text, for: .normal) + b.layer.cornerRadius = button_radius + b.clipsToBounds = true + buttonsView.addArrangedSubview(b) + b.applyTitleStyle(VoipTheme.big_button) + let action = $0.action + b.onClick { + self.removeFromSuperview() + action() + } + b.size(w: button_width,h: button_height).done() + } + centerView.addSubview(buttonsView) + buttonsView.alignUnder(view:title,withMargin:button_margin).alignParentBottom(withMargin:button_margin).centerX().done() + + + + centerView.matchParentSideBorders(insetedByDx: center_view_sides_margin).center().done() + } + + func show() { + rootVC()?.view.addSubview(self) + matchParentDimmensions().done() + } + + private func rootVC() -> UIViewController? { + return UIApplication.getTopMostViewController() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + +} + +struct ButtonAttributes { + let text:String + let action: (()->Void) + let isDestructive: Bool +} diff --git a/Classes/Voip/Widgets/Avatar.swift b/Classes/Voip/Widgets/Avatar.swift new file mode 100644 index 000000000..8e4084fa5 --- /dev/null +++ b/Classes/Voip/Widgets/Avatar.swift @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +class Avatar : UIImageView { + + static let diameter_for_call_views = 191 + + required init?(coder: NSCoder) { + initialsLabel = StyledLabel(VoipTheme.call_generated_avatar_large) + super.init(coder: coder) + } + + let initialsLabel: StyledLabel + + init (diameter: CGFloat, color:LightDarkColor,textStyle:TextStyle) { + initialsLabel = StyledLabel(textStyle) + super.init(frame: .zero) + layer.cornerRadius = diameter/2.0 + clipsToBounds = true + self.backgroundColor = color.get() + addSubview(initialsLabel) + _ = initialsLabel.matchParentSideBorders().matchParentHeight() + } + + + + func fillFromAddress(address:Address) { + if let image = address.contact()?.avatar() { + self.image = image + initialsLabel.isHidden = true + } else { + self.image = nil + initialsLabel.text = address.initials() + initialsLabel.isHidden = false + } + } + + + +} + diff --git a/Classes/Voip/Widgets/BouncingCounter.swift b/Classes/Voip/Widgets/BouncingCounter.swift new file mode 100644 index 000000000..a07f5124b --- /dev/null +++ b/Classes/Voip/Widgets/BouncingCounter.swift @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import UIKit +import SwiftUI + +class BouncingCounter : UIBouncingView { + + // Layout constants + let size = 20.0 + let center_offset = 20 + + let owningButton : UIButton + let label : StyledLabel + + var dataSource : MutableLiveData? { + didSet { + if let dataSource = dataSource { + self.size(w:self.size,h:self.size).matchCenterXOf(view: self.owningButton, withDx: self.center_offset).matchCenterYOf(view: self.owningButton, withDy: -self.center_offset).done() + dataSource.readCurrentAndObserve { (value) in + if (value! > 0) { + self.label.text = value! < 100 ? String(value!) : "99+" + self.isHidden = true // to force legacy startAnimating to unhide and animate + self.startAnimating(true) + } else { + self.isHidden = false // to force legacy startAnimating to hide and animate + self.stopAnimating(true) + } + } + } else { + self.isHidden = false + self.stopAnimating(true) + } + } + } + + + init (inButton:UIButton) { + owningButton = inButton + label = StyledLabel(VoipTheme.unread_count_font) + super.init(frame:.zero) + addSubview(label) + label.matchParentDimmensions().done() + backgroundColor = VoipTheme.primary_color + layer.masksToBounds = true + layer.cornerRadius = size/2 + self.isHidden = true + } + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + + +} diff --git a/Classes/Voip/Widgets/ButtonWithStateBackgrounds.swift b/Classes/Voip/Widgets/ButtonWithStateBackgrounds.swift new file mode 100644 index 000000000..fa437dc8f --- /dev/null +++ b/Classes/Voip/Widgets/ButtonWithStateBackgrounds.swift @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import UIKit +import SwiftUI + +class ButtonWithStateBackgrounds : UIButton { + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init (backgroundStateColors: [UInt: LightDarkColor]) { + super.init(frame: .zero) + backgroundStateColors.keys.forEach { (stateRawValue) in + setBackgroundColor(color: backgroundStateColors[stateRawValue]!.get(), forState: UIButton.State(rawValue: stateRawValue)) + } + } + + func setBackgroundColor(color: UIColor, forState: UIControl.State) { + UIGraphicsBeginImageContext(CGSize(width: 1, height: 1)) + UIGraphicsGetCurrentContext()!.setFillColor(color.cgColor) + UIGraphicsGetCurrentContext()!.fill(CGRect(x: 0, y: 0, width: 1, height: 1)) + let colorImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + self.setBackgroundImage(colorImage, for: forState) + } + + + +} diff --git a/Classes/Voip/Widgets/CallControlButton.swift b/Classes/Voip/Widgets/CallControlButton.swift new file mode 100644 index 000000000..03a8a4835 --- /dev/null +++ b/Classes/Voip/Widgets/CallControlButton.swift @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import UIKit +import SwiftUI + +class CallControlButton : ButtonWithStateBackgrounds { + + // Layout constants + static let default_size = 50 + static let hungup_width = 65 + + var showActivityIndicatorDataSource : MutableLiveData? = nil { + didSet { + if let showActivityIndicatorDataSource = self.showActivityIndicatorDataSource { + let spinner = UIActivityIndicatorView(style: .white) + spinner.color = VoipTheme.primary_color + self.addSubview(spinner) + spinner.matchParentDimmensions().center().done() + + showActivityIndicatorDataSource.readCurrentAndObserve { (show) in + if (show == true) { + spinner.startAnimating() + spinner.isHidden = false + self.isEnabled = false + } else { + spinner.stopAnimating() + spinner.isHidden = true + self.isEnabled = true + } + } + } + } + } + + var onClickAction : (()->Void)? = nil + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init (width:Int = CallControlButton.default_size, height:Int = CallControlButton.default_size, imageInset:UIEdgeInsets = UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2), buttonTheme: ButtonTheme, onClickAction : (()->Void)? = nil ) { + super.init(backgroundStateColors: buttonTheme.backgroundStateColors) + + layer.cornerRadius = CGFloat(height/2) + clipsToBounds = true + contentMode = .scaleAspectFit + + applyTintedIcons(tintedIcons: buttonTheme.tintableStateIcons) + + imageView?.contentMode = .scaleAspectFit + + imageEdgeInsets = imageInset + + size(w: CGFloat(width), h: CGFloat(height)).done() + + self.onClickAction = onClickAction + onClick { + self.onClickAction?() + } + + } + + func applyTintedIcons(tintedIcons: [UInt: TintableIcon]) { + tintedIcons.keys.forEach { (stateRawValue) in + let tintedIcon = tintedIcons[stateRawValue]! + UIImage(named:tintedIcon.name).map { + setImage($0.tinted(with: tintedIcon.tintColor?.get()),for: UIButton.State(rawValue: stateRawValue)) + } + } + } + + +} diff --git a/Classes/LinphoneUI/UIPauseButton.h b/Classes/Voip/Widgets/RotatingSpinner.swift similarity index 50% rename from Classes/LinphoneUI/UIPauseButton.h rename to Classes/Voip/Widgets/RotatingSpinner.swift index 0146c3174..a03f12671 100644 --- a/Classes/LinphoneUI/UIPauseButton.h +++ b/Classes/Voip/Widgets/RotatingSpinner.swift @@ -1,7 +1,7 @@ /* * Copyright (c) 2010-2020 Belledonne Communications SARL. * - * This file is part of linphone-iphone + * This file is part of linphone-iphone * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,22 +17,32 @@ * along with this program. If not, see . */ -#import "UIToggleButton.h" +import Foundation -#include "linphone/linphonecore.h" - -typedef enum _UIPauseButtonType { - UIPauseButtonType_CurrentCall, - UIPauseButtonType_Call, - UIPauseButtonType_Conference -} UIPauseButtonType; - -@interface UIPauseButton : UIToggleButton { - @private - UIPauseButtonType type; - LinphoneCall* call; +class RotatingSpinner : UIImageView { + + init () { + super.init(frame: .zero) + self.image = UIImage(named: "voip_spinner") + self.tint(UIColor.white) + self.contentMode = .scaleAspectFit + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + func startRotation() { + let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") + rotation.toValue = NSNumber(value: Double.pi * 2) + rotation.duration = 2.2 + rotation.isCumulative = true + rotation.repeatCount = Float.greatestFiniteMagnitude + self.layer.add(rotation, forKey: "rotationAnimation") + } + + func stopRotation() { + self.layer.removeAllAnimations() + } } -- (void)setType:(UIPauseButtonType) type call:(LinphoneCall*)call; - -@end diff --git a/Classes/Voip/Widgets/StyledLabel.swift b/Classes/Voip/Widgets/StyledLabel.swift new file mode 100644 index 000000000..29c15da3e --- /dev/null +++ b/Classes/Voip/Widgets/StyledLabel.swift @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation + +class StyledLabel: UILabel { + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init (_ style:TextStyle, _ text:String? = nil) { + super.init(frame: .zero) + self.text = text + applyStyle(style) + } + +} diff --git a/Classes/Voip/Widgets/UICallTimer.swift b/Classes/Voip/Widgets/UICallTimer.swift new file mode 100644 index 000000000..1eaf13ef9 --- /dev/null +++ b/Classes/Voip/Widgets/UICallTimer.swift @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import Foundation +import linphonesw + +class CallTimer : StyledLabel { + + let min_width = 50.0 + + let formatter = DateComponentsFormatter() + var call:Call? = nil { + didSet { + if (self.call != nil) { + self.format() + } + } + } + + var conference:Conference? = nil { + didSet { + if (self.call != nil) { + self.format() + } + } + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init (_ text:String?, _ style:TextStyle, _ call:Call? = nil) { + super.init(style,text) + self.call = call + formatter.unitsStyle = .positional + formatter.allowedUnits = [.minute, .second ] + formatter.zeroFormattingBehavior = [ .pad ] + Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in + self.format() + } + minWidth(min_width).done() + + } + + func format() { + guard let duration = self.call != nil ? self.call!.duration : self.conference != nil ? self.conference!.duration: nil else { + return + } + formatter.string(from: TimeInterval(duration)).map { + self.text = $0.hasPrefix("0:") ? "0" + $0 : $0 + } + } + +} diff --git a/Classes/Voip/Widgets/VoipExtraButton.swift b/Classes/Voip/Widgets/VoipExtraButton.swift new file mode 100644 index 000000000..67fce96c1 --- /dev/null +++ b/Classes/Voip/Widgets/VoipExtraButton.swift @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import Foundation +import UIKit +import SwiftUI + +class VoipExtraButton : UIButton { + + // Layout constants + let width = 60.0 + let image_size = 50.0 + let bouncing_label_size = 17.0 + + var boucingCounter : BouncingCounter? = nil + + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + init ( text:String, buttonTheme: ButtonTheme, withbBoucinCounterDataSource:MutableLiveData? = nil, onClickAction : @escaping ()->Void ) { + super.init(frame: .zero) + + + contentMode = .scaleToFill + + buttonTheme.tintableStateIcons.keys.forEach { (stateRawValue) in + let tintedIcon = buttonTheme.tintableStateIcons[stateRawValue]! + UIImage(named:tintedIcon.name).map { + setImage($0.tinted(with: tintedIcon.tintColor?.get()),for: UIButton.State(rawValue: stateRawValue)) + } + setTitleColor(tintedIcon.tintColor?.get(), for: UIButton.State(rawValue: stateRawValue)) + } + imageView?.contentMode = .scaleAspectFit + imageView?.size(w: image_size,h: image_size).centerX().alignParentTop().done() + titleLabel?.alignUnder(view: imageView!).centerX().done() + + + size(w: width,h: image_size).done() + setTitle(text, for: .normal) + applyTitleStyle(VoipTheme.voip_extra_button) + + onClick { + ControlsViewModel.shared.hideExtraButtons.value = true + onClickAction() + } + + if (withbBoucinCounterDataSource != nil) { + boucingCounter = BouncingCounter(inButton:self) + addSubview(boucingCounter!) + boucingCounter?.dataSource = withbBoucinCounterDataSource + } + + } + + +} diff --git a/Classes/ar.lproj/CallIncomingView.strings b/Classes/ar.lproj/CallIncomingView.strings deleted file mode 100644 index c5adc51232bc19557d8438c6c23f280722da9247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4446 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 C)#^k5 diff --git a/Classes/fr.lproj/CallIncomingView.strings b/Classes/fr.lproj/CallIncomingView.strings deleted file mode 100644 index b59db541e401a7866f2ed692ca8fa70dc59469d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4530 zcmd6r?Q_yV5XSd2e?_JrJ9CI*g?1cg478)zN~NRL`mGd%RD@Py!GB);-G#R#N5k=^ zlPL+wX78TeXP;gA=XXw?$i8?|k*-|JfWwoQ{O!p{sY+RXO32Zd9(P`F|5|Q1TE;Sv zh6KD9VDU@Nc-G)ack1DoZ#U+7kE`hYb8K$S{Sg1hQ`_SB`9Ax}ab1-BQfuu^JzU`R zEBhUA{$af3@U%U2{x}kMpnn`&DS@rzjBS3cWzkjTI}vOXjZb8#CByM9TryZOnGa1S zLX-UmuJ!jQ!k#S3=TkXKpw@R>bLz`%Jx`is*CXnhjgvj;$Y^;BA<-D&VZ!uV zJa+JzXN5k`UcsS2?)a{`-Q%ib)@*U75At?qz7Jud!c&9K5ne}$Sd=7fk!MHIzGj?W zZD(2WSg)$*x%fEm4?+H!2s|Ta3N|+2P4vd3%54_z9ElW3*Wt3Yk&ZymWL8&9S3Vd; z>*8&~kgC*B$a8szX4T|1_bcL~cxM?*sKAy!*oPd7I;`?uJOVb0Je<=!OYUaI3t!%I zoUp#fXN?_SupfQa-re(WUvFLXCse$yfO|5dh+3JeIC`7K?$Ns_qDxOZC68}F-l5|u zRO3LBoxo<{%76F1_isBxT?$lzGWDcj?G@aOv%+TK8kNm-jGtSMO{23aM~SAUQyX6)JbiInH96#b%JK$4VCk3z$>1f;Z_#itcpSFqhh z;GXHP2KE5#dXn*Bc{~C(i~l_W%PZ4>{5L^fLzNU0(3jLKYqN00Kfj;VXSnTXbI1%^ z0DFr`OIJc5&l3!=S?nSLS&FvWuZP9I=|a?7t3i>PP|Wncd`m?lZDG^A)pq7S*KUUq XL$p9o_4>aais@yTii6E!GmQ8P&Wg0O diff --git a/Classes/fr.lproj/CallOutgoingView.strings b/Classes/fr.lproj/CallOutgoingView.strings deleted file mode 100644 index f507fda06ce455ff36634d800d6560c489573e0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5694 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 diff --git a/Classes/fr.lproj/CallView~ipad.strings b/Classes/fr.lproj/CallView~ipad.strings deleted file mode 100644 index b4c093b13c853023d34c4ef74229b3d175539a07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19186 zcmd5^$x<6h5Un#`q3~s99MK-YtTQnO0cJG@Ba6j1#43aUBgFQH{uF*Y%tYpYdJ|@0>n;L&e7 zGxzkl5i?lvL6bTB$fL@{m5;z0>3su|s%rfFYViwFd zJU3zSa}f%OLP8NszYceLCmV*ncCb+p-NL|tZ4k3|`DT$;hv=Rxq zDb_Z|bG%{-(T-Kfy;;HYCXjm>`K%;SXc0RuibcAH3hD|~DXSW9$60mg6r%kt@UEgd zP4KyNERZO)sM8$fNg%J{n6>CMRpu1*c>#(YxSU){&QYUn>o_MN7U^4>bLG+Txp(}S;Ul`@9!@)f7IXNf|>yJ@fIcw%+$ zD(DvYqlN9`o6m3+@?AnUsl(<(8B z!)Z2KHZ?1iPv9?s{Wnv+SQ+wWb=OHD$)*gA?cs;$(s(JYHss~JFb{8Um0cK1OC}5Z zteJujB=C1WGro^Tejrh3JwD{7SmeHs&PH5?eI~$J#q$~Tah^h)rqCjG`LS4}Q#p1$ zXEsp%v6J4za}`-^H9{&;XpuTDibc8zZ{kd&4G(?Um*;?Z6lm+H->Ks-=$ga0E>UPP zZ-5_8g=jmR^>D`1O$_VJrzwS2ZaqI|exMgkP@ys2AH%PAQW8j0XeH3eOR>7I*sQS& zEA~>(j%M?~Tmk9^Y@N|;1$iLUzC`gF?3@y^LSlA41!s)w#aqCPwY$b6rmP4zkJ{i6 z+|}*#4Kn?HN(yNTtrRwZnmuNJkZ%GFXPG`$XJKEkTya*h4GAop_0$|jqR?V@+&nyT zQ>^`mxij1L7ZLF|M{C;NbpnxMA=0`;p+z2YQ!Mgsb-oB4b86GX?*zEF;QgW3OB7n< z{nWXy&9kh02{Ha0SR261ICl+e4-rcgTEvcvVs-otag({dg;>S-?#?RmYxZRzUj_Dg z8}HeT%tsQCD6|sjbL^aMPHmvr)LVEQGyF?-NE7EoI z^qq(0*Y>SzsQNg8zO}im0bBPo4Bxj(6cW}!^{u_te9W>uGjkoSt1+@IV-0bk4QVxC z6A3<7Nmcw3h1M&6;+vWGc>>dI_Rq7L@YLfagm>sz6Y~`vE%W;gB7Ye9)=>S#6p}rJ zSJYa)=2UnU+T%I%0V){IMBG{Ou05mu9k2iKh#)K4ucMFQ6!O5H0Nw*#d?G4QXtla3 z@I`JJooQ7M=9yQmwES6}KWU#f(*oJAiK0CR| z(`IkTyPr2O`)&aBp*_7GM*n#q=~$xBVjs-B!OgI;?Rx`piSs4)Se&7M!M{WMmMFB? z`!PxDtn)NgXa$pE_FOfaZ%6Puu1+Khtpqx`>!k|q%_qvpUd&(J&D1N1e4MYI+PU&) zL_a^d^D#l9&`L($;weEJtWS6bz}>9pNj$By*vQe{griqf5vvkrF zTIpyfG;xjA&l;x!EwQJ$uv1IURO23AqR>j@ZPhpuqA-3+6jFWAZH?1g1jx$=-;noN zr*7GfZ31<`Nt6#H3at+Nkq>+x%c^*)z{Z`KS=2QNYS|iU@=$XUg%+vfqS$!VImge= z^i{+s=D8jGPT;3yJYu|Q3N7AFUW!G{EyLGusBWS69EKcfsCN=*ehWDJli+M2B ze>mySjt#rO%+sb%sAf2m{G8eilPI(@2)QXXI^=D|a;Jnd$rbc^)cs~^V^X5fBJRgl zY~HR!4Z38En?rgw>X_>A)+VvtA@@c^kRuZ zs>9yS{!iX~jTH;$7L(}Sx!=7AYmPCeDYTk(TomiAK9@W0v$E43@)7a2fSZ%lBTOqo zyb^^L?@xOo&O3x$KUXwz?$dR*8L{T9^jj3i?}Ozeh$4QA-qB)Psu^dAX5$hSc{mx_mwlBXh*~(-d0# z-Q~u?MuH<~pXaP?>jf=XM7(JrQD`Oc79xSKB3^gT>M`WRlfGM9V|>I3VLbVgD712V zYZHNyN3Y0=o^@oe7Nk%aqB5%b=7|38}eOfFGqy2 U;>N%Ud?rLKQD{-8IT|wm19p3JLjV8( diff --git a/Classes/hu.lproj/CallIncomingView.strings b/Classes/hu.lproj/CallIncomingView.strings deleted file mode 100644 index de84a65e81fd70525c1065ea6bd36f5cfc591334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4630 zcmds*Uvtt>5XINmehQ|Koe9>lmUbLx1d2*qsW@t_Z{?2^ia;SP=(p{o4}JAf{p}3} zlUz-13w3ldko0EB?%6$i_NG6+ugHB_lZ+IlE5|b8$jB2utMXRLQjl};Ir`FLgIlrtKjzs*mTUg&+~U?wwu%YYs9m{^`>M~ z`C6Slp@b)mR#9AWzT~VvS2&i3F+a`60FQr0n2R9HIU{^V9a`XPq{dd3PuRD}_dBZ8 zl<_nMmns%b^);_`Fe(Es_~_rm1jG+yJAzqPTi$$&<|@OGH6jbIy0b*u&=t&!?QVGMbxo5hms3cHN)8Gq%XU zdouBm*gY7l6%8tJtp+v=S01@{PaMDIdT4s8D{qYMb*ag3pK|bd2=+rX53*)z0WKHGc(ahOVAhwQtgB8_#88~{y)y-9LIoL}mf_A|f z?Doi6fvYffo5fvYchO6iskcWBUx53BI(g{EhD4`?&BB%WH=T@scY0K1oj&kPM|t$o zk-UyD!)D={o8?cJxQe*2DZPqT$xw@YZPP`b9Mb#iv3$iXT=V6wqDj+r7wyyOnqfDn z(>3V+-|Z6*nQjH}<&9pbzFkC6+AM6da}RH-hdM7avddL4N!5SSWLzvJ?fxp5HslrG zHQD1F)Cp zo5k|+Cu!WG-->*6SXE(@uJBOhJa07NZm?O{RPg_JD;lE;`c|O-Tk+WYjAQw*SuBDV FKLPtZ*^&SN diff --git a/Classes/hu.lproj/CallOutgoingView.strings b/Classes/hu.lproj/CallOutgoingView.strings deleted file mode 100644 index 912463c42de546552e7561b2f206a9a86eb054b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5782 zcmds*O;Zy=5Qf_;zaqtvs*Qjev@EL(3E|U(0HSb9U`YreNs$i;|IokSjiU!n+|{Qi z9~8TTyCV`))>dXWJ3TYq?{vT2vp;{#$a9&Kgk+>HC24ad0R`6%mL=e(_mFZ*&z z`-S&!=`G0-mv7`xrA%L)Uq||~MPHeo`goprtcl0y6m5}z^TQEyXg$NTO(JPliqdX&yvmk*mzG(-!Mig?x6q`G){006-AYF5 zE7J~izee{9-q(#jGwAX=6qlvTJRO6BJAP@jQEOVvFc|$1UW?%5gVZ+Gc(N!3sRr<} zNx0&b!;T8JAImi;sYXw0{|@UZetx9&Z)6j@chSs4zctB)tPe}LTK^4AdS)l%?*3gw z40cZ~xn!16oYk1EijODJyGh@BP(5Y0lP0DbJXOtlK5v?MT_qBS6Rh_njie_pWK}+e za0p8z4Z^C|U1Zdlr@@+SRzBmdzORuHPs6A6iuh6S3T`_v9+9Wb!%&|Cc-SOd{bE|9 zA_Ye-V|UiXMhy;41+2G8xLWTX6_4Y@EOBx)jE^W@NaM91K;X#ak``VZj0c;9D*`KM zqb#L4^oDy}Zk#kbp*(6*s`-&b{oZ!yT zs7{2%Igdo;+zs|xEAj+8trhuz2_K4@V|+rnvrkU-$gTUb60p-IVauqStft(cHFg3H zz8+TJacp`VQ^c>PYw)O^D;7-s&;|3ufVDOW*Ik`-zI3T4YjQ$X@!-l0+8nzcte|WX zt_b{TJsI|cr^%MhVa1do`V@sysBW@JOmnu}<)rOnhcZbNw>3FUsog2Yc*J`;^sT`r z;pzixXwx9t+N^bpPPZn~qUxo;%Whq2g(5Z{k^!|Qs8Sc*uMBMx)5UHsJKN_gjGm8t z^A)MWb2nhGO=2=T8;))L9uxJYb5s|*W$!Dz?xorHK5Y)~+YaDhlW@hsp1pqoW>JcR diff --git a/Classes/hu.lproj/CallView.strings b/Classes/hu.lproj/CallView.strings deleted file mode 100644 index 95effba3df70d3cffca11bcaf3a1c63320810a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19318 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 QGO;vjjUpEHeNXNGAKhiR=>Px# diff --git a/Classes/hu.lproj/CallView~ipad.strings b/Classes/hu.lproj/CallView~ipad.strings deleted file mode 100644 index 3bd40d4d4164a2f845decf4ef7d23a8946ab8c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19318 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 D-$uGE diff --git a/Classes/linphone-Bridging-Header.h b/Classes/linphone-Bridging-Header.h index a520acc8e..c09603899 100644 --- a/Classes/linphone-Bridging-Header.h +++ b/Classes/linphone-Bridging-Header.h @@ -7,5 +7,8 @@ #import #import "FastAddressBook.h" #import "Log.h" -#import "AudioHelper.h" - +#import "LinphoneUI/UICompositeView.h" +#import "Contact.h" +#import "StatusBarView.h" +#import "LinphoneUI/UIBouncingView.h" +#import "PhoneMainView.h" diff --git a/Classes/ru.lproj/CallIncomingView.strings b/Classes/ru.lproj/CallIncomingView.strings deleted file mode 100644 index f433ea68238c1e9ef6843a3243eb518cab4d6aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4570 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 diff --git a/Podfile b/Podfile index d6a747f18..4bdf972fb 100644 --- a/Podfile +++ b/Podfile @@ -26,6 +26,7 @@ target 'linphone' do # Pods for linphone pod 'SVProgressHUD' + pod 'SnapKit' all_pods end diff --git a/Resources/fonts/Roboto-Bold.ttf b/Resources/fonts/Roboto-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d6cf05510a7e143d6901fb1d8c83b94f47214ac GIT binary patch literal 307304 zcmbrH1$Y(L+Ni%-duGc7cPSCv-8BUF;O@cQ-GjTk7N=04K!F0KrD*X|D71L6qHVE4 zl6~K`cf#THwCDfty*$r*zS(Qmto6zAne>PuA_--*I3&DE#Y&aC9gN5!j&2)8oX#rY zb?UbWKH5VZeYT5{JiJQ%hGBglKPW8bcpl2txla9j1(&|xnN!4QLPDGNJ=*r}I6BIAv>K>awB+2h@cfMbeWO!VN>_5MNrHn0(@fPTI>bcGI323kR56-FItrKFi$ikb6dvYAl^JEA48D~D9D z+KbytFJrAT(#R?-W6jafp5OhXm9cqa}}Ht{7^)6gI0%C3B4QGV@57 zIS%SeHFZNWm~%)UCS6pJ^iV0itIW#Mo9j`|r{o=mjT6YLpBpb>>IpJXimP2>>u1aa zlF+&>pI~n)(;~9Tsehg1S1#Fx%xD#muBw8JF_%h&`K`3Krbu1%2vC-cwp`M}aX?x* zt4L$VbeZDtN=>s1_43TZwUkVB($lPE5^ipg@~%ACcuvBc%_NJj?uov(P?dPpz>cbBLCK`!Vl7Ai zUnQ}xjeH^f&D+w&Y6z8OfHj0Ra*{aFPRuk?i}q6y>e6;gn|Y<2d5ZRZi}u`3is(4& zdW_q$SUm^y(tXG?RK~iWL4IuAfN$qWZe5PKM(Vq#(@vYB*9H8WP(rOt{C-NlH2CH| zzRFC!!yqO0KA~+PReA4ct_srLWstAEw}|c^zBanq*QRrrsp(56c&4c2H4{q{YalVG zf`3bk%h!i!$L2Z7;c!S6XCj`BrkpmC)=@=LTVLa=nNS`5c2UMI${OqI14Yf+*hpR< z^|>xBwXH|U{@BzXzx=^74Wxp)CfTh-^by@p?lKMxr5`6pw_(!F*9Uap(Z1P)d?O7V z1ti$aC0W!~nQfl+_aohxeElib8)Lr5?y3BqAvK+Iq@I=5*RRshx6(K|iI%;5EJiMr zG}JN32k~&!CXc2L>Dh_%F3F~D67!ynTYu1R`qL+ENo3uUK+_|ZS%E%qR;pWBv3;S` zGH*g2DeCiYoYdnBcDAtJ3L)%#u-bn^) zsf@Ddw~kj*$?<}6a!DF%6FLr*2#rdQFKQrbNOtuZV{CuMf}zL;lFPU!WgN|$m<#$rrF-fZW=r0v`u7cyO40jxrMn-koJ7a`e!x*-b=lSjEDlPQ2FRc*1 z16`J{yrB}V;+aF<8H`IoGDvNf!Hgv#j%zZ|QB6uJ+Z(EmNVub~AfiB|-X_TR#iRC)>9cdLw%R?IV$F$(L z&W~=<2l$=be?OWvRdhA-X#d<6-@oXQ+}Gu!L-b?#9M+QOCF%8yM^cO5KZDlmE@_$L z(B(pOBLDAbt-~o`)Q;(i)c4K-_D6pccb$uS)F1r_4#H{1{jsJ=A7!34S4#;MK&-)9 zB7@B@q<4J3(vo?ng8D*!W-ZW3&ug@iNb8!Uw8k(t7lGkDwsJXx7k|y zT5qJN^-?M^4mI%2KV!IeL>BhM_E;@Tpk-MMA7GpD3;{wWiff5)(%D(jktFOGZf znlq$j5IS6t{sB@G|WZcSO4)dPocX{VcN$HH@nMm(7U5;z6406t9Y#Zpk=gKT2 zoF4S8&OAIsT(03V*V&%A;GOieZb&arEt&65$a>=w<}f$@7$ePzPkAegB+&7U`yJ+* zLz#o5`-igMN>j56v3M`tX=nXlFl}!>Y~VVZ$h-W|%UK-X6-PI8u{^{|&v|`hv||Tt z<2`Mul=NV(PU@;ejDDxR6_RmQ4c0psWvp|lWVQB5NoOc?cLD6WgIrJk7R2hQ^lxiu>Kq+d7PPLij|uAxv%tOzUpi(V*QfHd(S-KJwW+m%-NJ3N<528 zDqnl1ojNO0b`k1W!o5$?L9dZkv)*AX!Mv5(v4!@xgnE|ojFRfEFzN5SB+Z?*X^WXz z4{T?S8X`Si`-sPJDd&1gIZLFam5g;vX{lnZlVIl83RYR^;v7TWL(unvHe zMoiYZi6xV>G-VWK*CX%QgT0>xXNbv6@Nm5l7^i$=^c-XzV0?N%g?L>kjFYiSGjXuAZ+SA^~59 zxJpWG*1}=te9|=Z3(70xBRT7oD9U;%EuDR&rIxJO5>s9veWH$;l|GS$G3Fa7>gdUH z=w|LjQik;@>2mK|XbgI%~$kvnm(Y`rcZ~)A=g!doK0t;<^FXozZs&<&93+&uOR+DbUshtz)mwFx!LBOw<=en|oV8(h z-`d<_eqsN`_@0V*RcFksWK|{BSEa1Eo;C4V-#WIEwV(OrB>g@=ab(?Sm1B)a|8lIs zx5cqV`+otXldP(paotL=g1_9Rjd?ow17P@PRcq~NOk(bJYXjuW7BUA z!$n8~^rvXO9x{P3E~YB^`2D^Jzv*W&36NJn&%cXc0qFHeLC6BBLC@Li4Oj!j z^a8z>=mvVO*Lif^UihASI{hbD3x{AQaNqX~YnA9B@HIRIofkWN}|k^nPFO9UPX}4kaG-khTycNs0R*^?*3&`1hbcGOs&ZllM=?f^CfZy%_h_&_C}< zh;f;9@G0qPT*t3lr5$~+yMz6Y!wEssT|H%g9pt0C?;iI#3+VuDdA6UKf)kV+oSei- zwU5~1b=J#bj^Y|G8*4!L$12eOFQy4La5s831nDypjoDY`GS@D2rbmamvX%XVGHyy| z>M3O~{uoR2k4la`=i%t&T6A>RPb73N5g zS}YTxts{zkZV~q1UKy!zu(n|BHNf}GAIv!psbMkq=-<{}x$O9v`DPq-mZWb*Np%Cv zNAOH)=xYt<4^@q)G6Y!^Dnk`01XZD;qcrQj-{MGu1ojL~;_gpE`p-80Z=ToVq8?n*7Wy%#eoA@_J}Sfc$pO;(NFLw%wghALVV?h%dImD@tYdvT zK^oFGi_zBW`DJuXXG7`CT-w=Hhs${cEd^_b!IH|ehViyDzeDj=CGuyJ`6`4txV-dqwt-w+Gmkp+N@8~{No;rL zx)f=jaBfjpQoHL*YQu}Ki!vXx-bUY^uIjY&kus6|%~=nX*Yh~C5o@B-))dmCq`AvU zADBm-(`2n>(s$@{tjUYJTT3ey?pBe9G{hSYgWdZEK&zr zo3Zr0SkA~^$wX+TmeN0#(pQ3Mn?TINi9sRO1K~bSAvN11t$HSD%^Th))*wl1>9a`A z6dmGP!wQr(%6xlW&BvJc@pp?Odex}LFCTF#kaDD7#SjCFL9 zu1es~hKr-B{!1qP%GGGIm%~iOU|w z@@e?B3uzk83w(S-ybd$Agp;2b#Y@(}t)Yh5lksx|{?g-A99E!IXZ=^fI79v_j87rb zgR||{#skh#-@EFw zc3#F>@&#+~(X{o+oH4bQaXx=>R&L&sB)gUU3ZA^Q!%oPFQkz)T75Q^YoE(Y2!-??`_zv#F zR!9$eE#RU2;aMOR-G!N}PjRk26up|E7xtlV4*GA9 zZ=6gaLFhVwv%_KdCkOrua-Q?;ozk-Zoyb_w&GkkGxI)+;7DeB#jHPjQIPUuTLIgTA zQ*DXmU+EN=hIAxmKFq?L@G)s=JAY*^X@5ao=lMa51t*ZzD3f-nF%B`e#KG7Tu2H{o zepW*2s0-3sWtTd>H4Qcp#~ju>&IrddPc)|Q=HnbW6K%aH1aXGRz8s$wcduYfI4qUi z8<4Tcp5kzxmP)SS{GRlY9L4YDtZmE2jf(@>`)p&~%zR+Bp-t%DC*Tb4PzEu-b5F0W zDI>4iNE7p#>--okF)uloZ*)> zcS#A>+EsX05$32aquklif1h;4-@UBi>gmVIBN-S2itDk(zrKFI#4lsm$GqR>Cwk65-(wA*Tbj6w@IJFOYv;}~ zp7Wi=aqCLGzN~6yXN<}&wV?on$59xW4~oMAUs?gKYkOl^TbWi2W7cG^mv<+v%zBJ- z)ua^XU=ikF{5aSrL(R();dJ}#58cy=hxD zcvtl^XY=_pjl=r>4m9=s5wKa4eUuw2hW= zgvH7BNWCu6QlsxLf-uv?`Hah35gDn`_qE@3Iq_xbHt|oovL0zdAJ%7hk=AA86=}j+ zccwX(bH~PRXmRs9}Njm2iCWKfSJwf=4LK8pR-O#N=wcm7bo`(9sjJ~P#qpB0|c z@0Y;mH`+e!KfUe)FbR^vQkV}qeJd=7PazX50iCZm=)6;57A%5|pzrDDgJ1=0gH5mx z^u2tr9x_7#m=X88sN)v2ew|O}*E;NuV=wX`X#KQKx_oVePWw1d z5q=j1U1xmWlw7xkQt@@_xhpV#_pyR>~;=M12q*T1zb+D>h+wy!t@!*a+JUmn-m zu1)$kQa?LCu6(VV{;lQ7IH}9k^=Y4KU+QP|eO;!uP3x`mXg#!US|^=f`#5D>x!dCE z)^-deUDu)Q)^-+wQgOd^nYwJPx6Y$=*EYr1d64V9@nywbPt!;p=rWu6r3&YF zi+G33+K|0j8DuZMJ*ddKpc-d^71%qabzJg&(_mSXSeImCUOvHkV=?b-OCs6-F;BVl zc`##)9(zL>D~jrImpxE9bSWE0A!G-r@ll%oT`}%A>)q%=ocoA_vl^?O1Zd2~-e2{c ztaf?t_`Xfi->3W?`hC3qR^=m9Bkx{4Un4(+% z(f;`eRlvL6*Z&K6mvg{x~T0r?H`Jn|6!OwBuKrTxnKa=ytsDCXK6 zjB^X)zYSsSHpvv>c;EWbFY8!-nasEE z*582W{r7*9zBa_V^<()9-y{%s9gqL5)azh>l&{_e{QhX8e9LPP+KE$N4Sm zQvGdDBrzJ`o#R8VRhT>f5!MxY9{w1W*t8UCspF0JYznz*^!RVKw%qwEBDJsGZ(^zHvjJ z2kAaSjPyD{w`1LIedj;%;{)HZ>2{)HtG`*(V}~!!dcCaQU-M2->G#&Wn>O{gSh|1n z&6n>z2jeAmZSmdH>Evm{5&C~k%zNgdUlR<3o@XS4BRRlKh8didV`^S++*QQi}KAG@crubs;H z#rtxTcZ2a`n6D1rBWr)Sc%QD{f&1d|m$5LuANhQUJ-+v^dIWP2LDy^9-s57CQjbpJM}wuzDJC=`ER6UR`(A6oAkdQ z*Z*Q;{B!X({f4c8$TY4SZh`lxMSN>xhjrYd{Np4Q?&i=>y`kavO`QpFp z`$zfL@iYEgzW+hSx3B+@t7*f!@9FOy;{0#YA9Ndze^2ilua)<*1$;Yj-_gu_+$!h2 zZMN_pjBiuEzM;SO)cv)+_YeKfhxPlve;2z&hL~T|hdK8{_BVJ>#W~Sv-M`(O)9~JX zEc4qaJBab&0KaE3XT`;hF<~`*>0k5JU;Xe8zjd39FC$*Yx9<;gGUI{%zV)xMu@lKy zPZhptTtGXFpU30pQlDPlNAYFSKFZKe?#8zh)hPCfDiC`Oz0aZd!ML*3hdR>hZ~D9~ zE&se4%6!grKFRm5d@s;Pj}N|aZvx{c-}A-$M1je^@mvK`AhpL zUixF|^BZfZwsA48=$GEj|Kr*zer@&f+DU&~{g>Y#+RDGT{bv7>9(P9h@mZx_Q+4b&XESf^uyp*Hk} zmcI3gUcdYUteXt$tJpM<4f^Rd%zuM5R&N+-t&c4N?O{Chg{yGrLoDL`8RswTD*;pE z^^MmjzOE0?{X;DO$2k6f#wA{lf0F-eyZ=W2f9dZ1DgOFz+fY>OLfYI7+RswB<6F1x zWIwi(y%}pw*Z~)PQt#9Bo~;pnWnC5T&ks_6U#W?YyY5?ho!dBe9XzpScys)nt+b(p z&;WZgLKll~JM~`O^;Yuo&6#Gn{>^#*B=#HE&D7okR&sAHRl}RxJmqa|PKkYK{^ITC z+lz2^=+Nhkdfo2ZS8yI1;XkMSuwT&Uw|XBCch>9M^Kh-7^PSPMXNcPmO^)A#==0SN z&(X9O<`-V%H$_?O^^!7oCL5J!kJ z#1oP{By~upkgOrOLh^0oamHjB(`5|Im@8w|jBPS@$ebz5scg@4 z)ydU5_o%#K>zA)zxnahJnH#ol*s;O8DesonTRJ>buaCTU#^#CjdSkp^d>QY}V7$2+ zZ*G&ra$L^K19>4{BZ-mB$ZBLa3K$KHHb!S-l(E2AWgIu6l&CZ+t165)2dc$txjLW@ zI)*wT@#YN2T*s%59gh8uA002utY&_*vKel+H+!2y&1vQ;bF;bA{K`CM{$&1YzP6N= z)Cx?uJ%eP34pf2J1M>%#4Gaw&9XKIyY2d2B--9G5O;B)9)u8Y=Z?+B^9keItV9>Fk zGeMVwt_R%;dK&b5(CeU>U@GHhvH4ao3l1--|z-+=HC+W%)pxx z8;m!j@g@z_`_B8ud(WNKd&Hg2`z`O95(2H)O)GaRz~PKj;(F)h`#Nt5PY5lX@5wyw z*xl~qvAg(&f2XT&><%3mXDz30?Gnq$YU~K$t$S=$CzXElcXPk zLs1=`?2l^lWcQO@Q8l8fN7eZCcvN+fsB%xbMU{TiC@NP}jwtGi$`s|g8-4fH-TQa% z-Hp0?=kC?JSMG8GeE0O-Q+JQw{rc{Oh3{;BM$puSKgnT160yjsPO;|4s)*Er&6 z2Ykok;JqPVH;Cgh{OWsH_!@*^*?%4XzkmJxA)PWgdH&mfyqWp8e|)w6xBvbr{ckh> zuM*v7+-KeA+~?gF+
KIy*hzTv*?|vZTWrF*m`;q%s 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 DKpMU4 literal 0 HcmV?d00001 diff --git a/Resources/fonts/Roboto-Italic.ttf b/Resources/fonts/Roboto-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..737244bc032804ace4fcf794d20fdd13b37473e1 GIT binary patch literal 329008 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

-RAm@Qd(al`efPR^Dd+h`YFY-iaO2^0m|K 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 SxF5J1-49)Si+=1@{Y^^ literal 0 HcmV?d00001 diff --git a/Resources/fonts/Roboto-Regular.ttf b/Resources/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3a4973c78e88bf4a3b26fef3a717e204eccb8688 GIT binary patch literal 305972 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
wYN{;-*fae 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_audio_routes.png b/Resources/images/voip_audio_routes.png new file mode 100644 index 0000000000000000000000000000000000000000..fae4e84e3472a1f503c6af38e8d2f708eace4118 GIT binary patch literal 3729 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 aJJd>j>Wg`g&As*SyJTWuu20l;jr)K6n-x+3 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_add.png b/Resources/images/voip_call_add.png new file mode 100644 index 0000000000000000000000000000000000000000..8237f3305006cb821191df94a5a40462c0a54aaf GIT binary patch literal 14157 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 TnL_or{{|?@sms<#TRi_?#`x`Z literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_chat.png b/Resources/images/voip_call_chat.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff01de6f13b8398754f7831a6940a2d5a4f41e0 GIT binary patch literal 13921 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 z zp0k830FW0iPFLaOE* z(r&Ws=LBZ4&ec>2-cYQ#X=!%?KzUQ^R7Q%~h-OBUp>Q)ZTEBpg@1BoDkbSf}K){zr zSh`iq2B>Ls3`daBViD0raDM;c4L^64b(`8icv3rL(bKorFUK2lg%x>>M~;lzUjCH& z3o(OA`1P~1+JamB;@Yp$RAO(G7o1v?J|$;tkL}6F(qho16d;lZ_r9M1P$iM4@LQbE zRjP{6 z_0mG6hu?FEDk zRveDCZhI*U+T)M$JV4Ic-V1j_8j6@!Dz^2=4b_%-qXUGxGS{dO_=prr13kH5vSpA^#kTF+6zKjMxh`Id4lWb%AbwdevSc3>$FR}bcM_}GU+JbM zB8XjU(Y>UY?$Ym=i4_&(1xw%T6{rsHOk)@=#;yDc_a&kEloM=oglc~G=|NK+rHai# zn?+WeVHp_yz3-B2cK&p1kzB{W`o6&KQF=_XUzy(~LfxR5Tx)416GaOB_4sT%->SIw zd~qbtHfG`LG6Qu>uj3yq_tMksqH}PG>rkj&3Xm0p?t6epB6+R2q}Kc6KM9a-8@X20 zTvC2;gYT*&+UxB1=N&Dc8rFMql1=5gDi*TImAv-eE?K7r(91x}xVh*v;d_%Ca^GYx zHD2sQcoz{V1_%uxglpra>ilr|99tb#{8JBrM}eJ!BxYbkd%a}Bzh?_@6|E7qOFAUv z<&wx|il_o}Ajno$-sGv_T(jE8Q7X1hZBRVUODDfo&QU8Mi%cnHmlJC6Hy5$zT(kLC zbT{_CT!8TU9ZqG@8A33DeD#Qr2zm}HQCGl?y{(MK$m#h&p+%#Q=)&B}S9(nG3Hgf# z{*}^A@=d{E2Zbu#)u_F4)J6TtKKN>V=k8NayqUdADuAzCoky=L7RQ%sPXv_~TNA%y zK*NENdEF^P_d9el32wvK>dV@61XbCCMH2q~EjaE89V+yryNIhBZl#RN?qXeG zObaPfjYw~4XK$BlcxIdW?(J%=y{_Gd%5GodXeo2GWmGbCoO@C1obj#8EXAcR2`PJh zz4J)*i(o)G>W)K=_}bl__%5Guhnu-tP%9SMDv~H)66gsgGC(h&?7P-&%{nWqETr&N zchf7300d(fSLk4J@ZyOCAqUe0iog$1k@WMZJ;ixfq&Ici=8?Z*A8DW_6zKKMGs0hc zi_m#!I@Hve94F1SdbJw6SMQUr9HF?$CZqbv`P4B}?g1~?@A=(SW5IZw{JY(4D=|4O zxTnzR7l!h*C!^#k39K|8H_W814i7lv@}BLyJ5gp!IY;ds$;~h8Nc@1RAB(Ueey_Fm zD{L&`B!E5cvMQ#J93hUS<)WEKyUNUodv94=wrd(}+1V=F4WID>HJ?A2(>L09Jxcb* z5>JDE94U7S4>VQf%q@&{)+7JUCa9D`S!-uoT(ABcs+=LcO>vgPx8};diXP1VI?THM`7( zQLK(P?Fcu&Ob#-drMI^1xxRowWmD^c^rHwMG=O79DQRoa07BsG!@w??aw5=X4QOiX-VH`+&y7H0Gi-AtYbu98Uv#HcRIq*5c@B+KSuMF>!5H}|0MsJ4S_zQDrb5@01zElWau>*{~Wu^n%9y# z&*q^}x_opVTTYz#Oz&8VVlYFItQc|&g~t~mmB*|0lD4$>I^`D6ukqO?dm*eHs}4&T z^$uelzR}InD8?71lT;pds1z^Rrv!A2bopeN^%G_*^ax;)A{d8Oya|j1-m?djHWeQf9=i{Y6YAB3mz!89*OOri@F-jX!c4lX595 zG&TD|<8gT#@V^`|&_XRxjDAp7%arEmW?}yiZk~P` literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_forward.png b/Resources/images/voip_call_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..cc61de4823e8400be56bd628e971295c8354456e GIT binary patch literal 14584 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_header_active.png b/Resources/images/voip_call_header_active.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef0106bc98c795e193286178cfd14d36ae83b82 GIT binary patch literal 1787 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_header_outgoing.png b/Resources/images/voip_call_header_outgoing.png new file mode 100644 index 0000000000000000000000000000000000000000..474abe754b0051cfdd73021362c92862781495db GIT binary patch literal 1274 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_more.png b/Resources/images/voip_call_more.png new file mode 100644 index 0000000000000000000000000000000000000000..73bb13b363d3bc0cab33b8fe1ce80dde319c8aa6 GIT binary patch literal 10488 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_numpad.png b/Resources/images/voip_call_numpad.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fd33835d82f0b1d0ff425febce3c36fe8e697e GIT binary patch literal 6726 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 ikX) zL=I|yj`~Rmp;@mgCUrrSH`^@6ul$f$+`-Tu7HaWHIHW0ghO|`~oAp`@dbA75ZAI#p z=^V@9YO#blxEM{?OxLTenMI6` zpQuyDxoOBlqJT2wQ=r%i7-_qn;VN9O%Obx1$yP_pP z)pYq)RnnK}qhEcMWJXYeav2WwT?s6xcnQBbGXZu!)QT)Av4!#>U~C6aoy$p#g98xuD*5}n1pEEF{gr%VqO@5e5Ls+tP?w_--ViKL&IpU(43?i4 zlFqm{w{bsuuQ)tI<3#%F$kchZTw6bwA(_y`T%5Wns9|N;4Ne3`|Bbk%%_|-1g3mW| z78M*A090hcZ!wPFmG9mxWtL;$exJJp&;ooK^nuhBw9`;bJylTWFt7EBT&Yjt(9i{6 zCBdO1-G{0&6-W&p%740GjYfrgbCG8lpB!P-Ml>PWW0)Qq)J-@F^Hcqt;7NfHLrIKw zrDTnvw;#C*T|PiF>U)Q+vvT@`>*FtwrqGKaX!0}oB+xfOT5r~Uvbu$mf*~|}&NFUc zSz#Z2cn_0+79TSs5__8kLIj z!RWQx3``^rS+?;PYQns<%NYslm;;odr#iwCo5(61bYX|#4YZq?8Y{rTvoapzu;*ix5OOj^; zS*>xHSl1QtaDK#9M2ILz+(8qI%nVm`gkV?46Zx7bIrWzpQvFtzDYt+bh^*7lccH80 z+~s~EUTmP=!cF6Is}ekq+MR!1Aan#%2%e({ewLq%^NXKFftITv!99Vx-(W`RSohgz zvWkk^{=%3X*jhr1t6fgTK~IsM(nXFOfJ8oqfPZg_KRp$QA;Ou-I1k2sd6s|%5Gg9Mt;L2kE>a} zmkrb=F}#-Z7qN@@P#(!|ja!#?T?!NHBI~Bd)``XrUN>e;OCnL1Qk!8^ETpkVe&3IV z?G0@efCC#@CTuZ_W391@$9V1jZBg?)-Ed*0kf6>a&Le|D}~JSd`n z6b`G?s4rhrxum4a5$N(t$RFBHw?Os^{tjC08#&0(%=Z4Hxg@P?9>+7?-{N$X>FW zlZ-C=ZWrz~cbJ$ql?7dQTLHRljGSA<$<&Z6kqOc($@jMoKZ-w^g^EdrdAvP&QV{S~NqmhrMfzhI{iG z3r}s9IIs8kM~y^+wwqd$j5Wqq+=WFqA-i}z*XTz7MOpJ~%&D9v1~}Ns7Y0;=^Vz)^ zq(sMsU5_AB!|kIuS!=BM#3@=w?Po9nuB}BdM)G}KqFmKc_=?6pOolo?ia`vyQqW^G z1Ne(FQFJoyXVf8fFP$?Aib`||FVzFGbqM`74`E*`4_jqUBx6(Xu}jrca3LLT84)fEug}9n`d9Cdzrw#E0GI=6^ziHpV!@0~AhQf_R)Z(O_%ek@*@&tIe+AW@nVQeDU}rXeehrqV>DrOECsP9PuO}-dsR?kR$-RQae!@DIHqvj! ztdNZL<&;^xZYs3fp0YM!_CSc^l$&nM&2Mp$Wd9uP+2@gSYRl2M0HGZyPzv-CaxU6HQuWy3e;Ay2GKKlKj)+nUz4bN%`45wtW) z5Hkjc*mPO90f(CFGhEtHaa+qZT%P)E-vgC#J`vR1)45ZdH&^D=lz>6W{cu639Xtlg zwA6<$hE@~Pi!u2uePJiEBqQ8J(+z=AJc`JiJd`56h!r>KN1=SipSP}+Sv)XQEm0*k z6ka8ms$OwC0r!!s3!XENs=hrjh5yRg(2C~p#RNq?L7yQ79PKR!-o(IPO}9WTABGmy zFK(=OF{@PdF$WssrU#79uL(+XKy5<73S0EurZQP}@jYTL!}YM5QfY4=xEP_$sn-t* zwW_-fPw4F`V7t4@n8o5CzD7F=ZzzP0%uFwn^u#p7I%*8&@- zhqe3q!_WQ7{wp0iC?E@lS9YEoD}qUxdkLs;_1yz;VY0V{?{bJml zrKl4)NhV`C=i3y`vEtpDq(~LJ+$|yPB5%7XB8ku?magwO0GI?kW=XlP3h(E3spOW8 zb(XwCL=)^RVT)rPYG>dKK3dI)5<-JP0_WnBHKv$uUuFHEQSWT%OG^zvtvfa!h%YtU zBC1}*R4f`^OheD++Jx6aUv)XWK6xA$kwibCh*3hlB3exlPyJL-iLoxFND-WHCigNPp2Q)zy66AIG{am-gq{b;f#tTHI)vz-xOT=JaBI&Yo^ zMoLU-TP^+UT|BOy6Z-3LcDToz9~KnFDI&!mr_M?gxri>B+-nYxB?#@;qu6n#N|Ck+ zaS@P%TK3=EMOM4Ht$`L~6%Fxj;go~bg@!P=yhcmyj=fnaXb#EydWr|W7(!)1(tPK}g70l7{UJ4{2xUru>3YzK3aqD)h^^R`0m=liKJ7qe`Hrr>2<#>=Ni zIOl6a`8eCKt~4-{2i_8maE$}Vtaz-yfBs^oj0T=iJiqpbLMj}Et zNt4Q7UyNHUjG(xFeQStG%NHMXQ5+Ay(>$xNmH$KNJ);b~9DX6(G+ZkDz)RyVBD4uY zqU@(C!3JTmzz0F``it2&r!-_%eal7TXR6##_!F8^=8)aCqvR0eLudRLX zz@v0p_vcE0Bfpu*M6Ry{1r}oB0|)hs?dSMf%q!i{W%~;K(avZ8lzpv&<$=eGJCZ%UPR?%ZY-K#w~wU`Wt zzE$}!l~2EXHGGee~!*gP`{~>0rGs zm9)9sd}`3At5tpkHM*7+^1F@JARs;l)n)4Wu-5E~)ldWv0j)>#8te7@_$iFO-G#6@ zzJ#-{zIfyYEQAFHpFWdt9;{r;`D$=O&IB#~$HPD?M^}^Ihk=4}qUeDj#I`HsYyfVt z5Bj3}`EJk4pgnE!8#$ep)8gSqOi9OZ>6pr%`we?VQUtT!T-~d2o#Al5!kB|pa%@`M zVX=GUnY?@G8(RW{y*g4K001h~N?iPntho5!&mSQjW%wls%Jhl68Zgi)e5=h@9}*!R zerPJH-mmiIO(=4%hUHw(_B5-dv5czjE4YQ=5b~(E2m}^-q`GjT=P>=^H&D9=NH#3 z!*%TwPrQ_JQ>KB+z$~LyBdjVMWjk%YJ-+1l0c9t;d%nd$oQ3Sw!5< zi@cjWHE&LhTcWfE-bB8R#Q9LB(kXma+v^oor~RewM(`e`PtwjS@`&So{8wmv3bDXw zzOs@YG03}iTpX<>Wv@E~(k>a6G~Kr#=TQ?F2I@hKXN0acPI;UydsQB|pPk=t20@Vh zgErcaXQ9TEc_d6v_{#d&fP5r{fRC&DmXTDzRy18*4-PMk=4B}OEZ5=qSM(w?1`JSV z7C#l?fbJ+it6Do6Zk>JswoAT@qB%MuMkmqxjBTyto~}L%&YYehppH8GH@u7$K+cJY ztsv*Ynu-d1CJuHiMy3wNW-Oj|j*!>@00e|R9gR$E%v^!SW)@cVf|O@%U6ep8Q$fmi zoQfbtM{zStD;aNRGc|7|brWwJ6JAqFVIgDzPd*5Motdi<(9_P=-i6Ookn#^MAEf-d znw1jxN5s`ekWy3e4N%;{*$l|R!odP!mh`l8XQLEC1`0Tvn)9hjNc{~0@+3%U>FVmp z$I9yA;lbj;&f?%~!3yT(xN_+a%ka%2UwfLQJ9SpQYS#Z}TB0`fP5 z{znZLb;z+gtE!ocgPXI7nWVd!y(`tfLYSKTL*LQO+4he+rY5Xrwq|w^Q5Q(B;D75< zT2}GRKQw+*U}0tF_(uyu_PQ3)ZCbv*OUj$4C3Hm=jMQ1 zrffX_0wrtj;%a1XV)h#f0?uLu!2xsf@R+a}voV|SaG5f5@UU|;8?l>#n0bxCMjXZv zbY3>Le}PbTwt_^Zk?p@)^&83*0tGTL<^-ETblHu0Al7gi88I8Nf!LYN+0A&3K;|G* zHgmH-P^Kn)QVz~`Mv&pOvNN(UV|BE*_|x#4a6ZvDvVxRsETDhZys%)!OY4Q6BK`pf1&cp7HTE|5t4jR^*^uyOoR|2-^x z5N9C78vTw_2*96uh%bEN&Splg4$kTh4z_}nzafCXHUES+P~fjYk+E`tNO=8@_`k)x znwisIPk&7TTdO}!K;WOS zZy*8m#~UEsA1dkp-4+i^v)?>{*dQUq%M9jJ2Xpd)!F(WYMi3hx2t>*HH-}k&&+5N> zEWrA|aU$?X;9r&jh~8gykmUukTCx6Px%wMtziIscc>QfG{y+8rf&OnN{}I3crR%?R z{YMP^N5cP&uK&{YA2IMB3I8{`{-4o>{Lh5P%pS4}@_?i>s$1={kW>iXSYBG!sgr*+pdAv)Y2DI2<`^uBeJ==Ej-=C5$Ww$9v&>TJ0E(C zXYdw(IsD?&wbrqAwAvboLcpTi?6}bz_J1hs)8th8i&`BJo1Hg@a6?{sM-;R5gP`MJ z*Wu2guvX!!adJ`=9bCl|E3;3KB-P=qi$OCA=B-GfH2^sPBH#>)2YFJ%*x$)9s6}$Y zZE+9rKDLtJCaUzRy95fvG&VR6_!)}eJdiK7?&*QKfik;-lnez(oblb(gJ&fz`|7`p z*YAo%A;j!SBJu)nsGdxzgk@sHvmHPTJpD+t!5uEM`5LN~J$*0je2uKO^Ir308m8lO z{0EVe=rk&TfS2Wpi+Hzt07tJ_X5VaBKPug$7rQFzegaT(P)$MNk8vm-cp$nVbzt5s zRRWg`$`9NgGk}!oWJXtD4Iizf_{`;JwU@Q8OH+my4@#r^rRZxE{7XEbfeu=5(R=YF zl8z7Y&dhglu-@~c<|sjZ*qRHLu&b@zu1s27$;>548n8=@r>c*b5O?cgcecZ>zJb9>G{qD_l43d!1GFAIJ{+4TnLE zJAePoz-Q%4`B~%DWo_Y&iI*mM9N!SnTAD zXCS5(R}spsUmyt&s&h87Q1J#WC5--zKcS-)AV9je$aKh>mh{vbvzNctM_JDiKO-+M z(H5dSs-d&WR6GZ@3?gC`@%EZ?yqrioD0anR*e-hhji>N>(*Y+{o2G))vN>f zrXFukW#icxHP&v0t)2`E1xo!Sr0C~jef?@|2;smxz}PEJ51I&OEi=x0YO6v1)@^q7 zxOXE!yLuf#a&gFRnxGLN!!ed}Lr5`7ZRfo|CL^P>p$AY;kN1*H#PVb{@RBJn+@|NB zkqnhL9+)aW_Se!%94wN+Jp+pY>c1!Pu`$qnj9;sFX>xjtw#N>(wQgmVTCaZU-b}Am zUCo(KkmV~d&2%N9kTY^62QV6$#@)hMOIu6^m%3Bfv*hMqwQYO9Uw;X=?e~hX_+I@W zEGQ)tQW=0~=rIjP-Dn8-8beme=ewZRUDx-(*59nQ<2B6CylsRDIq0z5oE>h;i^UwG#2DhCyK>m*Tx@V2$I zNAnuSi6?hdPdn&t=(gnGSFgZs$hX=01GTt9CW>^DdF{Q=fV~x5DXWPJFg{7~BO)ib z+4#PhNXopsvB+p1sFEq~0%RoYxbDYd^hBl7Dhb#<#V)&Z>lX$h`vLFeO<*mHmD!2? z{PPQRkbW!0wl!|?An()kf`NXhbVOTr{%F-x3g1JfQ`_4=-duv$yheEf+Uy^etz|r?E_xjM9ec*{`3%4g-xpbC`YZiH+6>R9=7MIf7VB%;}JubGU=mibVg8J$3tgqT+G<)INR^ z9{1E@xGHrK4Cv->PL4SKxHc>;+$(spBZ1MpsNV3gKYaF6RE?jv+@3wyG?Imzi6j<& zaGZu!=lU^Ptf}0DF7OwavGaI!go%9V4SxyJ-F^paU1bze+}*sik$f$#er2z>u;m5T z66yl8!x2e~y1wf_4`3!?1BlRxc?^ZVj2FWZ?8!y&HM_Nt5&<(H-wJH&LLss&lG(7N zDdf;pv$FV~gdW%peM3FaWDg)cA(_U;yJ;oR{TyePEyUbRmQ%H~&5l~c$~}KyHxl>_ zCf5P$>gt99uB?xuLMYq6%w%Dg7(nm?wdO+vR)ndb_=szVCbIu(EGlMJWHwV;0tVa2 zNERJDlJk&R1nh!orUz)DxI}VAzY3ijzhC4IQqQ;YRp{VaU;ZuDT=be=! zlg-=@>TZ?>n>;YouV?rsTzX~(AYhF(Fw(zeLQZ4FZ>&f z6b|)E>{3^c%+AJhcXBgdieFtqd;k&7eYa;`#W`9<>8zPn*oqpf>kQB|`WP&Mi< zJVcdfvmkNKcG?IH@Z`X#M(~qB+}!=O8f(|+g9G0r>9nJ^@#`?(Y7FurU8`UkYQ5Lo z_e8D44Q^Ubl+nJ@A;5*c)n!3MuHx`(BEV$Hkwq^>Md$aQv6NDr-4>Y$aB;7#?C3FO z^-~aLuF<Yo@JQM5NVI!=k*8PA)wA4q~h#)CDK+QmYWo!$Z`F4r0SbJ{@{Id+{K8g&lX zZ{uyxp^BGyy!68Nno)}lC!JK(VqIc9>H!yQOSIkS>*{dLJ`$-aU z#Q>+3dMnB$ig`Kt~sK11%{j2anJbx{usMK=L%kpy$wlmJTP3p+uXm zsUeMO$Lmfd+y z`l~4oIl%dKc>E~QO`_jXdi{-8ZDebd`xjyGbnKj?xv6@(8}_Nr;i3_`@7|@$7cXs& zl!&Sh#UW4V6?L<#Y71lqexq=NBQy~4Mxc?P4A)4QM>UE-3p|d-gbS4g&;~)liz2$0 z$;o0}EyoCj;yerr^0_|d`amh6DkI=~mE+h|BZsMX8)EW$t>Q{bh#pPfP$U>$dt+t| z8{FOz+~1it^Vhha*hV2@@awXSin`)PBam1>rL#F6_9x_U5qxOIUS|MwL1B(H!j&SdTr>cFnTf8~;_X*72xlUv$La6Q&~vKu51yn)fx%#Acuh>u1B z1cWTbXVLNdbmUp8l=#{gYS1>aqdC%@|{NuOQACnZ;^ zgvSZG;^C})4b_3_1bZ!C1PO^o0PHNz7jXPppdCp>nq+$j`JUIUve&+U?bnG&vI{o$ zkrSBTs1)#?Lu##zN^ZWiYD|)40uf=Wi6Xp~-&=ViWtTYKCt-(mrV{za=M+p31j-bd z>B0Vp$B{m=_#v<+h3G+qM=VD;c!!+EaoL8xq9)I!BBnK~W`$+p`gygnR}?%zOdV(h z1b^0wg|g(p68d4g=>qs5dT08g!nb03Wr$PQ;N+#s6_#-dw% zsO6!Yqmn0q(p7~wBrreVHqfHH>I%Q=AB=BJl(zYNIcoJ5*uBq#-nkm}#e;dL`cP9L zh(*>l(M<+@gE_^5GOyFuev#R7qIYT%%CqsH?Wmbyg^EPn7Yzo)QGNx|qC&IWJrIVG zV(ID(zSK24jul;R2^-h5<>KWCV{IVH3vE&eP3!G_Yx}?CqraP?gd$&H5D2zw)uXh9 Qe&^k?l1dVlVur#03nY?;dH?_b literal 0 HcmV?d00001 diff --git a/Resources/images/voip_call_record.png b/Resources/images/voip_call_record.png new file mode 100644 index 0000000000000000000000000000000000000000..9c392dc4777ce1e62c22ae43db8a6b234bebed97 GIT binary patch literal 3890 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_camera_off.png b/Resources/images/voip_camera_off.png new file mode 100644 index 0000000000000000000000000000000000000000..dd41c338be4dc0a32759dce59bb48f26f1a35c75 GIT binary patch literal 2971 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 V;L|R3regpA002ovPDHLkV1nCSOc4M8 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_chat_rooms_list.png b/Resources/images/voip_chat_rooms_list.png new file mode 100644 index 0000000000000000000000000000000000000000..edf722c7e5edda4a64fc62f01a43e61aaa3e6136 GIT binary patch literal 4105 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_conference_active_speaker.png b/Resources/images/voip_conference_active_speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..18f21106aafa24bd39aef95cbcd10a7bd55f0d99 GIT binary patch literal 7818 zcmeHLc{r5o`yVA+Awp#xV^3qoScVB>-*+NJ#w-kGFb0DxNeU&|*OYw;S+l0H%aScw zPdP;PPDPP?hdQUu_51#FuIu;x@62_*@4WB*-1q0X@6UZd&-L7Iq^YqEGZQxx003at z)73Pm{$utp20H59b2iZu065wnV0nRTj`9O~l00yDcPx+JK$#d#web~_ zF4Nqrk8(J)fKucg@IOa+zJ3&z7f0y!9se|(l$T(h3XEg`(CGK=?X~26Yt7o~mJ~3L z5z+3;f;@iJlm1}f(sa4@&ThkAcFSWKkAae%lSvjaIp+kto61@;;eLk~O#M&tADa&j z8k`9>E2D7_c3$M}>b`l_qXS!bF(O0xQp$7H(lK*=&Ztf0+Zl+*YT&XgwnXl{mTEqLr{8Q1L$?tI~u1TpouZ*0dW{lGnY$s{- z`?1OH71Q`5#t!_raoT`Z?2Dx*%L;Dm-qL|nmDiU=Wj3G}@ys2^{4R(<_GaG?y|7jH zN0T4#METn=GUW?)bxT^)+^~W3Ut4`W`TK6x>m^mFJKUM;g3mcoTj`>h2t*<>m0KOyC*Qmf_q6~8j95)FAgx7|p_ICu9&?251o;0weeSY?8sLV|uU05(T zPf|U4i@qLSC$S!KExlQ=fVLszN(TF)18|G&kys&fk-Yu68n!qnM}e!(XRoKdqi@e> ztxoEEdIbMEz+J4&adF!DT1b7&B3J!*Ki+;QUkrKDfwl|a8~g-dUOtv*#A%)-MDBX& zLw}RooO`s-Z~|id2qBgbsxSYE#=Sy|-mwTgjD9ehYLx+2n}0W))-l3XXo#&WcTTuI?Ta+u;ML$CPJj{wJI$&jKLz?PFL_4whDMa6$88tr zoJ?DaIg)+2^{v5Jx?JuIw2JXTK-wAp9$!^>=1X<1v3akXB2`=pD?QvrMNpoFS?;7G zjhS3t5$pBaLj?m>JG7Hv>-b5MZ4f;pt~1SSCf(NN(H~MQl^~WQG_Z8Pjlj|Ff|@Cs z_ueOJrEN`-&C|!ra3MtDfaZj`*4o`+E;B|;yw;E`hV&q4Sg!P0vZf0Z`gGGd{<==! zA)+mbuHj*}@HB6G&3Fz!*s$2b2sd|ZNVCzfBU~wYnRvc?$LGO?5mKx9Blqa|vsXk< zclRyniFt)vo@t^zeq3F}w z;K6Bk`AXg{L2kC#w6N&zC+_mFkJ6Q!ElBog#aW=N&pEYpzZ7HHYFexi7xI45QI5sM zi-MjmK5ee|GS2XA0=7rlZYUp>Iu`XvTi@X(dl}8$nDi5DImrUIPp+#}BSaUrpB(P& z+B}9E!s2Kz*%fo%#pY+~)|A#%K_Qxv6|5gd&t~zBrejBH(Ux&vv&0kmzqCn+I7)*> z2W>iyL)LmtSrd!-D;8-^n@h^nF*B-*h8(eVL3mkfqyO$%Du79;N=-N_M_Nmih;N4{0 z!USh|txHgrgtnfn+zDE*-vWh>25$1nP~JXVKfT5BX@<>YSMI}IHr9zE*3mbImos{! zWwK5f2X)uAKFTbBeu;6#L`1tU@wo3;64p>_t-ggPxp_U>eoC$ zLe*DzL>8@9EGZ&FTJ+uwBiu^d5(2&vJ=Ke$P8+@fQlo=5+me}dRkB_qYIgJ7)2z29 z#Ct9v1TfflgIAZiS@q>ChPRh$y*|VhxMfyyg7l9HKG;!Z$`Mr3GB-=SU{>=uWr%%9 z{dYE_zN5+;nl9smFSuUn*gkzr!9GDPZ<^;%MC=+TDu(+O%IiwNjtSc1$JprnMLNns zEn(}4H4W$I5XHMJ`SxqA5?lIRa~m|i_@M^P1i9tH>*CgOZ322ZmN&2;5u7cI6!aIt zQZUn%IY`>odfvW@`&xS8ISB4mkXwpuY@YFiDljK7mN*cZ!LdF}Kirm<{lG01C-`|h zBBy5gwV?TE_?zLIp>ho|A3<23PIb{~m+0=H;xJQQM#Zw7t|7bKMiriVGU*{-H; zPV1lTMd1WEo9{AY#J&R>rgk6CW!^aaPOn+&T6_9nX}SH-H|J3)skr8VA~^=(u46&m zbSL^2tKFbYc#PfpyNj2FlPV1c3q}&PDTmqa#k(00D^&1r@td!N_tx`*m_`NgOd!W&(i^GdUe}RrMG*`5lEu&ZR7A zjx(D?!n|+8c!*}AK_&8?VhN~p;b#{~wKKB@L4g8<@Z_KyfD(CTKfnAxU^sOtN)@(C!FZKw833z zFWIilTH{9-wL)t;rMBS`U3pVe&o1c@(X-Ocgc#gp-Q0AVM($~3ioN7BZEyL!jJau9 z4Gs6X>!~H3MLbiM3^}di(KBxr+jRn-Cj}@*ZE7C+Xyv0lh^f5FXPx&70_P4JN?IAj zoET_JSShY-Ruc^y@r~cMcg~(!2Lme|t3Ji39KN>dX>^}GVtmVLtT4A7)QDDjNI@=W zd47VSx*ht?3i-S}tzFVJw&wmJC?Hl!(Jr}H-797_tN-8^~F2?$_M4awrOl4u7R)c_5({DyPu~(+8MJ$3Iq#`9#mv$K?k<1)}A7P*-zT^(joj*F67TWr;c?~c!`-#r5?dC|d+U`tS#l2vh)6Pbp z{)m7OJBjQ$#=oa8cGy(8>*VJV@;FkKCvB7MluxX53k)RBu~9a*F=J(U-QDkP(`A$; zcZF1oJHAr=OrC$&^hw7K}$hd?2uq$1-p$$?Hj~iVG0MLZvH8f21G&KHf zA*l0Y1l>{AZB^xMzhsej{tS!naWe+<%m+836kIu@Oa(`nN)ag+Tf#+|^`fG4UfX(Z zpevSM&ps%*S^{JU4y~(KlxWb6+%sSTJ1Hrwbv6dxZuAQ^m6RTJ=Q(WI2a9{3lG6X+ z#uaO_BS7t@lPNA=MN*HE5>p=d`E$U@d7GJqZ@l*78Qp*^U8PoXE673Y?nE`Yf2R#) zl~C2T&?ZD@AN%>va@2E=jH4_^m1Nv=))yn*~YU7DJ8$}e7B`rdAPEixkXiIi#i#O787Vax=uC*zqXw>!@b-PH@IDbk7w zT_e1nZ77lmd@|4SVkh@`#ENcknz{;WQ`R6H8+zC7p7-c#X~pefdZ3oQ2r=}khGU)T zxEudEOYP?7da8B^vfwVMDVc}!3ANSZ##39m3r27h4FC0N>K=&)Y1R|l#mop z6xt0-20CG#@kC|NdSeR+h{q^{tmTZLMxGj27rbr&32PBxY>5tVLn~rHNEId}3W5qi zz>-lw3c;P|ji4xl4sa3F=Y25*1Uyh7yD5V%7?}b!JV;oetdy)26s$$T`@%pfOh6?P z28S@$)cyfMeNzUxkjb712*l6NPs&e5%7f$#kycbxgg{{s7z|9+0DJor$tVh#=q

y0K+>lyDs1ny&^oIHHU${-MR9Qdby1WzNQzu<}9KUkph0imEgA<|M%2!R0k z)xw*s z85tooJ5hF$&Tcu&k_tG*|(Ll>^JjV4$)X zMT`PkM&TDIJ)$=mMMPuwp{U?ecq$GW4TZ}n!qHSiv=dksg@b{eFw)XsSp|8tELstY zhRezQ0%1bJQ>zl?{;OB}P#7wdf|EQ>8Y+(g%Q#8Pfn{;jo1%=OJQxR6bb?`^Pz6O4 z<^T$VMreDG2qq!jinHmAH>74V8k)9*pd#1wjplN-S!>PN@I~ za%wCH4H6bb_8?h$c(^Nr_FV$*TOO1*Q0aS8bn)I)4gdX$|55W6Sg-GI-Q6cTza&crg~7mOFw_J)L8&Ri%D}-2 zGBPq?I1DQ%Cxb%E%Sq!7!uSi_+XF}TLy@p*&eTY$(NGKMAR3_f0hJPe*Y~2 zwO#$-Y@f#e;qON-{)aPAq5qxaAMyJyUH{Vcj~Mtz%Kui^zjXa02L6%qzt#2sMibhMCW9nqj}I20lsK7hESgvJ#}rosr}Q~{zaoMo=%|(>B)LV zTJ-abd<+ntDoa8-0C1RJPgBj3GO?O&WMFB=dp%??H63i&t%_8Am#uZ`;}P5O=i;=| zM+H zGU??a;z{ztMcKL$JEMAhA5Og6ayHgA?r0P*-iTEYGvF%WfUru!jY_#puwQK?#trjp zPZg9u(aC9a)7I_CPhDp2@$Jah(SDi3Oa1m$8*PUS)4?qzlU1yR6DufRBXbv=)o;Y7 zZ6@7KUC!ha2nb?7+}jK|e5**xyT5r#1}@8)6Pr@tzd`B>81H`-3E^eZ-r6PSoe~>P zDe#5N`5Txd)W3&kZS7imC4~djj~`-CV*t_$h8|aCPzMMy(1ZhNkB3oT4rD(S_GMi~ zqT=&U=NU61bY+pg^e&=9FI>8`nWZoWTBFmkP#b^w3c>}W72wi%rGEOY}}!bn*{jAsW3frOkJY5KJw|Fel$YX zmc%)mo4>K##G?R~wSp_dDpin*3XZseXFlv}^nxMjCQ3()bC_-=&1SEOcygb2Nnq7@ zJVNt}_ta2AkN@;uuyf#1Gkv6`$@y?}&*WAqW+5+Vfxw$TnBx%gOnqf|Mkslj7}>A$ z?eXtkH4*)BR;0=Q!^0)Jmt-XHb*U5-HexF=k!gr zUuM+oOdJu|@)?sfh<@%fMm(FkQX5QosgVq@&PRS;0fJvK_UG#KdaT46G_9G^o1<6_TtID NR8PxTvrOGF>_2Ny literal 0 HcmV?d00001 diff --git a/Resources/images/voip_conference_mosaic.png b/Resources/images/voip_conference_mosaic.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa0137b7a80771c75dbf45b3c29b48d007f0b51 GIT binary patch literal 8850 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 Y#82$0!cXia|B1HH`-WhZro)T>0Sn}_EdT%j literal 0 HcmV?d00001 diff --git a/Resources/images/voip_conference_paused_big.png b/Resources/images/voip_conference_paused_big.png new file mode 100644 index 0000000000000000000000000000000000000000..745f17220a3fc775725a28b2f9a2b0cb5119964a GIT binary patch literal 2250 zcmcIlX;70_7Y6g+oy6lmY+h+VcgL6A_ z`TlGZxoOuak_0(&{PhvDvv;AH-(733o&B2iUE#%hTLZWHgrezL*0S2i>3Owbutk1m z-S+S6mmb@8#cG-s9I*2I7NMu3efVO&MV0ezU8uo$My|!mAs@44T?u+rd){`RZ?*Bb zRt_OfYG&SYJ8|a^45K1YF>Nkgcyp>kD7QHw`rP-M18sn=)HoR2^@oRl+-*#MTSK$r_lBn=`D0U4~=CQpa>J zOg0C8CK_`I!AM|OBe+42LOvx$RR?ftV!0~X>b|ff_0}#Ceo|~&rrOijSH{R*iVF}0<9NvAy{W8 z(8?y?l`wB+mMgk}g(oN5+`!hI(i7r>LoJYmIvfNUoVFdb1eqjM>B9AiTG^dak%T4` zg43@7$;|nQdRg;mVT-xCMAOlShQzwQQta+KEzYBfqGNq^#n4 zC*Y-^F8VnJ-X<$pA~`8p?h0Yx`Gb~=H>|R{9?k9bSm_3+e58$ihF_C-euc8ss_GLX zFIgL*y4?}uGu_AT=O0{+udfi}UEncvgaS2hKsC(yN^lp&>ro}nongtYM~9b}Q=+ku zmOZOc$_#;A3|8ZQtu`Ytd(-@qkG8cn*|F-C{_+bh2k%$KiH_n^OYg*;k)R6zz;c1K9T;jOb12o>poM+M|O={AK@no z`N+P-?j!unJ12KuDW7XNhJwMb}d3v_rVGj!9yCT;*D0qE){gldpsv0NBffYMB}VvCvE zi5_!=m@EaM^C%Th&pRPphFo3wgooIxeCO?bvErm$Li;3`>?qLK>$Fq|i22A42V(Hw zz4p81QXptlEWDw$f&G#>WLq;z{*L%)^@+2`5*eTwVXxm_j(4d}ToF@NoCPmZGiGU& zaYJnJwd5K+-7*VyE*-{#tF@XWcXBkTEHlC7{xdnzzs}*WztkK9%~>&5le}Bqno6n% z6?970K7l+naaI7(46&}JV#cOSWy|bZaT_lHmZ6rEe51GfAr2pTS;`*fVmol+*o`$~ zUZDH6=rw)UrCflpX{m_z$Ni=%SOYWn6m||_O!{N8%VB%pE@r!2<&Q87sd`YT2IDx| zcup^$1hZ@4(#$Wka+q-IFNy=};yK?KpT7rBRKc{cZkCSY{4tDM7$);!ytrFo(!zj^ zDquQ1HolfL-UB-y!9+3OJ=1kE3|D@9K^mV0|DOE`%hl{A70u-cmMzZ literal 0 HcmV?d00001 diff --git a/Resources/images/voip_conference_play_big.png b/Resources/images/voip_conference_play_big.png new file mode 100644 index 0000000000000000000000000000000000000000..303d05faa5f5fce96c7b0533a1dd37f07f111ba6 GIT binary patch literal 15790 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 y>-^N}?WcGJqKxgQ_)hkNXdEZU=Gz literal 0 HcmV?d00001 diff --git a/Resources/images/voip_dropdown.png b/Resources/images/voip_dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..d9fccac919fc541961a0f66f115f143f7ee3b9ed GIT binary patch literal 1256 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_edit.png b/Resources/images/voip_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..c24930212f56d7147112a52e8075d26276d4463e GIT binary patch literal 1834 zcma)6`8OMg7EWsmErU@^dA7z`3yO#x#7z@-G7l@$_hWu+7nhWEt<`TzhL>Cx$CcJJ=W_jp?{JT%2f;-Nsd z0_~&}L;q_jNaZn+8e`gnKLs4GQ>A2VJKuc%+=m|T>~VJ$a)pYY073}_Ct|wfdA5{C zHznj_8u>thya|Xc>2ih`idE$LFkT5O=XqYUd=0#jqyYO-TMt$EeUFrB-=tYoRO>&# zX>Sr@Qy;40!5!-2qu|-Pq&rFFcWxDYGY`$k1SKBkQ-+GJNLqw>k&b>Pynk#l`to|t zu4!n7n+B=wV`nv{q8rt%XFaYlR~YX8rKQKcX3TA!ev+8p!fF@_&$Y5cOW2Dm-?b6- zaekzXsIo~(*56P!J&8~C24y?cf@O`Qk%=Px+wtd}o590f3ki8raDbOC>s0S@0_nN$ zEUP^&h#hg6pZ;8{X5;nkXF2yd>p{0j{JTMXGLu1$pZIjh&z`G$fkCz+|Jjuh={Wu& z8YQ;UF3=SajIW8#HwXN%rWwvBFMqkjdf?#!g-pic&*`|m13o!QSb{&9affG%Allv* z##0`Stk|(U5e~6)C-5Acyx=8EjXVmkDMW-jS_>_T@C#qnYc-hp1ON!A!(mWo%Jjyp zm!D_2Y~S`AfkSWmz#swtL z$;_XBLiTkyZQ0~2Sw%f=Dt>4P#YaJZs?!2bPVEPp#p*8U_j4G!>pPsyWlbYtkkQf3 z$*3?~>(a%le*@1z{T~Ee`<5sTH+Occ^A)JX5(b2d=*M-);V32S$U#GBaZ#31#X;Zc zWC6~L&OTkSX1!%Y&J3WBcPgd$CvA#jojIqdreh=BhO)3Urb?VYKK6}Hwc?CYc{r6z zB@WA5EWA#C5P%OmI6gw>0t3wTn~xiU!>BRojWDO6i69FKRxT_1+s<-kq(cqcX|QX$ z{#Do-mAL7W1g8dXW1=BRxT1U9GCBsmina(O`UX+Y5bV?aipQ8}qjp7?#h56`E3-mW zu6EbEwEJ3W<$Pw9hqwFlK?2YaD5sc3;q((VHs}GMJxOPY!>?y**z6u6lrz;F^#J=P ze23-m1iV+;mk}K5csPw*X;-P_&O?*fdBQHBDJ%l9kBD{~e@os>CG;2q3I{L)()^u? zEZEL>aQkz!>LBgq1IEX+V(!0X9b>{H_0axPQxUTcXey&7IaLlco5flst2u9vm3yy# zM>p|$Nn@h9ek2D3>m2Ft8reqEsU0OLeG8m1_q7~GMLfADomzQ|{s*=3Hi6k36Q@#^ z(}S7LY8%Gj_ZX6W!YMT0f4pLR9WODcS!}}t{ROdvW;FG`Z8v)|R#sX9!8vU&RU%ue z0*?KfHw!f-bGTCvxU{EE+Z(79I16G@mMk2}_#JYFRsG|J+L(5>5n4q9tx_?N0_TKQ zi7D1L(tu1my@;4YKeG6VOY-r{qNL>i1x}$GhWvl{D4>2TpaIuJdNUODe3&X_RWc}h zd+#^xE5v_+63b;ocMtG}qX|se5$2QkpBMTZ1kfq!>@t%ari`c}so@=h)a3tVYeqZb z8YAd{t_Ih_Mh#_rJ$693Ezw(uoeuXUoUKJG{2V8;+M076a3_s}2K+9{aY|dDnh~0# zbm>wEI5f+(|Ha6pxyI^JV{Y5ZD&-4yWC`eRqn(lqsm+s9Qj5#o4qJAp0%w_6$9EHb zhS;OUFZxb}Fz32tDq_Kd>p?Ef>S@u?alfJ`F}9#ip0cRcZ;f1?@152Cv}WYFh#97O zD(6Ui4_)-)zUUfS9O*Zyzxlp?ygzrbvCHwy_5<%MB06NSO!T}?AuIEhxJ83=&-!V+P)sk>wXH-8Y@IXfM~3rq30=Ibz?t%B;5d1-zVUN4h^< zR(@-DlBG(;+OOvz^nEu22*#F3)n3IK6WNJh&2Hc#CIUQ=(meYw!!!*S6IegyhWQD~3m_^^if=+pVj%^~&m=k2re+C#Rk_WkVZYn>J^+ pr1wt5N0P4+%z=O70bPs~b)E7p*EO%93Z+snYPdB5R%`hv?k|ZMP4oZ& literal 0 HcmV?d00001 diff --git a/Resources/images/voip_export.png b/Resources/images/voip_export.png new file mode 100644 index 0000000000000000000000000000000000000000..3fdfa078aff91f4aa957b48684a1b9119377244d GIT binary patch literal 2383 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 A2mk;8 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_info.png b/Resources/images/voip_info.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8dd86f8a3121f7b4f80822360cde78c31c62a0 GIT binary patch literal 13635 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_menu_more.png b/Resources/images/voip_menu_more.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7f7d8fd31b8bf96b81cf24fe2a50303142acbb GIT binary patch literal 1772 zcmVEX>4Tx04R}tkv&MmKpe$iQ>7{u2MdabWT;LSL`5963Pq?8YK2xEOfLNpnlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JWDYS_3;J6>}?mh0_0Ya_BG^=e4&~)2O zCE{WxyCQ~O(TP5UFodYgEMr!ZlJFg0_XzOyF2=L`&;2>N)ttqEfJi*U4AUlFC!X50 z4bJ<-5muB{;&b9rlP*a7$aTfzH_io@1)do()2TV)2(egbVWovx(bR}1iKD8fQ@)V# zSmnIMSu0goAMvPXS6bmWZkNfxsT)#vvg`Uwzx2Cnp`zgz>RKS{4P zwdfJhvkhEaH#KDsxZDBypA6ZQT`5RY$mfCgGy0}1(0dDXt$MvR_Hp_Eq^Yaq4RCM> zj1(w)&F9@6t-bwwrqSOIa}{!@hjsIB00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliruDoOW)CO6Xkuptno+aiHJ2r7YS zLIgENd1xCG+Z3w;0TfVyErrU<8XIPJ?(t#EvTb*}A01xw|2B7Ke!2JDd+zxlOevuz ze_)kpUP{0`01#kU3!Ul=dyWGn+5V(VgKni}i{;uZpiKZOviy4qgs#!Jv8}7EIhGUL z;0ZlTEFS?VMLrT-6`{J0u=ktvVI%#a$sc+hBp(B~6ZwiTiwGMkA6t8+zxTW2lV;rH z3p^vBBLHTgIN1=akA!?*roe8cW^2p*ZOY}#RJ)SW@MywV+|||`V*n7#wK=CvDJK*F z=G`$P@eTkmAT+l7jws0zq9%XqY7y>-qmorDnwP?15%3@rFyCpg0P|TG)@_)v#RM91 z8mxsbbHc_CPFupIxsP{+y}yI-lY`(N-+#~ZXVO7LwmUXmqU~c20+gBY{X`gWfZJE* zy7B2a&u{d%E`a7f5Xy>#{zYt8wzsxiNX-}kB7rS`XrXlgE*Am41jy4jq2s^+&>8j) zP{ODJ=!*iZdN>ZLiUj?~bA~1WaC?K*LiCzIY5>fc02=|(Q33Di2zYw)j(O=)N^#V3 z%`-HY1AxssT5iUNl~Nl2DdjYU+Z!yknU_H8d&hQr$SN_<>{gpc3I^BK9yCf9|5``D zs{pN;7|j9L0(?(`y`?4AzD)L>1a>!vmy4nI3-C~$tNxh`-q^m?^GjCno4!B|gANpw zS0ojK;Dwu^e;nBD39ZyDJpg7ExnHBA>G6)Rw?E~1ZubWzn&q=;KmlMTv3#PGGE-pt zu2=(rMGl;@`>(~#`V^Qz4bH`nB#Rnb!pmUm6OKBEU@4PrFLylrldNC}m1j)=i_a@6 zSd&QMj-JC5M8XU>o>xF5$|N-C_{}CXNC42_3!Np%Vu!G2B0=v1oIK1rQsCxHaa|@^ z3;=V@cqf2!4qW1A=bG^k$9>b_3#=ee?{qF9t*N>*>>U^v{yT#HL4wo*h!p{iiKgdn zLMP=F?Lq%nHssL)lf*$7yrv`U{W^V+Cw{dn=s!{FvK|)5%YbwPurtph``21{Swos|rw0<-mhPklPbpA*`3BN(z!FX+F6#>=~S@`TsBTGut8X%jPKn O0000 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 W6E)utFgWp_YSvQIS1nhz4*Ne*KOR;9 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_micro_off.png b/Resources/images/voip_micro_off.png new file mode 100644 index 0000000000000000000000000000000000000000..57569b4f263db9b4df79e2f5678a52a471fa018e GIT binary patch literal 4208 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 MxrwDQ$+6obR40OU{Npt0KBFqXsbia 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_0.png b/Resources/images/voip_numpad_0.png new file mode 100644 index 0000000000000000000000000000000000000000..115bdb17d03552a9694fc6c9ff8d96b224f7e15c GIT binary patch literal 14607 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 sg75MpN2Ob%7 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_1.png b/Resources/images/voip_numpad_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8b7f5cc10b9bb08008007c0da83b552f7cee02 GIT binary patch literal 10598 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 G{Qm&j{$XYS literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_2.png b/Resources/images/voip_numpad_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6b561c468652c2c924e5ed12acae9421e4292004 GIT binary patch literal 8603 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_3.png b/Resources/images/voip_numpad_3.png new file mode 100644 index 0000000000000000000000000000000000000000..386715586a9396732fe466e8137399039c1141f2 GIT binary patch literal 8978 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 b344$yB!X(GpwgtWd7NR4%ngh5&z%1sJ(}BX literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_5.png b/Resources/images/voip_numpad_5.png new file mode 100644 index 0000000000000000000000000000000000000000..a18af28e5399e74ba046bbd78b3b695eb1856854 GIT binary patch literal 8747 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_6.png b/Resources/images/voip_numpad_6.png new file mode 100644 index 0000000000000000000000000000000000000000..79279cb998a9b1ef453e4821888e2776fd979376 GIT binary patch literal 10150 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_7.png b/Resources/images/voip_numpad_7.png new file mode 100644 index 0000000000000000000000000000000000000000..c68656fd34d1e3bc4aec4ec71a512a0f845a8f30 GIT binary patch literal 7606 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_8.png b/Resources/images/voip_numpad_8.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84c96ba0ceb5bf8716c69c8f932df8cc1bc325 GIT binary patch literal 10857 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_9.png b/Resources/images/voip_numpad_9.png new file mode 100644 index 0000000000000000000000000000000000000000..af3e0e0bf371fa36f44236dc7bf40ae4662516a7 GIT binary patch literal 10035 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 OtD&x`PASYO{C@z>K{*=$ literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_hash.png b/Resources/images/voip_numpad_hash.png new file mode 100644 index 0000000000000000000000000000000000000000..790e7d12e914b9ef6c562c4515179132ef9ac816 GIT binary patch literal 12417 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_numpad_star.png b/Resources/images/voip_numpad_star.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2649de4f42e33f68a270be9093e010319e7df7 GIT binary patch literal 10163 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 literal 0 HcmV?d00001 diff --git a/Resources/images/voip_pause.png b/Resources/images/voip_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..e888da937c47ee8cb5d4d7ffe25a8172ffd247ed GIT binary patch literal 830 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!54M>*SFkE3^U~I{Bb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZqgtY@)*de>EVPOg5G}l-C9=?Ig=kc%!Okz-vrJSp_4=B!4<774 zx~jQ*^E$qDO$t94A3b}v3r@d!PR%gpxD7o#U`Y1_l zx7N2ki^Q8b6q+`i(Mk53H0g!KzIP8FzmDxmFSYyr{6%=N7;}x%M;&9I*%i$dRhP{y z-V3)!1cr5z3aOW~vPbrM^|O{C+we zOP=~!EPZWE>e=c~;%vpgP8nU#benKMX_|s#OOuwD#$mUfu(=}Knz#DPKeWg0chPH& zQ8g&iS-`}*={5WR=KFV}exBsi*OXx26)*EVndQYzRw>itKkdrq9OHaY&$jN%wEaQs zX?C9Lw{CeMXt04dCT6=yD*ui;q zl9j8U@D>zs^oVIx?>)Sm`R(4n)yr<)=XX;qn%cI()BqSQY)RhkE`yrbIAjbYUuv2GW768w#WAGf*4rzFd50VX+Ac=6 zypfyu+Eqp|Bp{D-yTeX7jlFk$x-|Amr>y_B_uTD2QZFYfgRH>-4c|3vWg@d><33lM zK5_Z}#ixZb%d*#&<`t%&{$?xlb52|Jls~`zpF8onSjx*~PV}9dn_|`fKRoZ6zxEAB zR%v@Hh~{!^Tp%FQ#N?=`!P2_GA%La=P64$)B7a;v)wdvQ>c_n=)=r(vd;5FAlj9cg vai3>MR(5r01j-#R+_h~NGlpM50$*N;vsk$Psww`q5XAL#^>bP0l+XkKpZiHz literal 0 HcmV?d00001 diff --git a/Resources/images/voip_radio_off.png b/Resources/images/voip_radio_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b703dea80e9b1f96772a0bf1483ed5b045999e71 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!78A!GZ$vy{CEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaO81AIbU-3xqtqEaJrOTD8~y`xfqY`>TcpQtpS$drKiZ0|^*ND7ejwlS{< zYT+pf@(X6@WPg7%M%`|a=z*O2hKpW6W7m4RIEG~0dppC>`-p=;YqCjPQM%%yjEPD~ zrE^*%B0RWqbyB)Fi>wn6$qC9xo~raMydyzbjQtizxXd-NtVNdR{|1UhWt`DF^Q^Js zbLdIF$_+>-rB}``tn}xd!DGY;Jf} za#eiW0xP>yq0@e}YFzaV5i9r52@aZ>J8y}oUbyhpI;Tldmn>AGR6Xy0zp~9r_rdR3 zTn~CY7^SkZ=1dQ2+A{6snx;u@yt$E|*r!BPT>dBQWpbr>uIW3$C2CtL#c~Cf9E&f# zwpz65%9Y9IcK!Ka9dv+~=`J4+TS5nuF#C*i2b7p~YQxyWCo~>s`S5{BZsmbyxtnzi zvy~E7v*jpE%+=j+)2)x;z(E#EJ;rv6)t%D1jm-K*JnnIP3hQ-rq{}BBGT=E3MxUow aunVl8FgNPeQGQ^AGI+ZBxvX!lvI6;x#X;^) z4C~IxyaaMo0(?ST-3xrYBU62%Qh}sjY=&=CT2MkRNF*`^CaA0cVvcnBd7Ca?yeOR zj>>m9Pw(P$nzpLB!`roRL$`uo?2&^9_3paF^lS{uoysvd-KWZ*jpW5|i$?kd5>KSI| zEB9^P(W!6N>=mo~yH)dRh2wSRuSX?aFUi|1ZHZb|xMf#Rp5}*D;hSW`^R?s`%N{q6 z2--bmLd(nPMJp_i8qT|_{r2=et_>IXmQ}Q^pLF%Lqh`_Ci%Fg{pT7V5xoSp9gzyBN zxnWXI1iFoRjZGQ~W3}9!PkgMNWt9Co$b^+koM)v-ZSdu#D>jz3Dw;ZMTlFf)r0l3< zTgacOpH_Qc%#e915#;Qj!Wnz&k8YgzNQO;lyrVBk2-d!ufIV7rcPBdh)<9(OrDg?^n0 i?3zsq91v9B>EHkQlF#g1<3?b5VDNPHb6Mw<&;$V1UKdaR literal 0 HcmV?d00001 diff --git a/Resources/images/voip_remote_recording.png b/Resources/images/voip_remote_recording.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4e940093ca57f4eb605944c60461665c6e35c5 GIT binary patch literal 2673 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 Qf4`5mrmjYfnr+1Y0ME-N^Z)<= literal 0 HcmV?d00001 diff --git a/Resources/images/voip_speaker_on.png b/Resources/images/voip_speaker_on.png new file mode 100644 index 0000000000000000000000000000000000000000..07f13c9b62dc3813fb24c677dc1838f7fe060c8e GIT binary patch literal 2599 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 PzZbe%Mw+!6PBH%jae3XB literal 0 HcmV?d00001 diff --git a/Resources/images/voip_spinner.png b/Resources/images/voip_spinner.png new file mode 100644 index 0000000000000000000000000000000000000000..8238de56bb93bfba96162300ceec55aa69e827e6 GIT binary patch literal 2499 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 RD!>1JE3+%66(-&Z{{rv#z>NR^ literal 0 HcmV?d00001 diff --git a/linphone-Info.plist b/linphone-Info.plist index 8bd93f866..b9d24c1fb 100644 --- a/linphone-Info.plist +++ b/linphone-Info.plist @@ -102,6 +102,8 @@ Share photos with your friends and customize avatars NSContactsUsageDescription Make calls with your friends + NSLocalNetworkUsageDescription + Stream audio and video through the local network NSLocationWhenInUseUsageDescription Linphone will not use, store or communicate your location. The authorization allows us to detect Wifi connection changes NSMicrophoneUsageDescription @@ -110,8 +112,6 @@ Add tranfered files to your library NSPhotoLibraryUsageDescription Share photos with your friends and customize avatars - NSLocalNetworkUsageDescription - Stream audio and video through the local network NSUbiquitousContainers iCloud.org.linphone.phone @@ -126,6 +126,12 @@ NSVoIPUsageDescription Make audio/video calls + UIAppFonts + + Roboto-Regular.ttf + Roboto-Bold.ttf + Roboto-Italic.ttf + UIApplicationShortcutItems diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 3fbac849c..f0ab4df60 100644 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -7,13 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 017AC1D70F142AE8EAC13BDB /* Pods_msgNotificationContent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A164BAF39B3A5B9F905917A7 /* Pods_msgNotificationContent.framework */; }; 152F22361B15E889008C0621 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 152F22351B15E889008C0621 /* libxml2.dylib */; }; 1D3623260D0F684500981E51 /* LinphoneAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* LinphoneAppDelegate.m */; }; 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 2214EB7A12F846B1002A5394 /* UICallButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2214EB7912F846B1002A5394 /* UICallButton.m */; }; - 2214EB8912F84EBB002A5394 /* UIHangUpButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2214EB8812F84EBB002A5394 /* UIHangUpButton.m */; }; 2214EBF312F86360002A5394 /* UIMutedMicroButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2214EBF212F86360002A5394 /* UIMutedMicroButton.m */; }; 22276E8913C73DC000210156 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22276E8813C73DC000210156 /* CoreMedia.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 22405EEE1600B4E400B92522 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22405EED1600B4E400B92522 /* AssetsLibrary.framework */; }; @@ -25,8 +25,6 @@ 2274401A106F31BD006EC466 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22744019106F31BD006EC466 /* CoreAudio.framework */; }; 2274402F106F335E006EC466 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2274402E106F335E006EC466 /* AudioToolbox.framework */; }; 228697C411AC29B800E9E0CA /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 228697C311AC29B800E9E0CA /* CFNetwork.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 22968A5F12F875C600588287 /* UISpeakerButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 22968A5E12F875C600588287 /* UISpeakerButton.m */; }; - 22AA8B0113D83F6300B30535 /* UICamSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 22AA8B0013D83F6300B30535 /* UICamSwitch.m */; }; 22C755601317E59C007BC101 /* UIBluetoothButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C7555F1317E59C007BC101 /* UIBluetoothButton.m */; }; 22D1B68112A3E0BE001AE361 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 22D1B68012A3E0BE001AE361 /* libresolv.dylib */; }; 22E0A822111C44E100B04932 /* AboutView.m in Sources */ = {isa = PBXBuildFile; fileRef = 22E0A81C111C44E100B04932 /* AboutView.m */; }; @@ -53,10 +51,8 @@ 24E1C7C01F9A235600D3F981 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24E1C7B91F9A235500D3F981 /* Contacts.framework */; }; 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; }; 340751971506459A00B89C47 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 340751961506459A00B89C47 /* CoreTelephony.framework */; }; - 340751E7150F38FD00B89C47 /* UIVideoButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 340751E6150F38FD00B89C47 /* UIVideoButton.m */; }; 34216F401547EBCD00EA9777 /* VideoZoomHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 34216F3F1547EBCD00EA9777 /* VideoZoomHandler.m */; }; 344ABDF114850AE9007420B6 /* libc++.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 344ABDEF14850AE9007420B6 /* libc++.1.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - 369CCF81C921CD7C4E49A637 /* Pods_msgNotificationContent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82E9DEDA2A78C6DBBD1A54DB /* Pods_msgNotificationContent.framework */; }; 570742581D5A0691004B9C84 /* ShopView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 570742561D5A0691004B9C84 /* ShopView.xib */; }; 570742611D5A09B8004B9C84 /* ShopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5707425F1D5A09B8004B9C84 /* ShopView.m */; }; 570742671D5A63DB004B9C84 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 570742661D5A63DB004B9C84 /* StoreKit.framework */; }; @@ -109,7 +105,6 @@ 61AE364F20C00B370089D9D3 /* ShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 61AE364E20C00B370089D9D3 /* ShareViewController.m */; }; 61AE365220C00B370089D9D3 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 61AE365020C00B370089D9D3 /* MainInterface.storyboard */; }; 61AE365620C00B370089D9D3 /* linphoneExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 61AE364B20C00B370089D9D3 /* linphoneExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 61AEBEA321906AFC00F35E7F /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; 61AEBEBD2191990A00F35E7F /* DevicesListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 61AEBEBC2191990A00F35E7F /* DevicesListView.m */; }; 61AEBEBF2191991F00F35E7F /* DevicesListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEBE2191991F00F35E7F /* DevicesListView.xib */; }; 61AEBEC62191E47500F35E7F /* chevron_list_close.png in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEC52191E47500F35E7F /* chevron_list_close.png */; }; @@ -563,11 +558,7 @@ 6341807C1BBC103100F71761 /* ChatConversationCreateTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6341807B1BBC103100F71761 /* ChatConversationCreateTableView.m */; }; 63423C0A1C4501D000D9A050 /* Contact.m in Sources */ = {isa = PBXBuildFile; fileRef = 63423C091C4501D000D9A050 /* Contact.m */; }; 634610061B61330300548952 /* UILabel+Boldify.m in Sources */ = {isa = PBXBuildFile; fileRef = 634610051B61330300548952 /* UILabel+Boldify.m */; }; - 6346100F1B61409800548952 /* CallOutgoingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6346100E1B61409800548952 /* CallOutgoingView.m */; }; - 634610121B6140A500548952 /* CallOutgoingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 634610101B6140A500548952 /* CallOutgoingView.xib */; }; 635173F91BA082A40095EB0A /* UIChatBubblePhotoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 635173F81BA082A40095EB0A /* UIChatBubblePhotoCell.m */; }; - 6352A5751BE0D4B800594C1C /* CallSideMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6352A5731BE0D4B800594C1C /* CallSideMenuView.m */; }; - 6352A5761BE0D4B800594C1C /* CallSideMenuView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6352A5741BE0D4B800594C1C /* CallSideMenuView.xib */; }; 635775251B6673EC00C8B704 /* HistoryDetailsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 635775241B6673EC00C8B704 /* HistoryDetailsTableView.m */; }; 636316D11A1DEBCB0009B839 /* AboutView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 636316D31A1DEBCB0009B839 /* AboutView.xib */; }; 636316D41A1DEC650009B839 /* SettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 636316D61A1DEC650009B839 /* SettingsView.xib */; }; @@ -577,7 +568,6 @@ 6377AC801BDE4069007F7625 /* UIBackToCallButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6377AC7F1BDE4069007F7625 /* UIBackToCallButton.m */; }; 6381DA7D1C1AD5EA00DF3BBD /* UIBouncingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6381DA7C1C1AD5EA00DF3BBD /* UIBouncingView.m */; }; 638F1A621C2021B2004B8E02 /* DialerView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 638F1A601C2021B2004B8E02 /* DialerView~ipad.xib */; }; - 638F1A881C2167C2004B8E02 /* CallView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */; }; 638F1A911C21993D004B8E02 /* UICompositeView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 638F1A8F1C21993D004B8E02 /* UICompositeView~ipad.xib */; }; 639CEAFD1A1DF4D9004DE38F /* StatusBarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639CEAFF1A1DF4D9004DE38F /* StatusBarView.xib */; }; 639CEB001A1DF4E4004DE38F /* UIHistoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639CEB021A1DF4E4004DE38F /* UIHistoryCell.xib */; }; @@ -585,7 +575,6 @@ 639CEB091A1DF4FA004DE38F /* UIChatCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639CEB0B1A1DF4FA004DE38F /* UIChatCell.xib */; }; 639E9C801C0DB13D00019A75 /* UICheckBoxTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 639E9C7F1C0DB13D00019A75 /* UICheckBoxTableView.m */; }; 639E9C931C0DB7BE00019A75 /* FirstLoginView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639E9C951C0DB7BE00019A75 /* FirstLoginView.xib */; }; - 639E9C9D1C0DB7DF00019A75 /* UICallPausedCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639E9C9F1C0DB7DF00019A75 /* UICallPausedCell.xib */; }; 639E9CA01C0DB7E500019A75 /* UIChatBubblePhotoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639E9CA21C0DB7E500019A75 /* UIChatBubblePhotoCell.xib */; }; 639E9CA31C0DB7EA00019A75 /* UIChatBubbleTextCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639E9CA51C0DB7EA00019A75 /* UIChatBubbleTextCell.xib */; }; 639E9CA61C0DB7F200019A75 /* UIChatCreateCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639E9CA81C0DB7F200019A75 /* UIChatCreateCell.xib */; }; @@ -609,7 +598,6 @@ 63B81A101B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 63B81A0B1B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m */; }; 63B8D68C1BCBE65600C12B09 /* ChatConversationCreateView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63B8D68E1BCBE65600C12B09 /* ChatConversationCreateView.xib */; }; 63B8D6A21BCBF43100C12B09 /* UIChatCreateCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 63B8D6A01BCBF43100C12B09 /* UIChatCreateCell.m */; }; - 63BC49E21BA2CDFC004EC273 /* UICallPausedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 63BC49E11BA2CDFC004EC273 /* UICallPausedCell.m */; }; 63BE7A781D75BDF6000990EF /* ShopTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63BE7A771D75BDF6000990EF /* ShopTableView.m */; }; 63C441C31BBC23ED0053DC5E /* UIAssistantTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 63C441C21BBC23ED0053DC5E /* UIAssistantTextField.m */; }; 63CD4B4F1A5AAC8C00B84282 /* DTAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63CD4B4E1A5AAC8C00B84282 /* DTAlertView.m */; }; @@ -622,16 +610,12 @@ 63E27A321C4FECD000D332AE /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63E27A311C4FECD000D332AE /* LaunchScreen.xib */; }; 63E27A521C50EDB000D332AE /* hold.mkv in Resources */ = {isa = PBXBuildFile; fileRef = 63E27A511C50EB2700D332AE /* hold.mkv */; }; 63E59A3F1ADE70D900646FB3 /* InAppProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E59A3E1ADE70D900646FB3 /* InAppProductsManager.m */; }; - 63E802DB1C625AEF000D5509 /* BuildFile in Resources */ = {isa = PBXBuildFile; }; + 63E802DB1C625AEF000D5509 /* (null) in Resources */ = {isa = PBXBuildFile; }; 63EC8D391D7438660066547B /* AssistantLinkView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63EC8D3B1D7438660066547B /* AssistantLinkView.xib */; }; 63F1DF441BCE618E00EDED90 /* UIAddressTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 63F1DF431BCE618E00EDED90 /* UIAddressTextField.m */; }; - 63F1DF4B1BCE983200EDED90 /* CallConferenceTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63F1DF4A1BCE983200EDED90 /* CallConferenceTableView.m */; }; - 63F1DF4F1BCE985F00EDED90 /* UICallConferenceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 63F1DF4D1BCE985F00EDED90 /* UICallConferenceCell.m */; }; - 63F1DF511BCE986A00EDED90 /* UICallConferenceCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63F1DF531BCE986A00EDED90 /* UICallConferenceCell.xib */; }; 63FB30351A680E73008CA393 /* UIRoundedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FB30341A680E73008CA393 /* UIRoundedImageView.m */; }; 70E542F313E147E3002BA2C0 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F213E147E3002BA2C0 /* OpenGLES.framework */; }; 70E542F513E147EB002BA2C0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F413E147EB002BA2C0 /* QuartzCore.framework */; }; - 8C1B67061E671826001EA2FE /* AudioHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C1B67051E671826001EA2FE /* AudioHelper.m */; }; 8C2595DF1DEDCC8E007A6424 /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C2595DE1DEDCC8E007A6424 /* CallKit.framework */; }; 8C2A81951F87B8000012A66B /* chat_group_avatar@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C2A81931F87B7FF0012A66B /* chat_group_avatar@2x.png */; }; 8C2A81961F87B8000012A66B /* chat_group_avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C2A81941F87B8000012A66B /* chat_group_avatar.png */; }; @@ -670,8 +654,11 @@ 8CF25D961F9F336100BEA0C1 /* check_unselected.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CF25D941F9F336100BEA0C1 /* check_unselected.png */; }; 8CF25D9D1F9F76BD00BEA0C1 /* chat_group_informations.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CF25D9B1F9F76BC00BEA0C1 /* chat_group_informations.png */; }; 8CF25D9E1F9F76BD00BEA0C1 /* chat_group_informations@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CF25D9C1F9F76BD00BEA0C1 /* chat_group_informations@2x.png */; }; - 93566413F75DA69D2811A716 /* Pods_msgNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F30EA7BEA39DA427CE0754E /* Pods_msgNotificationService.framework */; }; - A634ABAFCB39B6AAE4CA991D /* Pods_linphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65CEDD144CABFAA70A29AF27 /* Pods_linphone.framework */; }; + 9C0B30F54D61774AFD1473CE /* Pods_linphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B464E44A606CB50A65A96FE2 /* Pods_linphone.framework */; }; + C60B66682721AFFA0026AC7D /* CallStatisticsData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60B66672721AFFA0026AC7D /* CallStatisticsData.swift */; }; + C60D265627299C94006238BB /* ControlsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60D265527299C94006238BB /* ControlsViewModel.swift */; }; + C60D265827299F70006238BB /* CoreExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60D265727299F6F006238BB /* CoreExtensions.swift */; }; + C60D265C272AA0BD006238BB /* UIImageExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60D265B272AA0BD006238BB /* UIImageExtensions.swift */; }; C61B1BF22667D075001A4E4A /* menu_security_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C61B1BF12667D075001A4E4A /* menu_security_default.png */; }; C61B1BF42667D202001A4E4A /* more_menu_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C61B1BF32667D202001A4E4A /* more_menu_default.png */; }; C61B1BF72667EC6B001A4E4A /* ephemeral_messages_color_A.png in Resources */ = {isa = PBXBuildFile; fileRef = C61B1BF62667EC6B001A4E4A /* ephemeral_messages_color_A.png */; }; @@ -681,14 +668,105 @@ C622E3F226A81290004F5434 /* vr_off.png in Resources */ = {isa = PBXBuildFile; fileRef = C622E3EC26A8128F004F5434 /* vr_off.png */; }; C622E3F326A81290004F5434 /* vr_pause.png in Resources */ = {isa = PBXBuildFile; fileRef = C622E3ED26A8128F004F5434 /* vr_pause.png */; }; C622E3F426A81290004F5434 /* vr_play.png in Resources */ = {isa = PBXBuildFile; fileRef = C622E3EE26A81290004F5434 /* vr_play.png */; }; + C6277DA8274BF1CE00406FB9 /* voip_radio_on.png in Resources */ = {isa = PBXBuildFile; fileRef = C6277DA6274BF1CD00406FB9 /* voip_radio_on.png */; }; + C6277DA9274BF1CE00406FB9 /* voip_radio_off.png in Resources */ = {isa = PBXBuildFile; fileRef = C6277DA7274BF1CD00406FB9 /* voip_radio_off.png */; }; + C6278497273C21E1002FAA29 /* LocalVideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6278496273C21E1002FAA29 /* LocalVideoView.swift */; }; C64A854E2667B67200252AD2 /* EphemeralSettingsView.m in Sources */ = {isa = PBXBuildFile; fileRef = C64A854D2667B67200252AD2 /* EphemeralSettingsView.m */; }; C64A85502667B67A00252AD2 /* EphemeralSettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C64A854F2667B67A00252AD2 /* EphemeralSettingsView.xib */; }; C64A85522667B74100252AD2 /* ephemeral_messages_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C64A85512667B74100252AD2 /* ephemeral_messages_default.png */; }; + C6586149273E595700A0DBFC /* VoipExtraButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6586148273E595700A0DBFC /* VoipExtraButtonsView.swift */; }; + C658614C273E5B5E00A0DBFC /* VoipExtraButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C658614B273E5B5E00A0DBFC /* VoipExtraButton.swift */; }; + C65A5D3027216B86005BA038 /* ActiveCallOrConferenceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65A5D2F27216B86005BA038 /* ActiveCallOrConferenceView.swift */; }; + C65A5D3B27216CC0005BA038 /* MutableLiveData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65A5D3727216CC0005BA038 /* MutableLiveData.swift */; }; + C65A5D3F27216E3A005BA038 /* CallData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65A5D3E27216E3A005BA038 /* CallData.swift */; }; + C65A5D45272196AE005BA038 /* OptionalExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65A5D44272196AE005BA038 /* OptionalExtensions.swift */; }; C666756F264C925800A0273C /* VFSUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA657B261C950C0020CB43 /* VFSUtil.swift */; }; C6667571264C925B00A0273C /* VFSUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA657B261C950C0020CB43 /* VFSUtil.swift */; }; C66B03BB26E8EB1A009B5EDC /* UIChatReplyBubbleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C66B03BD26E8EB1A009B5EDC /* UIChatReplyBubbleView.xib */; }; C66B040A26EFDA55009B5EDC /* reply_cancel.png in Resources */ = {isa = PBXBuildFile; fileRef = C66B040926EFDA54009B5EDC /* reply_cancel.png */; }; C66B040E26F095D1009B5EDC /* cancel_forward.png in Resources */ = {isa = PBXBuildFile; fileRef = C66B040D26F095CE009B5EDC /* cancel_forward.png */; }; + C6710F4F2722903200ED888F /* RotatingSpinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F4E2722903200ED888F /* RotatingSpinner.swift */; }; + C6710F512722932600ED888F /* UIImageViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F502722932600ED888F /* UIImageViewExtensions.swift */; }; + C6710F53272297C400ED888F /* VoipTexts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F52272297C400ED888F /* VoipTexts.swift */; }; + C6710F5527229D5900ED888F /* LightDarkColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F5427229D5900ED888F /* LightDarkColor.swift */; }; + C6710F5727229DEE00ED888F /* TextStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F5627229DEE00ED888F /* TextStyle.swift */; }; + C6710F592722A9B800ED888F /* StyledLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F582722A9B800ED888F /* StyledLabel.swift */; }; + C6710F5C2722AAED00ED888F /* UIDeviceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710F5B2722AAED00ED888F /* UIDeviceExtensions.swift */; }; + C6710F612722AECB00ED888F /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C6710F5E2722AECB00ED888F /* Roboto-Italic.ttf */; }; + C6710F622722AECB00ED888F /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C6710F5F2722AECB00ED888F /* Roboto-Bold.ttf */; }; + C6710F632722AECB00ED888F /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C6710F602722AECB00ED888F /* Roboto-Regular.ttf */; }; + C6710F652722B13000ED888F /* voip_spinner.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F642722B13000ED888F /* voip_spinner.png */; }; + C6710F9F2722B20000ED888F /* voip_numpad_1.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F662722B1EF00ED888F /* voip_numpad_1.png */; }; + C6710FA02722B20000ED888F /* voip_numpad_0.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F672722B1EF00ED888F /* voip_numpad_0.png */; }; + C6710FA12722B20000ED888F /* voip_copy.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F682722B1EF00ED888F /* voip_copy.png */; }; + C6710FA22722B20000ED888F /* voip_merge_calls.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F692722B1EF00ED888F /* voip_merge_calls.png */; }; + C6710FA32722B20000ED888F /* voip_call_numpad.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F6A2722B1EF00ED888F /* voip_call_numpad.png */; }; + C6710FA42722B20000ED888F /* voip_single_contact_avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F6B2722B1F000ED888F /* voip_single_contact_avatar.png */; }; + C6710FA52722B20000ED888F /* voip_mandatory.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F6C2722B1F000ED888F /* voip_mandatory.png */; }; + C6710FA62722B20000ED888F /* voip_bluetooth.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F6D2722B1F000ED888F /* voip_bluetooth.png */; }; + C6710FA72722B20000ED888F /* voip_call_more.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F6E2722B1F000ED888F /* voip_call_more.png */; }; + C6710FA82722B20000ED888F /* voip_multiple_contacts_avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F6F2722B1F100ED888F /* voip_multiple_contacts_avatar.png */; }; + C6710FA92722B20000ED888F /* voip_call_stats.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F702722B1F100ED888F /* voip_call_stats.png */; }; + C6710FAA2722B20000ED888F /* voip_conference_active_speaker.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F712722B1F100ED888F /* voip_conference_active_speaker.png */; }; + C6710FAB2722B20000ED888F /* voip_edit.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F722722B1F200ED888F /* voip_edit.png */; }; + C6710FAC2722B20000ED888F /* voip_call_chat.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F732722B1F200ED888F /* voip_call_chat.png */; }; + C6710FAD2722B20000ED888F /* voip_numpad_5.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F742722B1F200ED888F /* voip_numpad_5.png */; }; + C6710FAE2722B20000ED888F /* voip_hangup.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F752722B1F300ED888F /* voip_hangup.png */; }; + C6710FAF2722B20000ED888F /* voip_conference_new.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F762722B1F300ED888F /* voip_conference_new.png */; }; + C6710FB02722B20000ED888F /* voip_chat_rooms_list.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F772722B1F300ED888F /* voip_chat_rooms_list.png */; }; + C6710FB12722B20000ED888F /* voip_micro_on.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F782722B1F300ED888F /* voip_micro_on.png */; }; + C6710FB22722B20000ED888F /* voip_calls_list.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F792722B1F400ED888F /* voip_calls_list.png */; }; + C6710FB32722B20000ED888F /* voip_pause.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F7A2722B1F400ED888F /* voip_pause.png */; }; + C6710FB42722B20000ED888F /* voip_conference_mosaic.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F7B2722B1F500ED888F /* voip_conference_mosaic.png */; }; + C6710FB52722B20000ED888F /* voip_delete.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F7C2722B1F500ED888F /* voip_delete.png */; }; + C6710FB62722B20000ED888F /* voip_audio_routes.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F7D2722B1F500ED888F /* voip_audio_routes.png */; }; + C6710FB72722B20000ED888F /* voip_numpad_6.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F7E2722B1F600ED888F /* voip_numpad_6.png */; }; + C6710FB82722B20000ED888F /* voip_numpad_3.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F7F2722B1F600ED888F /* voip_numpad_3.png */; }; + C6710FB92722B20000ED888F /* voip_call_add.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F802722B1F600ED888F /* voip_call_add.png */; }; + C6710FBA2722B20000ED888F /* voip_numpad_9.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F812722B1F700ED888F /* voip_numpad_9.png */; }; + C6710FBB2722B20000ED888F /* voip_call.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F822722B1F700ED888F /* voip_call.png */; }; + C6710FBC2722B20000ED888F /* voip_change_camera.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F832722B1F700ED888F /* voip_change_camera.png */; }; + C6710FBD2722B20000ED888F /* voip_call_header_paused.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F842722B1F800ED888F /* voip_call_header_paused.png */; }; + C6710FBE2722B20000ED888F /* voip_export.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F852722B1F800ED888F /* voip_export.png */; }; + C6710FBF2722B20000ED888F /* voip_earpiece.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F862722B1F800ED888F /* voip_earpiece.png */; }; + C6710FC02722B20000ED888F /* voip_numpad_hash.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F872722B1F800ED888F /* voip_numpad_hash.png */; }; + C6710FC12722B20000ED888F /* voip_micro_off.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F882722B1F900ED888F /* voip_micro_off.png */; }; + C6710FC22722B20000ED888F /* voip_numpad_2.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F892722B1F900ED888F /* voip_numpad_2.png */; }; + C6710FC32722B20000ED888F /* voip_cancel.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F8A2722B1F900ED888F /* voip_cancel.png */; }; + C6710FC42722B20000ED888F /* voip_numpad_star.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F8B2722B1FA00ED888F /* voip_numpad_star.png */; }; + C6710FC52722B20000ED888F /* voip_camera_off.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F8C2722B1FA00ED888F /* voip_camera_off.png */; }; + C6710FC62722B20000ED888F /* voip_menu_more.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F8D2722B1FA00ED888F /* voip_menu_more.png */; }; + C6710FC72722B20000ED888F /* voip_numpad_4.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F8E2722B1FB00ED888F /* voip_numpad_4.png */; }; + C6710FC82722B20000ED888F /* voip_numpad_7.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F8F2722B1FB00ED888F /* voip_numpad_7.png */; }; + C6710FC92722B20000ED888F /* voip_speaker_on.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F902722B1FB00ED888F /* voip_speaker_on.png */; }; + C6710FCA2722B20000ED888F /* voip_call_header_incoming.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F912722B1FC00ED888F /* voip_call_header_incoming.png */; }; + C6710FCB2722B20000ED888F /* voip_remote_recording.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F922722B1FC00ED888F /* voip_remote_recording.png */; }; + C6710FCC2722B20000ED888F /* voip_call_list_menu.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F932722B1FC00ED888F /* voip_call_list_menu.png */; }; + C6710FCD2722B20000ED888F /* voip_call_participants.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F942722B1FD00ED888F /* voip_call_participants.png */; }; + C6710FCE2722B20000ED888F /* voip_speaker_off.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F952722B1FD00ED888F /* voip_speaker_off.png */; }; + C6710FCF2722B20000ED888F /* voip_numpad_8.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F962722B1FD00ED888F /* voip_numpad_8.png */; }; + C6710FD02722B20000ED888F /* voip_call_header_active.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F972722B1FE00ED888F /* voip_call_header_active.png */; }; + C6710FD12722B20000ED888F /* voip_dropdown.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F982722B1FE00ED888F /* voip_dropdown.png */; }; + C6710FD22722B20000ED888F /* voip_call_record.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F992722B1FE00ED888F /* voip_call_record.png */; }; + C6710FD32722B20000ED888F /* voip_conference_paused_big.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F9A2722B1FE00ED888F /* voip_conference_paused_big.png */; }; + C6710FD42722B20000ED888F /* voip_camera_on.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F9B2722B1FF00ED888F /* voip_camera_on.png */; }; + C6710FD52722B20000ED888F /* voip_call_header_outgoing.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F9C2722B1FF00ED888F /* voip_call_header_outgoing.png */; }; + C6710FD62722B20000ED888F /* voip_conference_play_big.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F9D2722B20000ED888F /* voip_conference_play_big.png */; }; + C6710FD72722B20000ED888F /* voip_info.png in Resources */ = {isa = PBXBuildFile; fileRef = C6710F9E2722B20000ED888F /* voip_info.png */; }; + C6710FD92722BD0100ED888F /* UICallTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FD82722BD0100ED888F /* UICallTimer.swift */; }; + C6710FDC2722C3BB00ED888F /* UIVIewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FDB2722C3BB00ED888F /* UIVIewExtensions.swift */; }; + C6710FDE2722D44B00ED888F /* IncomingOuntgoingCommonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FDD2722D44A00ED888F /* IncomingOuntgoingCommonView.swift */; }; + C6710FE12722F0E400ED888F /* Avatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FE02722F0E400ED888F /* Avatar.swift */; }; + C6710FE527230B5800ED888F /* AddressExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FE427230B5800ED888F /* AddressExtensions.swift */; }; + C6710FE72723234400ED888F /* OutgoingCallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FE62723234400ED888F /* OutgoingCallView.swift */; }; + C6710FE92723DD7D00ED888F /* CallControlButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FE82723DD7D00ED888F /* CallControlButton.swift */; }; + C6710FEB2726874D00ED888F /* ButtonTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6710FEA2726874D00ED888F /* ButtonTheme.swift */; }; + C67C97B1274FB4C10074A0D8 /* VoipConferenceDisplayModeSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67C97B0274FB4C10074A0D8 /* VoipConferenceDisplayModeSelectionView.swift */; }; + C67C97B4274FC5EF0074A0D8 /* AudioRoutesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67C97B3274FC5EE0074A0D8 /* AudioRoutesView.swift */; }; + C67C97B8274FD76B0074A0D8 /* AudioRouteUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67C97B7274FD76B0074A0D8 /* AudioRouteUtils.swift */; }; + C6824FBA27219D890043D4FC /* IncomingCallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6824FB927219D890043D4FC /* IncomingCallView.swift */; }; + C683B20E2722702300D4E15C /* VoipTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = C683B20D2722702300D4E15C /* VoipTheme.swift */; }; + C683B213272276CF00D4E15C /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C683B212272276CF00D4E15C /* UIColorExtensions.swift */; }; C6A1BB3526E8815400540D50 /* menu_info.png in Resources */ = {isa = PBXBuildFile; fileRef = C6A1BB3126E8815300540D50 /* menu_info.png */; }; C6A1BB3626E8815400540D50 /* menu_forward_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6A1BB3226E8815400540D50 /* menu_forward_default.png */; }; C6A1BB3726E8815400540D50 /* menu_copy_text_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6A1BB3326E8815400540D50 /* menu_copy_text_default.png */; }; @@ -698,13 +776,46 @@ C6A1BB4126E889AD00540D50 /* forward_message_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6A1BB4026E889AD00540D50 /* forward_message_default.png */; }; C6A1BB4326E88F7C00540D50 /* menu_resend_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6A1BB4226E88F7C00540D50 /* menu_resend_default.png */; }; C6A1BB4526E890BD00540D50 /* file_voice_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6A1BB4426E890BD00540D50 /* file_voice_default.png */; }; + C6B04D61274B954500F70559 /* ParticipantsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B04D60274B954500F70559 /* ParticipantsListView.swift */; }; + C6B04D63274B95D500F70559 /* VoipParticipantCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B04D62274B95D400F70559 /* VoipParticipantCell.swift */; }; + C6B04D67274BD61300F70559 /* VoipConferenceActiveSpeakerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B04D66274BD61200F70559 /* VoipConferenceActiveSpeakerView.swift */; }; + C6B04D69274BD6A100F70559 /* VoipActiveSpeakerParticipantCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B04D68274BD6A100F70559 /* VoipActiveSpeakerParticipantCell.swift */; }; C6B4444226AAD0980076C517 /* file_video_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B4443D26AAD0970076C517 /* file_video_default.png */; }; C6B4444326AAD0980076C517 /* file_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B4443E26AAD0970076C517 /* file_default.png */; }; C6B4444426AAD0980076C517 /* file_picture_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B4443F26AAD0970076C517 /* file_picture_default.png */; }; C6B4444526AAD0980076C517 /* file_audio_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B4444026AAD0970076C517 /* file_audio_default.png */; }; C6B4444626AAD0980076C517 /* file_pdf_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B4444126AAD0970076C517 /* file_pdf_default.png */; }; C6B4444826AADA530076C517 /* SwiftUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B4444726AADA530076C517 /* SwiftUtil.swift */; }; + C6C65E89272723DC00E48FC6 /* UIVIewControllerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C65E88272723DC00E48FC6 /* UIVIewControllerExtensions.swift */; }; + C6C65E8B2727274A00E48FC6 /* NumpadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C65E8A2727274A00E48FC6 /* NumpadView.swift */; }; + C6C98CCE27438A3F00059B55 /* DismissableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CCD27438A3F00059B55 /* DismissableView.swift */; }; + C6C98CD027439A7F00059B55 /* VoipCallCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CCF27439A7F00059B55 /* VoipCallCell.swift */; }; + C6C98CD22743FD0B00059B55 /* VoipCallContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CD12743FD0B00059B55 /* VoipCallContextMenu.swift */; }; + C6C98CD527453ED900059B55 /* ConferenceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CD427453ED700059B55 /* ConferenceViewModel.swift */; }; + C6C98CD727453F9600059B55 /* ConferenceParticipantData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CD627453F9600059B55 /* ConferenceParticipantData.swift */; }; + C6C98CDB274541E400059B55 /* ConferenceParticipantDeviceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CDA274541E400059B55 /* ConferenceParticipantDeviceData.swift */; }; + C6C98CDD274547C500059B55 /* ParticipantExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CDC274547C500059B55 /* ParticipantExtensions.swift */; }; + C6C98CDF2745590500059B55 /* ConferenceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CDE2745590400059B55 /* ConferenceExtensions.swift */; }; + C6C98CE1274568F800059B55 /* VoipConferenceGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C98CE0274568F700059B55 /* VoipConferenceGridView.swift */; }; + C6D09F3D273EE467003C2173 /* BouncingCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D09F3C273EE467003C2173 /* BouncingCounter.swift */; }; + C6D09F3F274273FB003C2173 /* CallStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D09F3E274273FB003C2173 /* CallStatsView.swift */; }; + C6D09F4127428626003C2173 /* IceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D09F4027428626003C2173 /* IceState.swift */; }; + C6D09F43274288D4003C2173 /* PayloadType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D09F42274288D4003C2173 /* PayloadType.swift */; }; + C6D09F4B27438707003C2173 /* CallsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D09F4A27438706003C2173 /* CallsListView.swift */; }; + C6D1EC4A274D212B0091881C /* UICamSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = C6D1EC49274D212B0091881C /* UICamSwitch.m */; }; + C6D52B45274648E500904660 /* VoipGridParticipantCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D52B44274648E500904660 /* VoipGridParticipantCell.swift */; }; C6DA657C261C950C0020CB43 /* VFSUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA657B261C950C0020CB43 /* VFSUtil.swift */; }; + C6EA2F4827514D09008E60F8 /* voip_call_forward.png in Resources */ = {isa = PBXBuildFile; fileRef = C6EA2F4727514D08008E60F8 /* voip_call_forward.png */; }; + C6F2D4EF27392D970071BA52 /* CallsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4EE27392D960071BA52 /* CallsViewModel.swift */; }; + C6F2D4F1273935860071BA52 /* CallExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4F0273935860071BA52 /* CallExtensions.swift */; }; + C6F2D4F32739475C0071BA52 /* ActiveCallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4F22739475C0071BA52 /* ActiveCallView.swift */; }; + C6F2D4F72739861F0071BA52 /* RemotelyRecording.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4F62739861F0071BA52 /* RemotelyRecording.swift */; }; + C6F2D4F9273A4CD70071BA52 /* SharedLayoutConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4F8273A4CD60071BA52 /* SharedLayoutConstants.swift */; }; + C6F2D4FD273A85A90071BA52 /* PausedCallOrConferenceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4FC273A85A90071BA52 /* PausedCallOrConferenceView.swift */; }; + C6F2D4FF273AF01A0071BA52 /* ControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D4FE273AF01A0071BA52 /* ControlsView.swift */; }; + C6F2D501273B0EFC0071BA52 /* VoipDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D500273B0EFC0071BA52 /* VoipDialog.swift */; }; + C6F2D503273BAC030071BA52 /* ButtonWithStateBackgrounds.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D502273BAC030071BA52 /* ButtonWithStateBackgrounds.swift */; }; + C6F2D505273BB3BB0071BA52 /* UIApplication+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F2D504273BB3BB0071BA52 /* UIApplication+Extension.swift */; }; C90FAA7915AF54E6002091CB /* HistoryDetailsView.m in Sources */ = {isa = PBXBuildFile; fileRef = C90FAA7715AF54E6002091CB /* HistoryDetailsView.m */; }; CF15F21E20E4F9A3008B1DE6 /* UIImageViewDeletable.m in Sources */ = {isa = PBXBuildFile; fileRef = CF15F21C20E4F9A3008B1DE6 /* UIImageViewDeletable.m */; }; CF15F21F20E4F9A3008B1DE6 /* UIImageViewDeletable.xib in Resources */ = {isa = PBXBuildFile; fileRef = CF15F21D20E4F9A3008B1DE6 /* UIImageViewDeletable.xib */; }; @@ -721,7 +832,6 @@ CFBD7A2A20E504AE007C5286 /* delete_img.png in Resources */ = {isa = PBXBuildFile; fileRef = CFBD7A2320E504AD007C5286 /* delete_img.png */; }; D306459E1611EC2A00BB571E /* UILoadingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D306459D1611EC2900BB571E /* UILoadingImageView.m */; }; D3128FE115AABC7E00A2147A /* ContactDetailsView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3128FDF15AABC7E00A2147A /* ContactDetailsView.m */; }; - D31AAF5E159B3919002C6B02 /* CallPausedTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D31AAF5D159B3919002C6B02 /* CallPausedTableView.m */; }; D31B4B21159876C0002E6C72 /* UICompositeView.m in Sources */ = {isa = PBXBuildFile; fileRef = D31B4B1F159876C0002E6C72 /* UICompositeView.m */; }; D31C9C98158A1CDF00756B45 /* UIHistoryCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */; }; D326483815887D5200930C67 /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483715887D5200930C67 /* OrderedDictionary.m */; }; @@ -736,7 +846,6 @@ D35860D615B549B500513429 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = D35860D515B549B500513429 /* Utils.m */; }; D35E7597159460580066B1C1 /* ChatsListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D35E7595159460560066B1C1 /* ChatsListView.m */; }; D35E759F159460B70066B1C1 /* SettingsView.m in Sources */ = {isa = PBXBuildFile; fileRef = D35E759D159460B50066B1C1 /* SettingsView.m */; }; - D36FB2D51589EF7C0036F6F2 /* UIPauseButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */; }; D378AB2A15DCDB4A0098505D /* ImagePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D378AB2915DCDB490098505D /* ImagePickerView.m */; }; D37C639B15AADEF6009D0BAC /* ContactDetailsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D37C639A15AADEF5009D0BAC /* ContactDetailsTableView.m */; }; D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; }; @@ -769,10 +878,8 @@ D38187C115FE345B00C3EDCA /* DialerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187C415FE345B00C3EDCA /* DialerView.xib */; }; D38187CD15FE346700C3EDCA /* HistoryDetailsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187D015FE346700C3EDCA /* HistoryDetailsView.xib */; }; D38187D115FE346B00C3EDCA /* HistoryListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187D415FE346B00C3EDCA /* HistoryListView.xib */; }; - D38187D915FE347700C3EDCA /* CallIncomingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187DC15FE347700C3EDCA /* CallIncomingView.xib */; }; D38187DD15FE348A00C3EDCA /* AssistantView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187E015FE348A00C3EDCA /* AssistantView.xib */; }; D38187F815FE355D00C3EDCA /* TabBarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187FB15FE355D00C3EDCA /* TabBarView.xib */; }; - D381881915FE3FCA00C3EDCA /* CallView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D381881C15FE3FCA00C3EDCA /* CallView.xib */; }; D3A55FBC15877E5E003FD403 /* UIContactCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A55FBB15877E5E003FD403 /* UIContactCell.m */; }; D3A8BB7015A6C7D500F96BE5 /* UIChatBubbleTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A8BB6F15A6C7D500F96BE5 /* UIChatBubbleTextCell.m */; }; D3C6526715AC1A8F0092A874 /* UIContactDetailsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3C6526615AC1A8F0092A874 /* UIContactDetailsCell.m */; }; @@ -783,11 +890,10 @@ D3ED3E871586291E006C0DE4 /* TabBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3ED3E851586291B006C0DE4 /* TabBarView.m */; }; D3ED3EA71587334E006C0DE4 /* HistoryListTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3ED3EA51587334C006C0DE4 /* HistoryListTableView.m */; }; D3ED3EB81587392C006C0DE4 /* HistoryListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3ED3EB615873929006C0DE4 /* HistoryListView.m */; }; - D3F26BF115986B73005F9CAB /* CallIncomingView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F26BEF15986B71005F9CAB /* CallIncomingView.m */; }; D3F795D615A582810077328B /* ChatConversationView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F795D415A582800077328B /* ChatConversationView.m */; }; D3F7998115BD32370018C273 /* TPMultiLayoutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F7998015BD32370018C273 /* TPMultiLayoutViewController.m */; }; - D3F83EEC1582021700336684 /* CallView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F83EEA1582021700336684 /* CallView.m */; }; D3F83F8E15822ABE00336684 /* PhoneMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F83F8D15822ABD00336684 /* PhoneMainView.m */; }; + E42B8736B8196388DDF2771A /* Pods_msgNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B39681098B0AF5B59B3A61 /* Pods_msgNotificationService.framework */; }; EA0007A62356008F003CC6BF /* msgNotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = EA5F25D9232BD3E200475F2E /* msgNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; EA3650DB2330D2E30001148A /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5F25DB232BD3E200475F2E /* NotificationService.swift */; }; EA88A405242A6216007FEC61 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 63AADBC41B6A0FF200AA16FD /* Localizable.strings */; }; @@ -859,8 +965,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 046DEFE77AD0675DA9932C4C /* Pods-liblinphoneTesterTests.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTesterTests.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTesterTests/Pods-liblinphoneTesterTests.distributionadhoc.xcconfig"; sourceTree = ""; }; - 13B1BD646346F33BF57412F2 /* Pods-messagesNotification.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-messagesNotification.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-messagesNotification/Pods-messagesNotification.distribution.xcconfig"; sourceTree = ""; }; + 02DBDD5A09F46796AEC2485B /* Pods-msgNotificationContent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.release.xcconfig"; path = "Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.release.xcconfig"; sourceTree = ""; }; + 063D57B2E4769739DC5DA5C0 /* Pods-msgNotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.release.xcconfig"; path = "Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.release.xcconfig"; sourceTree = ""; }; + 0DF941C97B75E7BA39A90600 /* Pods-linphone.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.release.xcconfig"; path = "Target Support Files/Pods-linphone/Pods-linphone.release.xcconfig"; sourceTree = ""; }; + 1060E68152C51FCE5ACBF779 /* Pods-msgNotificationContent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.debug.xcconfig"; path = "Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.debug.xcconfig"; sourceTree = ""; }; 152F22351B15E889008C0621 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; }; 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D3623240D0F684500981E51 /* LinphoneAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneAppDelegate.h; sourceTree = ""; }; @@ -869,8 +977,6 @@ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 2214EB7812F846B1002A5394 /* UICallButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallButton.h; sourceTree = ""; }; 2214EB7912F846B1002A5394 /* UICallButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICallButton.m; sourceTree = ""; }; - 2214EB8712F84EBB002A5394 /* UIHangUpButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIHangUpButton.h; sourceTree = ""; }; - 2214EB8812F84EBB002A5394 /* UIHangUpButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIHangUpButton.m; sourceTree = ""; }; 2214EBF112F86360002A5394 /* UIMutedMicroButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIMutedMicroButton.h; sourceTree = ""; }; 2214EBF212F86360002A5394 /* UIMutedMicroButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIMutedMicroButton.m; sourceTree = ""; }; 22276E8613C73D8A00210156 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; }; @@ -888,15 +994,12 @@ 22744043106F33FC006EC466 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 22744056106F9BC9006EC466 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 228697C311AC29B800E9E0CA /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; - 22968A5D12F875C600588287 /* UISpeakerButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UISpeakerButton.h; sourceTree = ""; }; - 22968A5E12F875C600588287 /* UISpeakerButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UISpeakerButton.m; sourceTree = ""; }; - 22AA8AFF13D83F6300B30535 /* UICamSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICamSwitch.h; sourceTree = ""; }; - 22AA8B0013D83F6300B30535 /* UICamSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICamSwitch.m; sourceTree = ""; }; 22B5EFA210CE50BD00777D97 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; }; 22B5F03410CE6B2F00777D97 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; 22C7555E1317E59C007BC101 /* UIBluetoothButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIBluetoothButton.h; sourceTree = ""; }; 22C7555F1317E59C007BC101 /* UIBluetoothButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBluetoothButton.m; sourceTree = ""; }; 22D1B68012A3E0BE001AE361 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = usr/lib/libresolv.dylib; sourceTree = SDKROOT; }; + 22D3BF4C45858F6B07F4D2A4 /* Pods-linphone.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.distributionadhoc.xcconfig"; path = "Target Support Files/Pods-linphone/Pods-linphone.distributionadhoc.xcconfig"; sourceTree = ""; }; 22E0A81C111C44E100B04932 /* AboutView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutView.m; sourceTree = ""; }; 22E0A81D111C44E100B04932 /* AboutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutView.h; sourceTree = ""; }; 22F2508B107141E100AC9B3F /* DialerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialerView.h; sourceTree = ""; }; @@ -905,8 +1008,6 @@ 244523AD1E8266CC0037A187 /* chat_error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_error.png; sourceTree = ""; }; 244523AE1E8266CC0037A187 /* chat_read.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_read.png; sourceTree = ""; }; 244523BC1E8D3A6C0037A187 /* chat_unsecure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_unsecure.png; sourceTree = ""; }; - 24585CBE78DA4F005C7F9D71 /* Pods-liblinphoneTester.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTester.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTester/Pods-liblinphoneTester.distribution.xcconfig"; sourceTree = ""; }; - 248C326F4AD75E654C1CB37A /* Pods-liblinphoneTesterTests.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTesterTests.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTesterTests/Pods-liblinphoneTesterTests.distribution.xcconfig"; sourceTree = ""; }; 249660941FD6A359001D55AA /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; }; 24A3459D1D95797700881A5C /* UIShopTableCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIShopTableCell.xib; sourceTree = ""; }; 24A345A51D95798A00881A5C /* UIShopTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIShopTableCell.m; sourceTree = ""; }; @@ -927,16 +1028,14 @@ 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* linphone_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linphone_Prefix.pch; sourceTree = ""; }; - 34027665305514025971F85C /* Pods-msgNotificationContent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.release.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.release.xcconfig"; sourceTree = ""; }; 340751961506459A00B89C47 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; - 340751E5150F38FC00B89C47 /* UIVideoButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIVideoButton.h; sourceTree = ""; }; - 340751E6150F38FD00B89C47 /* UIVideoButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIVideoButton.m; sourceTree = ""; }; + 3411568BE5527EB500F75EBB /* Pods-msgNotificationService.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.distributionadhoc.xcconfig"; path = "Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.distributionadhoc.xcconfig"; sourceTree = ""; }; 34216F3E1547EBCD00EA9777 /* VideoZoomHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VideoZoomHandler.h; path = LinphoneUI/VideoZoomHandler.h; sourceTree = ""; }; 34216F3F1547EBCD00EA9777 /* VideoZoomHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VideoZoomHandler.m; path = LinphoneUI/VideoZoomHandler.m; sourceTree = ""; }; 344ABDEF14850AE9007420B6 /* libc++.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.1.dylib"; path = "usr/lib/libc++.1.dylib"; sourceTree = SDKROOT; }; 344ABDF014850AE9007420B6 /* libstdc++.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.6.dylib"; path = "usr/lib/libstdc++.6.dylib"; sourceTree = SDKROOT; }; - 38A3AE51B9E09ABF29222E5F /* Pods-liblinphoneTester.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTester.release.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTester/Pods-liblinphoneTester.release.xcconfig"; sourceTree = ""; }; - 38DF35D11A7C0F45E990C83A /* Pods-linphone.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-linphone/Pods-linphone.distribution.xcconfig"; sourceTree = ""; }; + 507103607396F28FF4427108 /* Pods-msgNotificationContent.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.distribution.xcconfig"; path = "Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.distribution.xcconfig"; sourceTree = ""; }; + 53432234870660E9876CBCA8 /* Pods-linphone.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.debug.xcconfig"; path = "Target Support Files/Pods-linphone/Pods-linphone.debug.xcconfig"; sourceTree = ""; }; 570742571D5A0691004B9C84 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ShopView.xib; sourceTree = ""; }; 5707425F1D5A09B8004B9C84 /* ShopView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShopView.m; sourceTree = ""; }; 570742601D5A09B8004B9C84 /* ShopView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShopView.h; sourceTree = ""; }; @@ -956,6 +1055,7 @@ 614C087723D1A35F00217F80 /* ProviderDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProviderDelegate.swift; sourceTree = ""; }; 614C087923D1A37400217F80 /* CallManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallManager.swift; sourceTree = ""; }; 614D09CD21E74D5400C43EDF /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 6150F32455334A0A7B3D46C8 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.distributionadhoc.xcconfig"; path = "Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.distributionadhoc.xcconfig"; sourceTree = ""; }; 61586B7A217A16EE0038AC45 /* menu_about.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_about.png; sourceTree = ""; }; 61586B82217A16FD0038AC45 /* menu_about@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_about@2x.png"; sourceTree = ""; }; 61586B84217A17070038AC45 /* menu_assistant.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_assistant.png; sourceTree = ""; }; @@ -1000,10 +1100,6 @@ 6187B1B624B3271500D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/AssistantLinkView.strings; sourceTree = ""; }; 6187B1B724B3271600D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/AssistantView.strings; sourceTree = ""; }; 6187B1B824B3271600D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/AssistantViewScreens.strings; sourceTree = ""; }; - 6187B1B924B3271700D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/CallIncomingView.strings; sourceTree = ""; }; - 6187B1BA24B3271700D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/CallOutgoingView.strings; sourceTree = ""; }; - 6187B1BB24B3271700D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/CallView.strings; sourceTree = ""; }; - 6187B1BC24B3271800D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = "hu.lproj/CallView~ipad.strings"; sourceTree = ""; }; 6187B1BD24B3271800D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/ChatConversationCreateView.strings; sourceTree = ""; }; 6187B1BE24B3271900D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/ChatConversationImdnView.strings; sourceTree = ""; }; 6187B1BF24B3271900D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/ChatConversationInfoView.strings; sourceTree = ""; }; @@ -1018,8 +1114,6 @@ 6187B1C824B3271D00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/HistoryDetailsView.strings; sourceTree = ""; }; 6187B1C924B3271D00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/HistoryListView.strings; sourceTree = ""; }; 6187B1CA24B3271E00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/ImageView.strings; sourceTree = ""; }; - 6187B1CB24B3271E00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/UICallConferenceCell.strings; sourceTree = ""; }; - 6187B1CC24B3271E00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/UICallPausedCell.strings; sourceTree = ""; }; 6187B1CD24B3271F00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/UIChatBubblePhotoCell.strings; sourceTree = ""; }; 6187B1CE24B3271F00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/UIChatBubbleTextCell.strings; sourceTree = ""; }; 6187B1CF24B3271F00D580FB /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/UIChatCell.strings; sourceTree = ""; }; @@ -1519,14 +1613,8 @@ 63423C091C4501D000D9A050 /* Contact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Contact.m; sourceTree = ""; }; 634610041B61330300548952 /* UILabel+Boldify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UILabel+Boldify.h"; sourceTree = ""; }; 634610051B61330300548952 /* UILabel+Boldify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+Boldify.m"; sourceTree = ""; }; - 6346100D1B61409800548952 /* CallOutgoingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallOutgoingView.h; sourceTree = ""; }; - 6346100E1B61409800548952 /* CallOutgoingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallOutgoingView.m; sourceTree = ""; }; - 634610111B6140A500548952 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CallOutgoingView.xib; sourceTree = ""; }; 635173F71BA082A40095EB0A /* UIChatBubblePhotoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIChatBubblePhotoCell.h; sourceTree = ""; }; 635173F81BA082A40095EB0A /* UIChatBubblePhotoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIChatBubblePhotoCell.m; sourceTree = ""; }; - 6352A5721BE0D4B800594C1C /* CallSideMenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallSideMenuView.h; sourceTree = ""; }; - 6352A5731BE0D4B800594C1C /* CallSideMenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallSideMenuView.m; sourceTree = ""; }; - 6352A5741BE0D4B800594C1C /* CallSideMenuView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CallSideMenuView.xib; sourceTree = ""; }; 635775231B6673EC00C8B704 /* HistoryDetailsTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryDetailsTableView.h; sourceTree = ""; }; 635775241B6673EC00C8B704 /* HistoryDetailsTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryDetailsTableView.m; sourceTree = ""; }; 636316D21A1DEBCB0009B839 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AboutView.xib; sourceTree = ""; }; @@ -1543,7 +1631,6 @@ 6381DA7B1C1AD5EA00DF3BBD /* UIBouncingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIBouncingView.h; sourceTree = ""; }; 6381DA7C1C1AD5EA00DF3BBD /* UIBouncingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBouncingView.m; sourceTree = ""; }; 638F1A611C2021B2004B8E02 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/DialerView~ipad.xib"; sourceTree = ""; }; - 638F1A871C2167C2004B8E02 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/CallView~ipad.xib"; sourceTree = ""; }; 638F1A901C21993D004B8E02 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/UICompositeView~ipad.xib"; sourceTree = ""; }; 639CEAFE1A1DF4D9004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/StatusBarView.xib; sourceTree = ""; }; 639CEB011A1DF4E4004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIHistoryCell.xib; sourceTree = ""; }; @@ -1552,7 +1639,6 @@ 639E9C7E1C0DB13D00019A75 /* UICheckBoxTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICheckBoxTableView.h; sourceTree = ""; }; 639E9C7F1C0DB13D00019A75 /* UICheckBoxTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICheckBoxTableView.m; sourceTree = ""; }; 639E9C941C0DB7BE00019A75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/FirstLoginView.xib; sourceTree = ""; }; - 639E9C9E1C0DB7DF00019A75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UICallPausedCell.xib; sourceTree = ""; }; 639E9CA11C0DB7E500019A75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIChatBubblePhotoCell.xib; sourceTree = ""; }; 639E9CA41C0DB7EA00019A75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIChatBubbleTextCell.xib; sourceTree = ""; }; 639E9CA71C0DB7F200019A75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIChatCreateCell.xib; sourceTree = ""; }; @@ -1586,8 +1672,6 @@ 63B8D68D1BCBE65600C12B09 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ChatConversationCreateView.xib; sourceTree = ""; }; 63B8D69F1BCBF43100C12B09 /* UIChatCreateCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIChatCreateCell.h; sourceTree = ""; }; 63B8D6A01BCBF43100C12B09 /* UIChatCreateCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIChatCreateCell.m; sourceTree = ""; }; - 63BC49E01BA2CDFC004EC273 /* UICallPausedCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallPausedCell.h; sourceTree = ""; }; - 63BC49E11BA2CDFC004EC273 /* UICallPausedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICallPausedCell.m; sourceTree = ""; }; 63BE7A761D75BDF6000990EF /* ShopTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShopTableView.h; sourceTree = ""; }; 63BE7A771D75BDF6000990EF /* ShopTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShopTableView.m; sourceTree = ""; }; 63C441C11BBC23ED0053DC5E /* UIAssistantTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIAssistantTextField.h; sourceTree = ""; }; @@ -1611,30 +1695,13 @@ 63EEE40D1BBA9B250087D3AF /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; 63F1DF421BCE618E00EDED90 /* UIAddressTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIAddressTextField.h; sourceTree = ""; }; 63F1DF431BCE618E00EDED90 /* UIAddressTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIAddressTextField.m; sourceTree = ""; }; - 63F1DF491BCE983100EDED90 /* CallConferenceTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallConferenceTableView.h; sourceTree = ""; }; - 63F1DF4A1BCE983200EDED90 /* CallConferenceTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallConferenceTableView.m; sourceTree = ""; }; - 63F1DF4C1BCE985F00EDED90 /* UICallConferenceCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallConferenceCell.h; sourceTree = ""; }; - 63F1DF4D1BCE985F00EDED90 /* UICallConferenceCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICallConferenceCell.m; sourceTree = ""; }; - 63F1DF521BCE986A00EDED90 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UICallConferenceCell.xib; sourceTree = ""; }; 63FB30331A680E73008CA393 /* UIRoundedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIRoundedImageView.h; sourceTree = ""; }; 63FB30341A680E73008CA393 /* UIRoundedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIRoundedImageView.m; sourceTree = ""; }; - 65CEDD144CABFAA70A29AF27 /* Pods_linphone.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_linphone.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 68D9EC27FCECD5DE2E19CD3C /* Pods-liblinphoneTester.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTester.debug.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTester/Pods-liblinphoneTester.debug.xcconfig"; sourceTree = ""; }; - 6E1BC45342F5201DABD7FE55 /* Pods_latestCallsWidget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_latestCallsWidget.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6F30EA7BEA39DA427CE0754E /* Pods_msgNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_msgNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 70E542F213E147E3002BA2C0 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 70E542F413E147EB002BA2C0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 7513CBF7F2BA0A9F99977C2B /* Pods_richNotifications.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_richNotifications.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 791017662FE117B9B12E8938 /* Pods-messagesNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-messagesNotification.debug.xcconfig"; path = "Pods/Target Support Files/Pods-messagesNotification/Pods-messagesNotification.debug.xcconfig"; sourceTree = ""; }; - 799BA1104845EB01ACE764D8 /* Pods-linphone.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.debug.xcconfig"; path = "Pods/Target Support Files/Pods-linphone/Pods-linphone.debug.xcconfig"; sourceTree = ""; }; - 7D8CCFE176C634813E3A2593 /* Pods-liblinphoneTesterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTesterTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTesterTests/Pods-liblinphoneTesterTests.debug.xcconfig"; sourceTree = ""; }; - 82E9DEDA2A78C6DBBD1A54DB /* Pods_msgNotificationContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_msgNotificationContent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 85FB19B6A8124D942C8471F1 /* Pods-linphoneTests.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphoneTests.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-linphoneTests/Pods-linphoneTests.distribution.xcconfig"; sourceTree = ""; }; - 8B488C393394746F9D630789 /* Pods_latestChatroomsWidget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_latestChatroomsWidget.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8B4C43A28E90775F6FCA2CEE /* Pods-msgNotificationContent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.debug.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.debug.xcconfig"; sourceTree = ""; }; + 72B39681098B0AF5B59B3A61 /* Pods_msgNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_msgNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 79B41078A602EFB886981917 /* Pods-linphone.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.distribution.xcconfig"; path = "Target Support Files/Pods-linphone/Pods-linphone.distribution.xcconfig"; sourceTree = ""; }; 8C1A1F7C1FA331D40064BE00 /* libsoci_sqlite3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsoci_sqlite3.a; path = "liblinphone-sdk/apple-darwin/lib/libsoci_sqlite3.a"; sourceTree = ""; }; - 8C1B67051E671826001EA2FE /* AudioHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioHelper.m; sourceTree = ""; }; - 8C1B67081E6718BC001EA2FE /* AudioHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioHelper.h; path = Utils/AudioHelper.h; sourceTree = ""; }; 8C23BCB71D82AAC3005F19BB /* linphone.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = linphone.entitlements; sourceTree = ""; }; 8C2595DE1DEDCC8E007A6424 /* CallKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CallKit.framework; path = System/Library/Frameworks/CallKit.framework; sourceTree = SDKROOT; }; 8C2A81931F87B7FF0012A66B /* chat_group_avatar@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chat_group_avatar@2x.png"; sourceTree = ""; }; @@ -1671,10 +1738,6 @@ 8CBD7BAD20B6B82F00E5DCC0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIChatCreateCollectionViewCell.xib; sourceTree = ""; }; 8CBD7BB120B6B86900E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/AssistantView.strings; sourceTree = ""; }; 8CBD7BB220B6B86A00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/AssistantViewScreens.strings; sourceTree = ""; }; - 8CBD7BB320B6B86B00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/CallIncomingView.strings; sourceTree = ""; }; - 8CBD7BB420B6B86B00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/CallOutgoingView.strings; sourceTree = ""; }; - 8CBD7BB520B6B86C00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/CallView.strings; sourceTree = ""; }; - 8CBD7BB620B6B86D00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = "fr.lproj/CallView~ipad.strings"; sourceTree = ""; }; 8CBD7BB720B6B86E00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/ChatConversationInfoView.strings; sourceTree = ""; }; 8CBD7BB820B6B86F00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/ChatConversationImdnView.strings; sourceTree = ""; }; 8CBD7BB920B6B87000E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/ChatConversationCreateView.strings; sourceTree = ""; }; @@ -1689,8 +1752,6 @@ 8CBD7BC220B6B87600E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/HistoryDetailsView.strings; sourceTree = ""; }; 8CBD7BC320B6B87700E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/HistoryListView.strings; sourceTree = ""; }; 8CBD7BC420B6B87800E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/ImageView.strings; sourceTree = ""; }; - 8CBD7BC520B6B87800E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UICallConferenceCell.strings; sourceTree = ""; }; - 8CBD7BC620B6B87900E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UICallPausedCell.strings; sourceTree = ""; }; 8CBD7BC720B6B87A00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UIChatBubblePhotoCell.strings; sourceTree = ""; }; 8CBD7BC820B6B87B00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UIChatBubbleTextCell.strings; sourceTree = ""; }; 8CBD7BC920B6B87B00E5DCC0 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UIChatCell.strings; sourceTree = ""; }; @@ -1728,13 +1789,14 @@ 8CF25D941F9F336100BEA0C1 /* check_unselected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = check_unselected.png; sourceTree = ""; }; 8CF25D9B1F9F76BC00BEA0C1 /* chat_group_informations.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chat_group_informations.png; sourceTree = ""; }; 8CF25D9C1F9F76BD00BEA0C1 /* chat_group_informations@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chat_group_informations@2x.png"; sourceTree = ""; }; - 8FD0D10102F0A8922703B8A4 /* Pods-msgNotificationService.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.distributionadhoc.xcconfig"; sourceTree = ""; }; - 904C1EC75CB9E03374AAA802 /* Pods-msgNotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.release.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.release.xcconfig"; sourceTree = ""; }; - 9CBD6E980619195CB7EE32AC /* Pods_liblinphoneTester.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_liblinphoneTester.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABB887316C42EE876A3051A9 /* Pods-linphoneTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphoneTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-linphoneTests/Pods-linphoneTests.debug.xcconfig"; sourceTree = ""; }; - ADCA571A7CF61077747BFE53 /* Pods-msgNotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.debug.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.debug.xcconfig"; sourceTree = ""; }; - BAD0A9494E833034EB559687 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.distributionadhoc.xcconfig"; sourceTree = ""; }; - BE06BDE664323B2A53469696 /* Pods-liblinphoneTesterTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTesterTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTesterTests/Pods-liblinphoneTesterTests.release.xcconfig"; sourceTree = ""; }; + A164BAF39B3A5B9F905917A7 /* Pods_msgNotificationContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_msgNotificationContent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B464E44A606CB50A65A96FE2 /* Pods_linphone.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_linphone.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B9F41097CE0124A05554DB9C /* Pods-msgNotificationService.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.distribution.xcconfig"; path = "Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.distribution.xcconfig"; sourceTree = ""; }; + C589627B9D9D2A4F9C816051 /* Pods-msgNotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.debug.xcconfig"; path = "Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.debug.xcconfig"; sourceTree = ""; }; + C60B66672721AFFA0026AC7D /* CallStatisticsData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallStatisticsData.swift; sourceTree = ""; }; + C60D265527299C94006238BB /* ControlsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControlsViewModel.swift; sourceTree = ""; }; + C60D265727299F6F006238BB /* CoreExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreExtensions.swift; sourceTree = ""; }; + C60D265B272AA0BD006238BB /* UIImageExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageExtensions.swift; sourceTree = ""; }; C61B1BF12667D075001A4E4A /* menu_security_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_security_default.png; sourceTree = ""; }; C61B1BF32667D202001A4E4A /* more_menu_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = more_menu_default.png; sourceTree = ""; }; C61B1BF62667EC6B001A4E4A /* ephemeral_messages_color_A.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ephemeral_messages_color_A.png; sourceTree = ""; }; @@ -1744,15 +1806,106 @@ C622E3EC26A8128F004F5434 /* vr_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = vr_off.png; sourceTree = ""; }; C622E3ED26A8128F004F5434 /* vr_pause.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = vr_pause.png; sourceTree = ""; }; C622E3EE26A81290004F5434 /* vr_play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = vr_play.png; sourceTree = ""; }; + C6277DA6274BF1CD00406FB9 /* voip_radio_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_radio_on.png; sourceTree = ""; }; + C6277DA7274BF1CD00406FB9 /* voip_radio_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_radio_off.png; sourceTree = ""; }; + C6278496273C21E1002FAA29 /* LocalVideoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalVideoView.swift; sourceTree = ""; }; C64A854C2667B66900252AD2 /* EphemeralSettingsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EphemeralSettingsView.h; sourceTree = ""; }; C64A854D2667B67200252AD2 /* EphemeralSettingsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EphemeralSettingsView.m; sourceTree = ""; }; C64A854F2667B67A00252AD2 /* EphemeralSettingsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EphemeralSettingsView.xib; sourceTree = ""; }; C64A85512667B74100252AD2 /* ephemeral_messages_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ephemeral_messages_default.png; sourceTree = ""; }; + C6586148273E595700A0DBFC /* VoipExtraButtonsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipExtraButtonsView.swift; sourceTree = ""; }; + C658614B273E5B5E00A0DBFC /* VoipExtraButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipExtraButton.swift; sourceTree = ""; }; + C65A5D2F27216B86005BA038 /* ActiveCallOrConferenceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveCallOrConferenceView.swift; sourceTree = ""; }; + C65A5D3727216CC0005BA038 /* MutableLiveData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MutableLiveData.swift; sourceTree = ""; }; + C65A5D3E27216E3A005BA038 /* CallData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallData.swift; sourceTree = ""; }; + C65A5D44272196AE005BA038 /* OptionalExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionalExtensions.swift; sourceTree = ""; }; C66B03BC26E8EB1A009B5EDC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIChatReplyBubbleView.xib; sourceTree = ""; }; C66B03C126E8EB82009B5EDC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/UIChatReplyBubbleView.strings; sourceTree = ""; }; C66B03C326E8EB87009B5EDC /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UIChatReplyBubbleView.strings; sourceTree = ""; }; C66B040926EFDA54009B5EDC /* reply_cancel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = reply_cancel.png; sourceTree = ""; }; C66B040D26F095CE009B5EDC /* cancel_forward.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cancel_forward.png; sourceTree = ""; }; + C6710F4E2722903200ED888F /* RotatingSpinner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RotatingSpinner.swift; sourceTree = ""; }; + C6710F502722932600ED888F /* UIImageViewExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImageViewExtensions.swift; sourceTree = ""; }; + C6710F52272297C400ED888F /* VoipTexts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipTexts.swift; sourceTree = ""; }; + C6710F5427229D5900ED888F /* LightDarkColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightDarkColor.swift; sourceTree = ""; }; + C6710F5627229DEE00ED888F /* TextStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextStyle.swift; sourceTree = ""; }; + C6710F582722A9B800ED888F /* StyledLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StyledLabel.swift; sourceTree = ""; }; + C6710F5B2722AAED00ED888F /* UIDeviceExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIDeviceExtensions.swift; sourceTree = ""; }; + C6710F5E2722AECB00ED888F /* Roboto-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Italic.ttf"; sourceTree = ""; }; + C6710F5F2722AECB00ED888F /* Roboto-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Bold.ttf"; sourceTree = ""; }; + C6710F602722AECB00ED888F /* Roboto-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Regular.ttf"; sourceTree = ""; }; + C6710F642722B13000ED888F /* voip_spinner.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_spinner.png; sourceTree = ""; }; + C6710F662722B1EF00ED888F /* voip_numpad_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_1.png; sourceTree = ""; }; + C6710F672722B1EF00ED888F /* voip_numpad_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_0.png; sourceTree = ""; }; + C6710F682722B1EF00ED888F /* voip_copy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_copy.png; sourceTree = ""; }; + C6710F692722B1EF00ED888F /* voip_merge_calls.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_merge_calls.png; sourceTree = ""; }; + C6710F6A2722B1EF00ED888F /* voip_call_numpad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_numpad.png; sourceTree = ""; }; + C6710F6B2722B1F000ED888F /* voip_single_contact_avatar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_single_contact_avatar.png; sourceTree = ""; }; + C6710F6C2722B1F000ED888F /* voip_mandatory.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_mandatory.png; sourceTree = ""; }; + C6710F6D2722B1F000ED888F /* voip_bluetooth.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_bluetooth.png; sourceTree = ""; }; + C6710F6E2722B1F000ED888F /* voip_call_more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_more.png; sourceTree = ""; }; + C6710F6F2722B1F100ED888F /* voip_multiple_contacts_avatar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_multiple_contacts_avatar.png; sourceTree = ""; }; + C6710F702722B1F100ED888F /* voip_call_stats.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_stats.png; sourceTree = ""; }; + C6710F712722B1F100ED888F /* voip_conference_active_speaker.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_conference_active_speaker.png; sourceTree = ""; }; + C6710F722722B1F200ED888F /* voip_edit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_edit.png; sourceTree = ""; }; + C6710F732722B1F200ED888F /* voip_call_chat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_chat.png; sourceTree = ""; }; + C6710F742722B1F200ED888F /* voip_numpad_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_5.png; sourceTree = ""; }; + C6710F752722B1F300ED888F /* voip_hangup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_hangup.png; sourceTree = ""; }; + C6710F762722B1F300ED888F /* voip_conference_new.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_conference_new.png; sourceTree = ""; }; + C6710F772722B1F300ED888F /* voip_chat_rooms_list.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_chat_rooms_list.png; sourceTree = ""; }; + C6710F782722B1F300ED888F /* voip_micro_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_micro_on.png; sourceTree = ""; }; + C6710F792722B1F400ED888F /* voip_calls_list.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_calls_list.png; sourceTree = ""; }; + C6710F7A2722B1F400ED888F /* voip_pause.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_pause.png; sourceTree = ""; }; + C6710F7B2722B1F500ED888F /* voip_conference_mosaic.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_conference_mosaic.png; sourceTree = ""; }; + C6710F7C2722B1F500ED888F /* voip_delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_delete.png; sourceTree = ""; }; + C6710F7D2722B1F500ED888F /* voip_audio_routes.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_audio_routes.png; sourceTree = ""; }; + C6710F7E2722B1F600ED888F /* voip_numpad_6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_6.png; sourceTree = ""; }; + C6710F7F2722B1F600ED888F /* voip_numpad_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_3.png; sourceTree = ""; }; + C6710F802722B1F600ED888F /* voip_call_add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_add.png; sourceTree = ""; }; + C6710F812722B1F700ED888F /* voip_numpad_9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_9.png; sourceTree = ""; }; + C6710F822722B1F700ED888F /* voip_call.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call.png; sourceTree = ""; }; + C6710F832722B1F700ED888F /* voip_change_camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_change_camera.png; sourceTree = ""; }; + C6710F842722B1F800ED888F /* voip_call_header_paused.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_header_paused.png; sourceTree = ""; }; + C6710F852722B1F800ED888F /* voip_export.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_export.png; sourceTree = ""; }; + C6710F862722B1F800ED888F /* voip_earpiece.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_earpiece.png; sourceTree = ""; }; + C6710F872722B1F800ED888F /* voip_numpad_hash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_hash.png; sourceTree = ""; }; + C6710F882722B1F900ED888F /* voip_micro_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_micro_off.png; sourceTree = ""; }; + C6710F892722B1F900ED888F /* voip_numpad_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_2.png; sourceTree = ""; }; + C6710F8A2722B1F900ED888F /* voip_cancel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_cancel.png; sourceTree = ""; }; + C6710F8B2722B1FA00ED888F /* voip_numpad_star.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_star.png; sourceTree = ""; }; + C6710F8C2722B1FA00ED888F /* voip_camera_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_camera_off.png; sourceTree = ""; }; + C6710F8D2722B1FA00ED888F /* voip_menu_more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_menu_more.png; sourceTree = ""; }; + C6710F8E2722B1FB00ED888F /* voip_numpad_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_4.png; sourceTree = ""; }; + C6710F8F2722B1FB00ED888F /* voip_numpad_7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_7.png; sourceTree = ""; }; + C6710F902722B1FB00ED888F /* voip_speaker_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_speaker_on.png; sourceTree = ""; }; + C6710F912722B1FC00ED888F /* voip_call_header_incoming.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_header_incoming.png; sourceTree = ""; }; + C6710F922722B1FC00ED888F /* voip_remote_recording.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_remote_recording.png; sourceTree = ""; }; + C6710F932722B1FC00ED888F /* voip_call_list_menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_list_menu.png; sourceTree = ""; }; + C6710F942722B1FD00ED888F /* voip_call_participants.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_participants.png; sourceTree = ""; }; + C6710F952722B1FD00ED888F /* voip_speaker_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_speaker_off.png; sourceTree = ""; }; + C6710F962722B1FD00ED888F /* voip_numpad_8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_numpad_8.png; sourceTree = ""; }; + C6710F972722B1FE00ED888F /* voip_call_header_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_header_active.png; sourceTree = ""; }; + C6710F982722B1FE00ED888F /* voip_dropdown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_dropdown.png; sourceTree = ""; }; + C6710F992722B1FE00ED888F /* voip_call_record.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_record.png; sourceTree = ""; }; + C6710F9A2722B1FE00ED888F /* voip_conference_paused_big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_conference_paused_big.png; sourceTree = ""; }; + C6710F9B2722B1FF00ED888F /* voip_camera_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_camera_on.png; sourceTree = ""; }; + C6710F9C2722B1FF00ED888F /* voip_call_header_outgoing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_header_outgoing.png; sourceTree = ""; }; + C6710F9D2722B20000ED888F /* voip_conference_play_big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_conference_play_big.png; sourceTree = ""; }; + C6710F9E2722B20000ED888F /* voip_info.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_info.png; sourceTree = ""; }; + C6710FD82722BD0100ED888F /* UICallTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UICallTimer.swift; sourceTree = ""; }; + C6710FDB2722C3BB00ED888F /* UIVIewExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIVIewExtensions.swift; sourceTree = ""; }; + C6710FDD2722D44A00ED888F /* IncomingOuntgoingCommonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IncomingOuntgoingCommonView.swift; sourceTree = ""; }; + C6710FE02722F0E400ED888F /* Avatar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Avatar.swift; sourceTree = ""; }; + C6710FE427230B5800ED888F /* AddressExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressExtensions.swift; sourceTree = ""; }; + C6710FE62723234400ED888F /* OutgoingCallView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OutgoingCallView.swift; sourceTree = ""; }; + C6710FE82723DD7D00ED888F /* CallControlButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallControlButton.swift; sourceTree = ""; }; + C6710FEA2726874D00ED888F /* ButtonTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonTheme.swift; sourceTree = ""; }; + C67C97B0274FB4C10074A0D8 /* VoipConferenceDisplayModeSelectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipConferenceDisplayModeSelectionView.swift; sourceTree = ""; }; + C67C97B3274FC5EE0074A0D8 /* AudioRoutesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioRoutesView.swift; sourceTree = ""; }; + C67C97B7274FD76B0074A0D8 /* AudioRouteUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioRouteUtils.swift; sourceTree = ""; }; + C6824FB927219D890043D4FC /* IncomingCallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncomingCallView.swift; sourceTree = ""; }; + C683B20D2722702300D4E15C /* VoipTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoipTheme.swift; sourceTree = ""; }; + C683B212272276CF00D4E15C /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = ""; }; C6A1BB3126E8815300540D50 /* menu_info.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_info.png; sourceTree = ""; }; C6A1BB3226E8815400540D50 /* menu_forward_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_forward_default.png; sourceTree = ""; }; C6A1BB3326E8815400540D50 /* menu_copy_text_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_copy_text_default.png; sourceTree = ""; }; @@ -1763,18 +1916,50 @@ C6A1BB4026E889AD00540D50 /* forward_message_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = forward_message_default.png; sourceTree = ""; }; C6A1BB4226E88F7C00540D50 /* menu_resend_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_resend_default.png; sourceTree = ""; }; C6A1BB4426E890BD00540D50 /* file_voice_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_voice_default.png; sourceTree = ""; }; + C6B04D60274B954500F70559 /* ParticipantsListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParticipantsListView.swift; sourceTree = ""; }; + C6B04D62274B95D400F70559 /* VoipParticipantCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipParticipantCell.swift; sourceTree = ""; }; + C6B04D66274BD61200F70559 /* VoipConferenceActiveSpeakerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipConferenceActiveSpeakerView.swift; sourceTree = ""; }; + C6B04D68274BD6A100F70559 /* VoipActiveSpeakerParticipantCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipActiveSpeakerParticipantCell.swift; sourceTree = ""; }; C6B4443D26AAD0970076C517 /* file_video_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_video_default.png; sourceTree = ""; }; C6B4443E26AAD0970076C517 /* file_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_default.png; sourceTree = ""; }; C6B4443F26AAD0970076C517 /* file_picture_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_picture_default.png; sourceTree = ""; }; C6B4444026AAD0970076C517 /* file_audio_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_audio_default.png; sourceTree = ""; }; C6B4444126AAD0970076C517 /* file_pdf_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_pdf_default.png; sourceTree = ""; }; C6B4444726AADA530076C517 /* SwiftUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUtil.swift; sourceTree = ""; }; + C6C65E88272723DC00E48FC6 /* UIVIewControllerExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIVIewControllerExtensions.swift; sourceTree = ""; }; + C6C65E8A2727274A00E48FC6 /* NumpadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumpadView.swift; sourceTree = ""; }; + C6C98CCD27438A3F00059B55 /* DismissableView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DismissableView.swift; sourceTree = ""; }; + C6C98CCF27439A7F00059B55 /* VoipCallCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipCallCell.swift; sourceTree = ""; }; + C6C98CD12743FD0B00059B55 /* VoipCallContextMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipCallContextMenu.swift; sourceTree = ""; }; + C6C98CD427453ED700059B55 /* ConferenceViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConferenceViewModel.swift; sourceTree = ""; }; + C6C98CD627453F9600059B55 /* ConferenceParticipantData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConferenceParticipantData.swift; sourceTree = ""; }; + C6C98CDA274541E400059B55 /* ConferenceParticipantDeviceData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConferenceParticipantDeviceData.swift; sourceTree = ""; }; + C6C98CDC274547C500059B55 /* ParticipantExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParticipantExtensions.swift; sourceTree = ""; }; + C6C98CDE2745590400059B55 /* ConferenceExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConferenceExtensions.swift; sourceTree = ""; }; + C6C98CE0274568F700059B55 /* VoipConferenceGridView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipConferenceGridView.swift; sourceTree = ""; }; + C6D09F3C273EE467003C2173 /* BouncingCounter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BouncingCounter.swift; sourceTree = ""; }; + C6D09F3E274273FB003C2173 /* CallStatsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallStatsView.swift; sourceTree = ""; }; + C6D09F4027428626003C2173 /* IceState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IceState.swift; sourceTree = ""; }; + C6D09F42274288D4003C2173 /* PayloadType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PayloadType.swift; sourceTree = ""; }; + C6D09F4A27438706003C2173 /* CallsListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallsListView.swift; sourceTree = ""; }; + C6D1EC48274D212A0091881C /* UICamSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICamSwitch.h; sourceTree = ""; }; + C6D1EC49274D212B0091881C /* UICamSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICamSwitch.m; sourceTree = ""; }; + C6D52B44274648E500904660 /* VoipGridParticipantCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VoipGridParticipantCell.swift; sourceTree = ""; }; C6DA657B261C950C0020CB43 /* VFSUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VFSUtil.swift; sourceTree = ""; }; + C6EA2F4727514D08008E60F8 /* voip_call_forward.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_call_forward.png; sourceTree = ""; }; + C6F2D4EE27392D960071BA52 /* CallsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallsViewModel.swift; sourceTree = ""; }; + C6F2D4F0273935860071BA52 /* CallExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallExtensions.swift; sourceTree = ""; }; + C6F2D4F22739475C0071BA52 /* ActiveCallView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActiveCallView.swift; sourceTree = ""; }; + C6F2D4F62739861F0071BA52 /* RemotelyRecording.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemotelyRecording.swift; sourceTree = ""; }; + C6F2D4F8273A4CD60071BA52 /* SharedLayoutConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedLayoutConstants.swift; sourceTree = ""; }; + C6F2D4FC273A85A90071BA52 /* PausedCallOrConferenceView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PausedCallOrConferenceView.swift; sourceTree = ""; }; + C6F2D4FE273AF01A0071BA52 /* ControlsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlsView.swift; sourceTree = ""; }; + C6F2D500273B0EFC0071BA52 /* VoipDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoipDialog.swift; sourceTree = ""; }; + C6F2D502273BAC030071BA52 /* ButtonWithStateBackgrounds.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonWithStateBackgrounds.swift; sourceTree = ""; }; + C6F2D504273BB3BB0071BA52 /* UIApplication+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIApplication+Extension.swift"; sourceTree = ""; }; C90FAA7615AF54E6002091CB /* HistoryDetailsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryDetailsView.h; sourceTree = ""; }; C90FAA7715AF54E6002091CB /* HistoryDetailsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryDetailsView.m; sourceTree = ""; }; C9B3A6FD15B485DB006F52EE /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Utils/Utils.h; sourceTree = ""; }; - CC6F924A8B1B1698914A3BB2 /* Pods-messagesNotification.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-messagesNotification.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-messagesNotification/Pods-messagesNotification.distributionadhoc.xcconfig"; sourceTree = ""; }; - CE119C214B6B8B2740622BBD /* Pods-linphoneTests.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphoneTests.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-linphoneTests/Pods-linphoneTests.distributionadhoc.xcconfig"; sourceTree = ""; }; CF15F21B20E4F9A3008B1DE6 /* UIImageViewDeletable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageViewDeletable.h; sourceTree = ""; }; CF15F21C20E4F9A3008B1DE6 /* UIImageViewDeletable.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UIImageViewDeletable.m; sourceTree = ""; }; CF15F21D20E4F9A3008B1DE6 /* UIImageViewDeletable.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UIImageViewDeletable.xib; sourceTree = ""; }; @@ -1793,13 +1978,10 @@ CF7602F3210898C600749F76 /* rec_off_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = rec_off_default.png; sourceTree = ""; }; CF7602F4210898C800749F76 /* rec_on_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = rec_on_default.png; sourceTree = ""; }; CFBD7A2320E504AD007C5286 /* delete_img.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = delete_img.png; sourceTree = ""; }; - D252FEC7DD06DD5695A320A1 /* Pods_liblinphoneTesterTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_liblinphoneTesterTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D306459C1611EC2900BB571E /* UILoadingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UILoadingImageView.h; sourceTree = ""; }; D306459D1611EC2900BB571E /* UILoadingImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UILoadingImageView.m; sourceTree = ""; }; D3128FDE15AABC7E00A2147A /* ContactDetailsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsView.h; sourceTree = ""; }; D3128FDF15AABC7E00A2147A /* ContactDetailsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsView.m; sourceTree = ""; }; - D31AAF5C159B3919002C6B02 /* CallPausedTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallPausedTableView.h; sourceTree = ""; }; - D31AAF5D159B3919002C6B02 /* CallPausedTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallPausedTableView.m; sourceTree = ""; }; D31B4B1E159876C0002E6C72 /* UICompositeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICompositeView.h; sourceTree = ""; }; D31B4B1F159876C0002E6C72 /* UICompositeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICompositeView.m; sourceTree = ""; }; D31C9C96158A1CDE00756B45 /* UIHistoryCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIHistoryCell.h; sourceTree = ""; }; @@ -1827,8 +2009,6 @@ D35E7595159460560066B1C1 /* ChatsListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatsListView.m; sourceTree = ""; }; D35E759C159460B50066B1C1 /* SettingsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsView.h; sourceTree = ""; }; D35E759D159460B50066B1C1 /* SettingsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsView.m; sourceTree = ""; }; - D36FB2D31589EF7C0036F6F2 /* UIPauseButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPauseButton.h; sourceTree = ""; }; - D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPauseButton.m; sourceTree = ""; }; D378AB2815DCDB480098505D /* ImagePickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImagePickerView.h; sourceTree = ""; }; D378AB2915DCDB490098505D /* ImagePickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImagePickerView.m; sourceTree = ""; }; D37C639915AADEF4009D0BAC /* ContactDetailsTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsTableView.h; sourceTree = ""; }; @@ -1895,17 +2075,12 @@ D3ED3EA51587334C006C0DE4 /* HistoryListTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = HistoryListTableView.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D3ED3EB515873928006C0DE4 /* HistoryListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryListView.h; sourceTree = ""; }; D3ED3EB615873929006C0DE4 /* HistoryListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = HistoryListView.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - D3F26BEE15986B71005F9CAB /* CallIncomingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallIncomingView.h; sourceTree = ""; }; - D3F26BEF15986B71005F9CAB /* CallIncomingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallIncomingView.m; sourceTree = ""; }; D3F795D315A582800077328B /* ChatConversationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatConversationView.h; sourceTree = ""; }; D3F795D415A582800077328B /* ChatConversationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatConversationView.m; sourceTree = ""; }; D3F7997F15BD32370018C273 /* TPMultiLayoutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TPMultiLayoutViewController.h; path = Utils/TPMultiLayoutViewController/TPMultiLayoutViewController.h; sourceTree = ""; }; D3F7998015BD32370018C273 /* TPMultiLayoutViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TPMultiLayoutViewController.m; path = Utils/TPMultiLayoutViewController/TPMultiLayoutViewController.m; sourceTree = ""; }; - D3F83EE91582021700336684 /* CallView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallView.h; sourceTree = ""; }; - D3F83EEA1582021700336684 /* CallView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallView.m; sourceTree = ""; }; D3F83F8C158229C500336684 /* PhoneMainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhoneMainView.h; sourceTree = ""; }; D3F83F8D15822ABD00336684 /* PhoneMainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhoneMainView.m; sourceTree = ""; }; - E40C9A7D22675584396C0A3D /* Pods-msgNotificationContent.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationContent.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationContent/Pods-msgNotificationContent.distribution.xcconfig"; sourceTree = ""; }; EA5F25D9232BD3E200475F2E /* msgNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = msgNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; EA5F25DB232BD3E200475F2E /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; EA5F25DD232BD3E200475F2E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1916,7 +2091,6 @@ EA8CB83F239FD41400C330CC /* msgNotificationContent.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = msgNotificationContent.entitlements; sourceTree = ""; }; EAB783CF232F8E4D0076B1A0 /* msgNotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = msgNotificationService.entitlements; sourceTree = ""; }; EAE6C88323FABF690076A018 /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = msgNotification/Utils.swift; sourceTree = SOURCE_ROOT; }; - EE807919DDB0B4B46AD1D439 /* Pods-messagesNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-messagesNotification.release.xcconfig"; path = "Pods/Target Support Files/Pods-messagesNotification/Pods-messagesNotification.release.xcconfig"; sourceTree = ""; }; F0181B6B18BF7B1200A9A357 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; F03A9B9418C0DAE100C4D7FE /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; }; F03A9B9718C0DB6F00C4D7FE /* libc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.dylib"; path = "usr/lib/libc++.dylib"; sourceTree = SDKROOT; }; @@ -1935,8 +2109,6 @@ F09548201883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/HistoryDetailsView.xib; sourceTree = ""; }; F09548211883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/HistoryListView.xib; sourceTree = ""; }; F09548221883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ImageView.xib; sourceTree = ""; }; - F09548231883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CallView.xib; sourceTree = ""; }; - F09548241883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CallIncomingView.xib; sourceTree = ""; }; F095482C1883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TabBarView.xib; sourceTree = ""; }; F095482E1883F15500E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AssistantView.xib; sourceTree = ""; }; F09548301883F15500E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AssistantViewScreens.xib; sourceTree = ""; }; @@ -1947,8 +2119,6 @@ F095483C1883F2E300E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/DialerView.strings; sourceTree = ""; }; F09548421883F51B00E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/HistoryListView.strings; sourceTree = ""; }; F09548441883F52900E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/ImageView.strings; sourceTree = ""; }; - F09548461883F54200E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/CallView.strings; sourceTree = ""; }; - F09548481883F55800E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/CallIncomingView.strings; sourceTree = ""; }; F09548561883F61600E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/TabBarView.strings; sourceTree = ""; }; F095485A1883F67B00E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AssistantView.strings; sourceTree = ""; }; F095485E1883F6EA00E8A69B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AssistantViewScreens.strings; sourceTree = ""; }; @@ -1960,8 +2130,6 @@ F0AF06F91A24BA760086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/HistoryDetailsView.strings; sourceTree = ""; }; F0AF06FA1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/HistoryListView.strings; sourceTree = ""; }; F0AF06FB1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/ImageView.strings; sourceTree = ""; }; - F0AF06FC1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/CallView.strings; sourceTree = ""; }; - F0AF06FD1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/CallIncomingView.strings; sourceTree = ""; }; F0AF07021A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UIChatCell.strings; sourceTree = ""; }; F0AF07041A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UICompositeView.strings; sourceTree = ""; }; F0AF07061A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UIContactCell.strings; sourceTree = ""; }; @@ -1977,12 +2145,6 @@ F0BB8C34193624C800974404 /* libresolv.9.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.9.dylib; path = usr/lib/libresolv.9.dylib; sourceTree = SDKROOT; }; F0BB8C4A193631B300974404 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; F0FF66AA1ACAEEB0008A4486 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = ../../../../Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - F325590DD6CD7F6CC8F60C03 /* Pods_linphoneTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_linphoneTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F4BE1A2318FC69D799C34F0A /* Pods-msgNotificationService.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-msgNotificationService.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-msgNotificationService/Pods-msgNotificationService.distribution.xcconfig"; sourceTree = ""; }; - F6373F9231918DECD2B3004D /* Pods-linphoneTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphoneTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-linphoneTests/Pods-linphoneTests.release.xcconfig"; sourceTree = ""; }; - FD22CA9E3EFBFEFFF1B80BA2 /* Pods-liblinphoneTester.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-liblinphoneTester.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-liblinphoneTester/Pods-liblinphoneTester.distributionadhoc.xcconfig"; sourceTree = ""; }; - FE7D89A821FDC1BCA9BB9F8F /* Pods-linphone.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-linphone/Pods-linphone.distributionadhoc.xcconfig"; sourceTree = ""; }; - FEAFB5AD0E3AA409BBD1136E /* Pods-linphone.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-linphone.release.xcconfig"; path = "Pods/Target Support Files/Pods-linphone/Pods-linphone.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1992,7 +2154,7 @@ files = ( EA88F3AC241BD05200E66528 /* UserNotificationsUI.framework in Frameworks */, EA88F3AB241BD05200E66528 /* UserNotifications.framework in Frameworks */, - 369CCF81C921CD7C4E49A637 /* Pods_msgNotificationContent.framework in Frameworks */, + 017AC1D70F142AE8EAC13BDB /* Pods_msgNotificationContent.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2002,7 +2164,6 @@ files = ( 61DD7E1F2372E88F001BDD01 /* CoreLocation.framework in Frameworks */, 6180D6FE21EE41A800AD9CB6 /* QuickLook.framework in Frameworks */, - 61AEBEA321906AFC00F35E7F /* BuildFile in Frameworks */, D37DC7181594AF3400B2A5EB /* MessageUI.framework in Frameworks */, 61F1997520C6B1D5006B069A /* AVKit.framework in Frameworks */, 249660951FD6A35F001D55AA /* Photos.framework in Frameworks */, @@ -2034,7 +2195,7 @@ F05BAA621A5D594E00411815 /* libz.dylib in Frameworks */, 344ABDF114850AE9007420B6 /* libc++.1.dylib in Frameworks */, 22D1B68112A3E0BE001AE361 /* libresolv.dylib in Frameworks */, - A634ABAFCB39B6AAE4CA991D /* Pods_linphone.framework in Frameworks */, + 9C0B30F54D61774AFD1473CE /* Pods_linphone.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2042,7 +2203,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 93566413F75DA69D2811A716 /* Pods_msgNotificationService.framework in Frameworks */, + E42B8736B8196388DDF2771A /* Pods_msgNotificationService.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2059,6 +2220,8 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( + C65A5D41272184CE005BA038 /* SwiftUtil */, + C65A5D2D2721683B005BA038 /* Voip */, 22E0A81D111C44E100B04932 /* AboutView.h */, 22E0A81C111C44E100B04932 /* AboutView.m */, 636316D31A1DEBCB0009B839 /* AboutView.xib */, @@ -2069,23 +2232,6 @@ D350F20C15A43BB100149E54 /* AssistantView.m */, D38187E015FE348A00C3EDCA /* AssistantView.xib */, D3D5126A160B3A8E00946DF8 /* AssistantViewScreens.xib */, - 63F1DF491BCE983100EDED90 /* CallConferenceTableView.h */, - 63F1DF4A1BCE983200EDED90 /* CallConferenceTableView.m */, - D3F26BEE15986B71005F9CAB /* CallIncomingView.h */, - D3F26BEF15986B71005F9CAB /* CallIncomingView.m */, - D38187DC15FE347700C3EDCA /* CallIncomingView.xib */, - 6346100D1B61409800548952 /* CallOutgoingView.h */, - 6346100E1B61409800548952 /* CallOutgoingView.m */, - 634610101B6140A500548952 /* CallOutgoingView.xib */, - D31AAF5C159B3919002C6B02 /* CallPausedTableView.h */, - D31AAF5D159B3919002C6B02 /* CallPausedTableView.m */, - 6352A5721BE0D4B800594C1C /* CallSideMenuView.h */, - 6352A5731BE0D4B800594C1C /* CallSideMenuView.m */, - 6352A5741BE0D4B800594C1C /* CallSideMenuView.xib */, - D3F83EE91582021700336684 /* CallView.h */, - D3F83EEA1582021700336684 /* CallView.m */, - D381881C15FE3FCA00C3EDCA /* CallView.xib */, - 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */, 8C9C5E0B1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.h */, 8C9C5E0C1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m */, 6341807A1BBC103100F71761 /* ChatConversationCreateTableView.h */, @@ -2217,6 +2363,8 @@ 2214EB7012F84668002A5394 /* LinphoneUI */ = { isa = PBXGroup; children = ( + C6D1EC48274D212A0091881C /* UICamSwitch.h */, + C6D1EC49274D212B0091881C /* UICamSwitch.m */, C6A1BB3B26E882D000540D50 /* UIChatReplyBubbleView.h */, C6A1BB3C26E882D000540D50 /* UIChatReplyBubbleView.m */, C66B03BD26E8EB1A009B5EDC /* UIChatReplyBubbleView.xib */, @@ -2234,14 +2382,6 @@ 6381DA7C1C1AD5EA00DF3BBD /* UIBouncingView.m */, 2214EB7812F846B1002A5394 /* UICallButton.h */, 2214EB7912F846B1002A5394 /* UICallButton.m */, - 63F1DF4C1BCE985F00EDED90 /* UICallConferenceCell.h */, - 63F1DF4D1BCE985F00EDED90 /* UICallConferenceCell.m */, - 63F1DF531BCE986A00EDED90 /* UICallConferenceCell.xib */, - 63BC49E01BA2CDFC004EC273 /* UICallPausedCell.h */, - 63BC49E11BA2CDFC004EC273 /* UICallPausedCell.m */, - 639E9C9F1C0DB7DF00019A75 /* UICallPausedCell.xib */, - 22AA8AFF13D83F6300B30535 /* UICamSwitch.h */, - 22AA8B0013D83F6300B30535 /* UICamSwitch.m */, 635173F71BA082A40095EB0A /* UIChatBubblePhotoCell.h */, 635173F81BA082A40095EB0A /* UIChatBubblePhotoCell.m */, 639E9CA21C0DB7E500019A75 /* UIChatBubblePhotoCell.xib */, @@ -2288,8 +2428,6 @@ 61CCC3D721933B380060EDEA /* UIDeviceCell.h */, 61CCC3DE21933B580060EDEA /* UIDeviceCell.m */, 61CCC3E021933B660060EDEA /* UIDeviceCell.xib */, - 2214EB8712F84EBB002A5394 /* UIHangUpButton.h */, - 2214EB8812F84EBB002A5394 /* UIHangUpButton.m */, D31C9C96158A1CDE00756B45 /* UIHistoryCell.h */, D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */, 639CEB021A1DF4E4004DE38F /* UIHistoryCell.xib */, @@ -2311,8 +2449,6 @@ D306459D1611EC2900BB571E /* UILoadingImageView.m */, 2214EBF112F86360002A5394 /* UIMutedMicroButton.h */, 2214EBF212F86360002A5394 /* UIMutedMicroButton.m */, - D36FB2D31589EF7C0036F6F2 /* UIPauseButton.h */, - D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */, CF7602E42108759A00749F76 /* UIRecordingCell.h */, CF7602E52108759A00749F76 /* UIRecordingCell.m */, CF7602E62108759A00749F76 /* UIRecordingCell.xib */, @@ -2323,23 +2459,19 @@ 8C5D1B991D9BC48100DC6539 /* UIShopTableCell.h */, 8C5D1B9B1D9BC48100DC6539 /* UIShopTableCell.xib */, 24A345A71D95799900881A5C /* UIShopTableCell.h */, - 22968A5D12F875C600588287 /* UISpeakerButton.h */, - 22968A5E12F875C600588287 /* UISpeakerButton.m */, 630CF5551AF7CE1500539F7A /* UITextField+DoneButton.h */, 630CF5561AF7CE1500539F7A /* UITextField+DoneButton.m */, F03CA84118C72F1A0008889D /* UITextViewNoDefine.h */, F03CA84218C72F1A0008889D /* UITextViewNoDefine.m */, D32648421588F6FA00930C67 /* UIToggleButton.h */, D32648431588F6FB00930C67 /* UIToggleButton.m */, - 340751E5150F38FC00B89C47 /* UIVideoButton.h */, - 340751E6150F38FD00B89C47 /* UIVideoButton.m */, 24A345A51D95798A00881A5C /* UIShopTableCell.m */, 24A3459D1D95797700881A5C /* UIShopTableCell.xib */, ); path = LinphoneUI; sourceTree = ""; }; - 29B97314FDCFA39411CA2CEA = { + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( 8C23BCB71D82AAC3005F19BB /* linphone.entitlements */, @@ -2355,7 +2487,7 @@ 633E388219FFB0F400936D1C /* README.md */, 63AADBC31B6A0FF200AA16FD /* Resources */, D398D3031594B0FB00FD553C /* Settings */, - 561D0FD932DE3595BE512375 /* Pods */, + 5BCEB53D544D440FA098AEE3 /* Pods */, ); name = CustomTemplate; sourceTree = ""; @@ -2426,52 +2558,30 @@ 8C73477B1D9BA3A00022EE8C /* UserNotifications.framework */, 5E58962520DCE5700030868C /* UserNotificationsUI.framework */, 63CE583F1C85EBF400304800 /* VideoToolbox.framework */, - 6E1BC45342F5201DABD7FE55 /* Pods_latestCallsWidget.framework */, - 8B488C393394746F9D630789 /* Pods_latestChatroomsWidget.framework */, - 9CBD6E980619195CB7EE32AC /* Pods_liblinphoneTester.framework */, - D252FEC7DD06DD5695A320A1 /* Pods_liblinphoneTesterTests.framework */, - 65CEDD144CABFAA70A29AF27 /* Pods_linphone.framework */, - F325590DD6CD7F6CC8F60C03 /* Pods_linphoneTests.framework */, - 7513CBF7F2BA0A9F99977C2B /* Pods_richNotifications.framework */, - 82E9DEDA2A78C6DBBD1A54DB /* Pods_msgNotificationContent.framework */, - 6F30EA7BEA39DA427CE0754E /* Pods_msgNotificationService.framework */, + B464E44A606CB50A65A96FE2 /* Pods_linphone.framework */, + A164BAF39B3A5B9F905917A7 /* Pods_msgNotificationContent.framework */, + 72B39681098B0AF5B59B3A61 /* Pods_msgNotificationService.framework */, ); name = Frameworks; sourceTree = ""; }; - 561D0FD932DE3595BE512375 /* Pods */ = { + 5BCEB53D544D440FA098AEE3 /* Pods */ = { isa = PBXGroup; children = ( - 68D9EC27FCECD5DE2E19CD3C /* Pods-liblinphoneTester.debug.xcconfig */, - 38A3AE51B9E09ABF29222E5F /* Pods-liblinphoneTester.release.xcconfig */, - 24585CBE78DA4F005C7F9D71 /* Pods-liblinphoneTester.distribution.xcconfig */, - FD22CA9E3EFBFEFFF1B80BA2 /* Pods-liblinphoneTester.distributionadhoc.xcconfig */, - 7D8CCFE176C634813E3A2593 /* Pods-liblinphoneTesterTests.debug.xcconfig */, - BE06BDE664323B2A53469696 /* Pods-liblinphoneTesterTests.release.xcconfig */, - 248C326F4AD75E654C1CB37A /* Pods-liblinphoneTesterTests.distribution.xcconfig */, - 046DEFE77AD0675DA9932C4C /* Pods-liblinphoneTesterTests.distributionadhoc.xcconfig */, - 799BA1104845EB01ACE764D8 /* Pods-linphone.debug.xcconfig */, - FEAFB5AD0E3AA409BBD1136E /* Pods-linphone.release.xcconfig */, - 38DF35D11A7C0F45E990C83A /* Pods-linphone.distribution.xcconfig */, - FE7D89A821FDC1BCA9BB9F8F /* Pods-linphone.distributionadhoc.xcconfig */, - ABB887316C42EE876A3051A9 /* Pods-linphoneTests.debug.xcconfig */, - F6373F9231918DECD2B3004D /* Pods-linphoneTests.release.xcconfig */, - 85FB19B6A8124D942C8471F1 /* Pods-linphoneTests.distribution.xcconfig */, - CE119C214B6B8B2740622BBD /* Pods-linphoneTests.distributionadhoc.xcconfig */, - 791017662FE117B9B12E8938 /* Pods-messagesNotification.debug.xcconfig */, - EE807919DDB0B4B46AD1D439 /* Pods-messagesNotification.release.xcconfig */, - 13B1BD646346F33BF57412F2 /* Pods-messagesNotification.distribution.xcconfig */, - CC6F924A8B1B1698914A3BB2 /* Pods-messagesNotification.distributionadhoc.xcconfig */, - 8B4C43A28E90775F6FCA2CEE /* Pods-msgNotificationContent.debug.xcconfig */, - 34027665305514025971F85C /* Pods-msgNotificationContent.release.xcconfig */, - E40C9A7D22675584396C0A3D /* Pods-msgNotificationContent.distribution.xcconfig */, - BAD0A9494E833034EB559687 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */, - ADCA571A7CF61077747BFE53 /* Pods-msgNotificationService.debug.xcconfig */, - 904C1EC75CB9E03374AAA802 /* Pods-msgNotificationService.release.xcconfig */, - F4BE1A2318FC69D799C34F0A /* Pods-msgNotificationService.distribution.xcconfig */, - 8FD0D10102F0A8922703B8A4 /* Pods-msgNotificationService.distributionadhoc.xcconfig */, + 53432234870660E9876CBCA8 /* Pods-linphone.debug.xcconfig */, + 0DF941C97B75E7BA39A90600 /* Pods-linphone.release.xcconfig */, + 79B41078A602EFB886981917 /* Pods-linphone.distribution.xcconfig */, + 22D3BF4C45858F6B07F4D2A4 /* Pods-linphone.distributionadhoc.xcconfig */, + 1060E68152C51FCE5ACBF779 /* Pods-msgNotificationContent.debug.xcconfig */, + 02DBDD5A09F46796AEC2485B /* Pods-msgNotificationContent.release.xcconfig */, + 507103607396F28FF4427108 /* Pods-msgNotificationContent.distribution.xcconfig */, + 6150F32455334A0A7B3D46C8 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */, + C589627B9D9D2A4F9C816051 /* Pods-msgNotificationService.debug.xcconfig */, + 063D57B2E4769739DC5DA5C0 /* Pods-msgNotificationService.release.xcconfig */, + B9F41097CE0124A05554DB9C /* Pods-msgNotificationService.distribution.xcconfig */, + 3411568BE5527EB500F75EBB /* Pods-msgNotificationService.distributionadhoc.xcconfig */, ); - name = Pods; + path = Pods; sourceTree = ""; }; 61AE364C20C00B370089D9D3 /* linphoneExtension */ = { @@ -2501,6 +2611,67 @@ 633FEBE11D3CD5570014B822 /* images */ = { isa = PBXGroup; children = ( + C6EA2F4727514D08008E60F8 /* voip_call_forward.png */, + C6277DA7274BF1CD00406FB9 /* voip_radio_off.png */, + C6277DA6274BF1CD00406FB9 /* voip_radio_on.png */, + C6710F7D2722B1F500ED888F /* voip_audio_routes.png */, + C6710F6D2722B1F000ED888F /* voip_bluetooth.png */, + C6710F802722B1F600ED888F /* voip_call_add.png */, + C6710F732722B1F200ED888F /* voip_call_chat.png */, + C6710F972722B1FE00ED888F /* voip_call_header_active.png */, + C6710F912722B1FC00ED888F /* voip_call_header_incoming.png */, + C6710F9C2722B1FF00ED888F /* voip_call_header_outgoing.png */, + C6710F842722B1F800ED888F /* voip_call_header_paused.png */, + C6710F932722B1FC00ED888F /* voip_call_list_menu.png */, + C6710F6E2722B1F000ED888F /* voip_call_more.png */, + C6710F6A2722B1EF00ED888F /* voip_call_numpad.png */, + C6710F942722B1FD00ED888F /* voip_call_participants.png */, + C6710F992722B1FE00ED888F /* voip_call_record.png */, + C6710F702722B1F100ED888F /* voip_call_stats.png */, + C6710F822722B1F700ED888F /* voip_call.png */, + C6710F792722B1F400ED888F /* voip_calls_list.png */, + C6710F8C2722B1FA00ED888F /* voip_camera_off.png */, + C6710F9B2722B1FF00ED888F /* voip_camera_on.png */, + C6710F8A2722B1F900ED888F /* voip_cancel.png */, + C6710F832722B1F700ED888F /* voip_change_camera.png */, + C6710F772722B1F300ED888F /* voip_chat_rooms_list.png */, + C6710F712722B1F100ED888F /* voip_conference_active_speaker.png */, + C6710F7B2722B1F500ED888F /* voip_conference_mosaic.png */, + C6710F762722B1F300ED888F /* voip_conference_new.png */, + C6710F9A2722B1FE00ED888F /* voip_conference_paused_big.png */, + C6710F9D2722B20000ED888F /* voip_conference_play_big.png */, + C6710F682722B1EF00ED888F /* voip_copy.png */, + C6710F7C2722B1F500ED888F /* voip_delete.png */, + C6710F982722B1FE00ED888F /* voip_dropdown.png */, + C6710F862722B1F800ED888F /* voip_earpiece.png */, + C6710F722722B1F200ED888F /* voip_edit.png */, + C6710F852722B1F800ED888F /* voip_export.png */, + C6710F752722B1F300ED888F /* voip_hangup.png */, + C6710F9E2722B20000ED888F /* voip_info.png */, + C6710F6C2722B1F000ED888F /* voip_mandatory.png */, + C6710F8D2722B1FA00ED888F /* voip_menu_more.png */, + C6710F692722B1EF00ED888F /* voip_merge_calls.png */, + C6710F882722B1F900ED888F /* voip_micro_off.png */, + C6710F782722B1F300ED888F /* voip_micro_on.png */, + C6710F6F2722B1F100ED888F /* voip_multiple_contacts_avatar.png */, + C6710F672722B1EF00ED888F /* voip_numpad_0.png */, + C6710F662722B1EF00ED888F /* voip_numpad_1.png */, + C6710F892722B1F900ED888F /* voip_numpad_2.png */, + C6710F7F2722B1F600ED888F /* voip_numpad_3.png */, + C6710F8E2722B1FB00ED888F /* voip_numpad_4.png */, + C6710F742722B1F200ED888F /* voip_numpad_5.png */, + C6710F7E2722B1F600ED888F /* voip_numpad_6.png */, + C6710F8F2722B1FB00ED888F /* voip_numpad_7.png */, + C6710F962722B1FD00ED888F /* voip_numpad_8.png */, + C6710F812722B1F700ED888F /* voip_numpad_9.png */, + C6710F872722B1F800ED888F /* voip_numpad_hash.png */, + C6710F8B2722B1FA00ED888F /* voip_numpad_star.png */, + C6710F7A2722B1F400ED888F /* voip_pause.png */, + C6710F922722B1FC00ED888F /* voip_remote_recording.png */, + C6710F6B2722B1F000ED888F /* voip_single_contact_avatar.png */, + C6710F952722B1FD00ED888F /* voip_speaker_off.png */, + C6710F902722B1FB00ED888F /* voip_speaker_on.png */, + C6710F642722B13000ED888F /* voip_spinner.png */, C66B040D26F095CE009B5EDC /* cancel_forward.png */, C66B040926EFDA54009B5EDC /* reply_cancel.png */, C6A1BB4426E890BD00540D50 /* file_voice_default.png */, @@ -3038,6 +3209,7 @@ 63AADBC31B6A0FF200AA16FD /* Resources */ = { isa = PBXGroup; children = ( + C6710F5D2722AE8900ED888F /* fonts */, 63AADBE31B6A0FF200AA16FD /* assistant_external_sip.rc */, 63AADBE41B6A0FF200AA16FD /* assistant_linphone_create.rc */, 63AADBE51B6A0FF200AA16FD /* assistant_linphone_existing.rc */, @@ -3090,6 +3262,205 @@ path = ringtones; sourceTree = ""; }; + C658614A273E59A300A0DBFC /* CompositeViewControllers */ = { + isa = PBXGroup; + children = ( + C65A5D2F27216B86005BA038 /* ActiveCallOrConferenceView.swift */, + C6824FB927219D890043D4FC /* IncomingCallView.swift */, + C6710FE62723234400ED888F /* OutgoingCallView.swift */, + ); + path = CompositeViewControllers; + sourceTree = ""; + }; + C65A5D2D2721683B005BA038 /* Voip */ = { + isa = PBXGroup; + children = ( + C6F2D500273B0EFC0071BA52 /* VoipDialog.swift */, + C67C97B7274FD76B0074A0D8 /* AudioRouteUtils.swift */, + C6710F5A2722A9FB00ED888F /* Theme */, + C6710F4D2722900A00ED888F /* Widgets */, + C65A5D3127216C3E005BA038 /* Models */, + C65A5D2E27216B4C005BA038 /* Views */, + ); + path = Voip; + sourceTree = ""; + }; + C65A5D2E27216B4C005BA038 /* Views */ = { + isa = PBXGroup; + children = ( + C6F2D4F8273A4CD60071BA52 /* SharedLayoutConstants.swift */, + C6710FDF2722D47E00ED888F /* Fragments */, + C658614A273E59A300A0DBFC /* CompositeViewControllers */, + ); + path = Views; + sourceTree = ""; + }; + C65A5D3127216C3E005BA038 /* Models */ = { + isa = PBXGroup; + children = ( + C65A5D3E27216E3A005BA038 /* CallData.swift */, + C6C98CD627453F9600059B55 /* ConferenceParticipantData.swift */, + C6C98CDA274541E400059B55 /* ConferenceParticipantDeviceData.swift */, + C60B66672721AFFA0026AC7D /* CallStatisticsData.swift */, + C60D265527299C94006238BB /* ControlsViewModel.swift */, + C6F2D4EE27392D960071BA52 /* CallsViewModel.swift */, + C6C98CD427453ED700059B55 /* ConferenceViewModel.swift */, + ); + path = Models; + sourceTree = ""; + }; + C65A5D3427216CAB005BA038 /* ViewModel */ = { + isa = PBXGroup; + children = ( + C65A5D3727216CC0005BA038 /* MutableLiveData.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + C65A5D41272184CE005BA038 /* SwiftUtil */ = { + isa = PBXGroup; + children = ( + C683B211272276C100D4E15C /* Extensions */, + C65A5D3427216CAB005BA038 /* ViewModel */, + ); + path = SwiftUtil; + sourceTree = ""; + }; + C6710F4D2722900A00ED888F /* Widgets */ = { + isa = PBXGroup; + children = ( + C6710F582722A9B800ED888F /* StyledLabel.swift */, + C6710FD82722BD0100ED888F /* UICallTimer.swift */, + C6710F4E2722903200ED888F /* RotatingSpinner.swift */, + C6710FE02722F0E400ED888F /* Avatar.swift */, + C6710FE82723DD7D00ED888F /* CallControlButton.swift */, + C658614B273E5B5E00A0DBFC /* VoipExtraButton.swift */, + C6D09F3C273EE467003C2173 /* BouncingCounter.swift */, + C6F2D502273BAC030071BA52 /* ButtonWithStateBackgrounds.swift */, + ); + path = Widgets; + sourceTree = ""; + }; + C6710F5A2722A9FB00ED888F /* Theme */ = { + isa = PBXGroup; + children = ( + C6710F5427229D5900ED888F /* LightDarkColor.swift */, + C6710F5627229DEE00ED888F /* TextStyle.swift */, + C683B20D2722702300D4E15C /* VoipTheme.swift */, + C6710F52272297C400ED888F /* VoipTexts.swift */, + C6710FEA2726874D00ED888F /* ButtonTheme.swift */, + ); + path = Theme; + sourceTree = ""; + }; + C6710F5D2722AE8900ED888F /* fonts */ = { + isa = PBXGroup; + children = ( + C6710F5F2722AECB00ED888F /* Roboto-Bold.ttf */, + C6710F5E2722AECB00ED888F /* Roboto-Italic.ttf */, + C6710F602722AECB00ED888F /* Roboto-Regular.ttf */, + ); + path = fonts; + sourceTree = ""; + }; + C6710FDF2722D47E00ED888F /* Fragments */ = { + isa = PBXGroup; + children = ( + C67C97AF274FB3620074A0D8 /* ParticipantsList */, + C67C97AE274FB3370074A0D8 /* CallsList */, + C67C97AC274FB2DA0074A0D8 /* ActiveCall */, + C6D52B4727481D3F00904660 /* Conference */, + C6F2D4FE273AF01A0071BA52 /* ControlsView.swift */, + C67C97B3274FC5EE0074A0D8 /* AudioRoutesView.swift */, + C6F2D4F62739861F0071BA52 /* RemotelyRecording.swift */, + C6278496273C21E1002FAA29 /* LocalVideoView.swift */, + C6586148273E595700A0DBFC /* VoipExtraButtonsView.swift */, + C6F2D4FC273A85A90071BA52 /* PausedCallOrConferenceView.swift */, + C6710FDD2722D44A00ED888F /* IncomingOuntgoingCommonView.swift */, + C6C65E8A2727274A00E48FC6 /* NumpadView.swift */, + C6D09F3E274273FB003C2173 /* CallStatsView.swift */, + C6C98CCD27438A3F00059B55 /* DismissableView.swift */, + ); + path = Fragments; + sourceTree = ""; + }; + C6710FE227230B2300ED888F /* IOS */ = { + isa = PBXGroup; + children = ( + C6F2D504273BB3BB0071BA52 /* UIApplication+Extension.swift */, + C6710F5B2722AAED00ED888F /* UIDeviceExtensions.swift */, + C65A5D44272196AE005BA038 /* OptionalExtensions.swift */, + C683B212272276CF00D4E15C /* UIColorExtensions.swift */, + C6710F502722932600ED888F /* UIImageViewExtensions.swift */, + C60D265B272AA0BD006238BB /* UIImageExtensions.swift */, + C6710FDB2722C3BB00ED888F /* UIVIewExtensions.swift */, + C6C65E88272723DC00E48FC6 /* UIVIewControllerExtensions.swift */, + ); + path = IOS; + sourceTree = ""; + }; + C6710FE327230B2D00ED888F /* LinphoneCore */ = { + isa = PBXGroup; + children = ( + C6710FE427230B5800ED888F /* AddressExtensions.swift */, + C60D265727299F6F006238BB /* CoreExtensions.swift */, + C6F2D4F0273935860071BA52 /* CallExtensions.swift */, + C6C98CDC274547C500059B55 /* ParticipantExtensions.swift */, + C6C98CDE2745590400059B55 /* ConferenceExtensions.swift */, + C6D09F4027428626003C2173 /* IceState.swift */, + C6D09F42274288D4003C2173 /* PayloadType.swift */, + ); + path = LinphoneCore; + sourceTree = ""; + }; + C67C97AC274FB2DA0074A0D8 /* ActiveCall */ = { + isa = PBXGroup; + children = ( + C6F2D4F22739475C0071BA52 /* ActiveCallView.swift */, + ); + path = ActiveCall; + sourceTree = ""; + }; + C67C97AE274FB3370074A0D8 /* CallsList */ = { + isa = PBXGroup; + children = ( + C6D09F4A27438706003C2173 /* CallsListView.swift */, + C6C98CCF27439A7F00059B55 /* VoipCallCell.swift */, + C6C98CD12743FD0B00059B55 /* VoipCallContextMenu.swift */, + ); + path = CallsList; + sourceTree = ""; + }; + C67C97AF274FB3620074A0D8 /* ParticipantsList */ = { + isa = PBXGroup; + children = ( + C6B04D62274B95D400F70559 /* VoipParticipantCell.swift */, + C6B04D60274B954500F70559 /* ParticipantsListView.swift */, + ); + path = ParticipantsList; + sourceTree = ""; + }; + C683B211272276C100D4E15C /* Extensions */ = { + isa = PBXGroup; + children = ( + C6710FE327230B2D00ED888F /* LinphoneCore */, + C6710FE227230B2300ED888F /* IOS */, + ); + path = Extensions; + sourceTree = ""; + }; + C6D52B4727481D3F00904660 /* Conference */ = { + isa = PBXGroup; + children = ( + C6C98CE0274568F700059B55 /* VoipConferenceGridView.swift */, + C6D52B44274648E500904660 /* VoipGridParticipantCell.swift */, + C6B04D66274BD61200F70559 /* VoipConferenceActiveSpeakerView.swift */, + C6B04D68274BD6A100F70559 /* VoipActiveSpeakerParticipantCell.swift */, + C67C97B0274FB4C10074A0D8 /* VoipConferenceDisplayModeSelectionView.swift */, + ); + path = Conference; + sourceTree = ""; + }; D326483415887D4400930C67 /* Utils */ = { isa = PBXGroup; children = ( @@ -3116,8 +3487,6 @@ 63D11C541C3D503A00E8FCEE /* Log.h */, 63423C081C4501D000D9A050 /* Contact.h */, 63423C091C4501D000D9A050 /* Contact.m */, - 8C1B67081E6718BC001EA2FE /* AudioHelper.h */, - 8C1B67051E671826001EA2FE /* AudioHelper.m */, C6B4444726AADA530076C517 /* SwiftUtil.swift */, ); name = Utils; @@ -3269,15 +3638,15 @@ isa = PBXNativeTarget; buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "linphone" */; buildPhases = ( - 20EEEF6D60A7B77C2EFF85DB /* [CP] Check Pods Manifest.lock */, + 068EB8CED53992A5D7A733DF /* [CP] Check Pods Manifest.lock */, 1D60588D0D05DD3D006BFB54 /* Resources */, 63DCC71D1A07B08E00916627 /* Run Script */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, 8CDC89061EAF89A8006B5652 /* Embed Frameworks */, 5EF0C35020C806A5005081B0 /* Embed App Extensions */, - 4D22DCAAC0231865D78AC1E6 /* [CP] Embed Pods Frameworks */, 614D0A1821E77F5300C43EDF /* ShellScript */, + D7A9CDC06B7BB5D324EA10C9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -3312,7 +3681,7 @@ isa = PBXNativeTarget; buildConfigurationList = EA5F25E1232BD3E300475F2E /* Build configuration list for PBXNativeTarget "msgNotificationService" */; buildPhases = ( - CD5CF0B3FE8B6052CD8219CE /* [CP] Check Pods Manifest.lock */, + 1E9EBAB02A694F2487E6099B /* [CP] Check Pods Manifest.lock */, EA5F25D5232BD3E200475F2E /* Sources */, 203E6292C3E84CD13778F720 /* Frameworks */, EA88A406242A6224007FEC61 /* Resources */, @@ -3331,7 +3700,7 @@ isa = PBXNativeTarget; buildConfigurationList = EA8CB834239F96CA00C330CC /* Build configuration list for PBXNativeTarget "msgNotificationContent" */; buildPhases = ( - B0A561F0290F0342EACE9005 /* [CP] Check Pods Manifest.lock */, + 2E68C0F1B7E1F6C3000F700C /* [CP] Check Pods Manifest.lock */, EA8CB823239F96CA00C330CC /* Sources */, 143EFEE2501CB14E6BB244EF /* Frameworks */, EA88F3AE241BD1ED00E66528 /* Resources */, @@ -3433,7 +3802,7 @@ fr, hu, ); - mainGroup = 29B97314FDCFA39411CA2CEA; + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */; projectDirPath = ""; projectRoot = ""; @@ -3465,6 +3834,7 @@ 633FEE2B1D3CD5590014B822 /* color_C.png in Resources */, 633FEE871D3CD5590014B822 /* led_inprogress@2x.png in Resources */, 633FEEC61D3CD55A0014B822 /* numpad_5_over@2x.png in Resources */, + C6710FC02722B20000ED888F /* voip_numpad_hash.png in Resources */, 633FEF021D3CD55A0014B822 /* options_disabled.png in Resources */, 633FEDC81D3CD5590014B822 /* call_missed.png in Resources */, 8CB2B8FA1F86229E0015CEE2 /* next_disabled.png in Resources */, @@ -3484,6 +3854,7 @@ 638F1A621C2021B2004B8E02 /* DialerView~ipad.xib in Resources */, 615A2817217F280C0060F920 /* chat_list_indicator.png in Resources */, 633FEEFF1D3CD55A0014B822 /* options_add_call_disabled@2x.png in Resources */, + C6710FB92722B20000ED888F /* voip_call_add.png in Resources */, 633FEF091D3CD55A0014B822 /* options_start_conference_disabled@2x.png in Resources */, C622E3F326A81290004F5434 /* vr_pause.png in Resources */, 633FEE051D3CD5590014B822 /* cancel_edit_disabled@2x.png in Resources */, @@ -3495,23 +3866,28 @@ 633FEE0B1D3CD5590014B822 /* chat_attachment_default@2x.png in Resources */, 633FEED41D3CD55A0014B822 /* numpad_7_default@2x.png in Resources */, 633FEEE01D3CD55A0014B822 /* numpad_8_over~ipad@2x.png in Resources */, + C6710FA42722B20000ED888F /* voip_single_contact_avatar.png in Resources */, 633FEDDC1D3CD5590014B822 /* call_start_body_disabled~ipad.png in Resources */, - 63E802DB1C625AEF000D5509 /* BuildFile in Resources */, + 63E802DB1C625AEF000D5509 /* (null) in Resources */, 633FEE2E1D3CD5590014B822 /* color_F.png in Resources */, + C6710FA72722B20000ED888F /* voip_call_more.png in Resources */, 633FEDC51D3CD5590014B822 /* call_hangup_disabled@2x.png in Resources */, 633FEEDF1D3CD55A0014B822 /* numpad_8_over~ipad.png in Resources */, + C6710FB62722B20000ED888F /* voip_audio_routes.png in Resources */, + C6710FB02722B20000ED888F /* voip_chat_rooms_list.png in Resources */, 8CD99A372090A824008A7CDA /* splashscreen@2x.png in Resources */, 24BFAAA9209B0630004F47A7 /* linphone_logo@2x.png in Resources */, 633FEE071D3CD5590014B822 /* chat_add_default@2x.png in Resources */, + C6710FBB2722B20000ED888F /* voip_call.png in Resources */, 633FEF551D3CD55A0014B822 /* waiting_time@2x.png in Resources */, 633FEEAC1D3CD55A0014B822 /* numpad_2_default@2x.png in Resources */, + C6710FD22722B20000ED888F /* voip_call_record.png in Resources */, 633FEE541D3CD5590014B822 /* dialer_back_default.png in Resources */, 633FEF0B1D3CD55A0014B822 /* options_transfer_call_default@2x.png in Resources */, 633FEDE81D3CD5590014B822 /* call_status_missed~ipad.png in Resources */, 63AADBFF1B6A0FF200AA16FD /* assistant_external_sip.rc in Resources */, 61CCC3E121933B660060EDEA /* UIDeviceCell.xib in Resources */, 633FEE9E1D3CD55A0014B822 /* numpad_0_over@2x.png in Resources */, - 634610121B6140A500548952 /* CallOutgoingView.xib in Resources */, 8CE24F581F8268850077AC0A /* conference_delete@2x.png in Resources */, 633FEDC21D3CD5590014B822 /* call_hangup_default.png in Resources */, 633FEEB41D3CD55A0014B822 /* numpad_3_default@2x.png in Resources */, @@ -3533,8 +3909,10 @@ 633FEE401D3CD5590014B822 /* contacts_all_selected.png in Resources */, 633FEE0C1D3CD5590014B822 /* chat_attachment_disabled.png in Resources */, C622E3EF26A81290004F5434 /* vr_stop.png in Resources */, + C6710FD12722B20000ED888F /* voip_dropdown.png in Resources */, 633FEF001D3CD55A0014B822 /* options_default.png in Resources */, CF15F21F20E4F9A3008B1DE6 /* UIImageViewDeletable.xib in Resources */, + C6710FBF2722B20000ED888F /* voip_earpiece.png in Resources */, 633FEE951D3CD55A0014B822 /* micro_default@2x.png in Resources */, 633FEE6A1D3CD5590014B822 /* footer_dialer_default.png in Resources */, 633FEEC91D3CD55A0014B822 /* numpad_5~ipad.png in Resources */, @@ -3558,18 +3936,20 @@ 633FEE7A1D3CD5590014B822 /* history_missed_default.png in Resources */, 633FEF121D3CD55A0014B822 /* pause_big_over_selected.png in Resources */, 633FED9D1D3CD5590014B822 /* add_field_default@2x.png in Resources */, + C6710FA32722B20000ED888F /* voip_call_numpad.png in Resources */, C622E3F426A81290004F5434 /* vr_play.png in Resources */, 639E9CB01C0DB83000019A75 /* SideMenuView.xib in Resources */, 633FEDBB1D3CD5590014B822 /* call_audio_start_default@2x.png in Resources */, 633FEF1A1D3CD55A0014B822 /* presence_away.png in Resources */, 639E9CB51C0DB88200019A75 /* PhoneMainView.xib in Resources */, + C6710F652722B13000ED888F /* voip_spinner.png in Resources */, 633FEDB61D3CD5590014B822 /* call_alt_start_default.png in Resources */, - 6352A5761BE0D4B800594C1C /* CallSideMenuView.xib in Resources */, 633FEF0D1D3CD55A0014B822 /* options_transfer_call_disabled@2x.png in Resources */, 633FEDEF1D3CD5590014B822 /* call_transfer_default@2x.png in Resources */, 633FEF391D3CD55A0014B822 /* routes_selected@2x.png in Resources */, 633FEE491D3CD5590014B822 /* delete_default@2x.png in Resources */, 633FEF291D3CD55A0014B822 /* route_earpiece_default@2x.png in Resources */, + C6710FAF2722B20000ED888F /* voip_conference_new.png in Resources */, 633FEE271D3CD5590014B822 /* checkbox_checked@2x.png in Resources */, 61586B85217A17070038AC45 /* menu_assistant.png in Resources */, 633FEDCC1D3CD5590014B822 /* call_quality_indicator_0.png in Resources */, @@ -3594,6 +3974,7 @@ 633FEEEF1D3CD55A0014B822 /* numpad_hash_over~ipad.png in Resources */, 633FEEE21D3CD55A0014B822 /* numpad_8~ipad@2x.png in Resources */, 633FEEED1D3CD55A0014B822 /* numpad_hash_over.png in Resources */, + C6710FC42722B20000ED888F /* voip_numpad_star.png in Resources */, 633FEE1F1D3CD5590014B822 /* chat_start_body_disabled@2x.png in Resources */, 633FEEF81D3CD55A0014B822 /* numpad_star_over~ipad.png in Resources */, C6A1BB3826E8815400540D50 /* menu_reply_default.png in Resources */, @@ -3601,6 +3982,7 @@ 639CEAFD1A1DF4D9004DE38F /* StatusBarView.xib in Resources */, 633FEDE91D3CD5590014B822 /* call_status_missed~ipad@2x.png in Resources */, 8CE24F4C1F8234A30077AC0A /* next_default@2x.png in Resources */, + C6710FB12722B20000ED888F /* voip_micro_on.png in Resources */, 244523B11E8266CC0037A187 /* chat_read.png in Resources */, 61AEBEC62191E47500F35E7F /* chevron_list_close.png in Resources */, 617B4A60260A2B7800A87337 /* RecordingsListView.xib in Resources */, @@ -3609,15 +3991,19 @@ 8CF25D951F9F336100BEA0C1 /* check_unselected@2x.png in Resources */, F088488A19FF8C41007FFCF3 /* UIContactCell.xib in Resources */, 633FEE381D3CD5590014B822 /* contact_add_default.png in Resources */, + C6710FC22722B20000ED888F /* voip_numpad_2.png in Resources */, 633FEE6F1D3CD5590014B822 /* footer_history_default@2x.png in Resources */, + C6710FD52722B20000ED888F /* voip_call_header_outgoing.png in Resources */, 633FEF201D3CD55A0014B822 /* presence_unregistered.png in Resources */, 61586B8D217A173F0038AC45 /* menu_options.png in Resources */, 61AEBEC82191E48400F35E7F /* chevron_list_close@2x.png in Resources */, 633FEF341D3CD55A0014B822 /* routes_default.png in Resources */, + C6710FC82722B20000ED888F /* voip_numpad_7.png in Resources */, 633FEE061D3CD5590014B822 /* chat_add_default.png in Resources */, 633FEDF21D3CD5590014B822 /* call_video_start_default.png in Resources */, 633FEF491D3CD55A0014B822 /* speaker_selected@2x.png in Resources */, 633FEF541D3CD55A0014B822 /* waiting_time.png in Resources */, + C6277DA8274BF1CE00406FB9 /* voip_radio_on.png in Resources */, 633FEE861D3CD5590014B822 /* led_inprogress.png in Resources */, 633FEDFC1D3CD5590014B822 /* camera_switch_default.png in Resources */, 24BFAA9F209B0630004F47A7 /* linphone_user.png in Resources */, @@ -3634,11 +4020,13 @@ 633FEE281D3CD5590014B822 /* checkbox_unchecked.png in Resources */, 633FEE9D1D3CD55A0014B822 /* numpad_0_over.png in Resources */, 633FEEC21D3CD55A0014B822 /* numpad_4~ipad@2x.png in Resources */, + C6710FCA2722B20000ED888F /* voip_call_header_incoming.png in Resources */, 633FEDFE1D3CD5590014B822 /* camera_switch_disabled.png in Resources */, 633FEE7F1D3CD5590014B822 /* history_missed_selected@2x.png in Resources */, 633FEDC01D3CD5590014B822 /* call_back_disabled.png in Resources */, 633FEED31D3CD55A0014B822 /* numpad_7_default.png in Resources */, 63130FB21C1ED06900371918 /* SideMenuView~ipad.xib in Resources */, + C6710FB82722B20000ED888F /* voip_numpad_3.png in Resources */, 633FEEE71D3CD55A0014B822 /* numpad_9_over~ipad.png in Resources */, 633FEEEA1D3CD55A0014B822 /* numpad_9~ipad@2x.png in Resources */, 633FEEC31D3CD55A0014B822 /* numpad_5_default.png in Resources */, @@ -3647,6 +4035,8 @@ 633FEEC01D3CD55A0014B822 /* numpad_4_over~ipad@2x.png in Resources */, 61586B8B217A17320038AC45 /* menu_link_account@2x.png in Resources */, 63CDC4661C3BDE370085F529 /* shortring.caf in Resources */, + C6710FB42722B20000ED888F /* voip_conference_mosaic.png in Resources */, + C6710FC92722B20000ED888F /* voip_speaker_on.png in Resources */, C6A1BB4126E889AD00540D50 /* forward_message_default.png in Resources */, 633FEDD51D3CD5590014B822 /* call_quality_indicator_4@2x.png in Resources */, 633FEDE71D3CD5590014B822 /* call_status_missed@2x.png in Resources */, @@ -3659,8 +4049,10 @@ 633FEEBB1D3CD55A0014B822 /* numpad_4_default.png in Resources */, 633FEF2B1D3CD55A0014B822 /* route_earpiece_disabled@2x.png in Resources */, 639E9CA31C0DB7EA00019A75 /* UIChatBubbleTextCell.xib in Resources */, + C6710FA62722B20000ED888F /* voip_bluetooth.png in Resources */, 633FEDD21D3CD5590014B822 /* call_quality_indicator_3.png in Resources */, 633FEDAF1D3CD5590014B822 /* call_add_default@2x.png in Resources */, + C6710FA82722B20000ED888F /* voip_multiple_contacts_avatar.png in Resources */, 633FEE931D3CD55A0014B822 /* menu@2x.png in Resources */, 633FEF3D1D3CD55A0014B822 /* security_ok@2x.png in Resources */, 633FEF161D3CD55A0014B822 /* pause_small_disabled.png in Resources */, @@ -3673,8 +4065,8 @@ 615A280F217F1FD50060F920 /* chat_add_group.png in Resources */, 633FEEC41D3CD55A0014B822 /* numpad_5_default@2x.png in Resources */, 633FEDAC1D3CD5590014B822 /* backspace_over.png in Resources */, - 639E9C9D1C0DB7DF00019A75 /* UICallPausedCell.xib in Resources */, 633FEE1B1D3CD5590014B822 /* chat_start_body_default@2x.png in Resources */, + C6710FB22722B20000ED888F /* voip_calls_list.png in Resources */, 633FEE021D3CD5590014B822 /* cancel_edit_default.png in Resources */, 633FEEE31D3CD55A0014B822 /* numpad_9_default.png in Resources */, 633FEE651D3CD5590014B822 /* footer_chat_disabled@2x.png in Resources */, @@ -3706,6 +4098,7 @@ 633FEDD11D3CD5590014B822 /* call_quality_indicator_2@2x.png in Resources */, 633FEDBC1D3CD5590014B822 /* call_audio_start_disabled.png in Resources */, 24BFAA9E209B0630004F47A7 /* dialer_background.png in Resources */, + C6710FD72722B20000ED888F /* voip_info.png in Resources */, 633FEE481D3CD5590014B822 /* delete_default.png in Resources */, 633FEEB01D3CD55A0014B822 /* numpad_2_over~ipad@2x.png in Resources */, 633FEE2A1D3CD5590014B822 /* color_A.png in Resources */, @@ -3713,6 +4106,8 @@ 63E27A321C4FECD000D332AE /* LaunchScreen.xib in Resources */, 633FEED11D3CD55A0014B822 /* numpad_6~ipad.png in Resources */, CF7602E82108759A00749F76 /* UIRecordingCell.xib in Resources */, + C6710FC62722B20000ED888F /* voip_menu_more.png in Resources */, + C6710FC12722B20000ED888F /* voip_micro_off.png in Resources */, C6B4444626AAD0980076C517 /* file_pdf_default.png in Resources */, 633FEED21D3CD55A0014B822 /* numpad_6~ipad@2x.png in Resources */, 633FEDCD1D3CD5590014B822 /* call_quality_indicator_0@2x.png in Resources */, @@ -3743,13 +4138,14 @@ D34F6F9E1594D3FB0095705B /* InAppSettings.bundle in Resources */, 633FEE4D1D3CD5590014B822 /* delete_field_default@2x.png in Resources */, 615A28362180720D0060F920 /* security_toogle_background_grey@2x.png in Resources */, + C6710F612722AECB00ED888F /* Roboto-Italic.ttf in Resources */, 639CEB091A1DF4FA004DE38F /* UIChatCell.xib in Resources */, 633FEE961D3CD55A0014B822 /* micro_disabled.png in Resources */, 63AADBF61B6A0FF200AA16FD /* linphonerc-factory in Resources */, + C6710FA92722B20000ED888F /* voip_call_stats.png in Resources */, 633FEE671D3CD5590014B822 /* footer_contacts_default@2x.png in Resources */, 615A2830218071E80060F920 /* security_toogle_background_green.png in Resources */, 63B8D68C1BCBE65600C12B09 /* ChatConversationCreateView.xib in Resources */, - D38187D915FE347700C3EDCA /* CallIncomingView.xib in Resources */, 63CDC45F1C3BDE370085F529 /* ringback.wav in Resources */, 8CD99A1C20908C27008A7CDA /* callkit_logo@2x.png in Resources */, 633FEE251D3CD5590014B822 /* chat_start_body_over~ipad@2x.png in Resources */, @@ -3782,13 +4178,16 @@ 633FEF3A1D3CD55A0014B822 /* security_ko.png in Resources */, 615A283A2180788E0060F920 /* security_toogle_button.png in Resources */, 633FEDA01D3CD5590014B822 /* avatar.png in Resources */, + C6710FA02722B20000ED888F /* voip_numpad_0.png in Resources */, 633FEEBC1D3CD55A0014B822 /* numpad_4_default@2x.png in Resources */, + C6710FAD2722B20000ED888F /* voip_numpad_5.png in Resources */, 633FEEA91D3CD55A0014B822 /* numpad_1~ipad.png in Resources */, 615A28402180A2620060F920 /* invite_linphone@2x.png in Resources */, C61B1BF42667D202001A4E4A /* more_menu_default.png in Resources */, 633FEDF71D3CD5590014B822 /* camera_default@2x.png in Resources */, C64A85522667B74100252AD2 /* ephemeral_messages_default.png in Resources */, 633FEDB31D3CD5590014B822 /* call_alt_back_default@2x.png in Resources */, + C6710FB52722B20000ED888F /* voip_delete.png in Resources */, 633FEDCF1D3CD5590014B822 /* call_quality_indicator_1@2x.png in Resources */, 633FEF131D3CD55A0014B822 /* pause_big_over_selected@2x.png in Resources */, 8CDC61951F84D89B0087CF7F /* check_selected.png in Resources */, @@ -3802,22 +4201,28 @@ 633FEDB21D3CD5590014B822 /* call_alt_back_default.png in Resources */, 633FEE3D1D3CD5590014B822 /* contacts_all_default@2x.png in Resources */, 633FEF251D3CD55A0014B822 /* route_bluetooth_disabled@2x.png in Resources */, + C6710FCF2722B20000ED888F /* voip_numpad_8.png in Resources */, 633FEDD81D3CD5590014B822 /* call_start_body_default~ipad.png in Resources */, 61586B83217A16FD0038AC45 /* menu_about@2x.png in Resources */, 633FEED81D3CD55A0014B822 /* numpad_7_over~ipad@2x.png in Resources */, + C6710FBE2722B20000ED888F /* voip_export.png in Resources */, 633FEDD71D3CD5590014B822 /* call_start_body_default@2x.png in Resources */, + C6710FC32722B20000ED888F /* voip_cancel.png in Resources */, 633FEE571D3CD5590014B822 /* dialer_back_disabled@2x.png in Resources */, 63CDC45E1C3BDE370085F529 /* msg.caf in Resources */, 633FEE6D1D3CD5590014B822 /* footer_dialer_disabled@2x.png in Resources */, 633FEF171D3CD55A0014B822 /* pause_small_disabled@2x.png in Resources */, + C6710FCE2722B20000ED888F /* voip_speaker_off.png in Resources */, C6A1BB3626E8815400540D50 /* menu_forward_default.png in Resources */, D38187DD15FE348A00C3EDCA /* AssistantView.xib in Resources */, 633FEDA61D3CD5590014B822 /* back_disabled.png in Resources */, 633FEED61D3CD55A0014B822 /* numpad_7_over@2x.png in Resources */, - 638F1A881C2167C2004B8E02 /* CallView~ipad.xib in Resources */, + C6710FD02722B20000ED888F /* voip_call_header_active.png in Resources */, + C6710FBA2722B20000ED888F /* voip_numpad_9.png in Resources */, 633FEDA11D3CD5590014B822 /* avatar@2x.png in Resources */, 633FED9E1D3CD5590014B822 /* add_field_over.png in Resources */, 633FEE0A1D3CD5590014B822 /* chat_attachment_default.png in Resources */, + C6710FC72722B20000ED888F /* voip_numpad_4.png in Resources */, 633FEE201D3CD5590014B822 /* chat_start_body_disabled~ipad.png in Resources */, 633FEE5B1D3CD5590014B822 /* edit_default@2x.png in Resources */, 633FEDE11D3CD5590014B822 /* call_start_body_over~ipad@2x.png in Resources */, @@ -3832,8 +4237,11 @@ C622E3F126A81290004F5434 /* vr_on.png in Resources */, 633FEF401D3CD55A0014B822 /* select_all_default.png in Resources */, C6B4444426AAD0980076C517 /* file_picture_default.png in Resources */, + C6EA2F4827514D09008E60F8 /* voip_call_forward.png in Resources */, 633FEDF01D3CD5590014B822 /* call_transfer_disabled.png in Resources */, 633FEE351D3CD5590014B822 /* conference_exit_default@2x.png in Resources */, + C6710FCB2722B20000ED888F /* voip_remote_recording.png in Resources */, + C6710FAA2722B20000ED888F /* voip_conference_active_speaker.png in Resources */, 633FEECF1D3CD55A0014B822 /* numpad_6_over~ipad.png in Resources */, 61586B87217A17160038AC45 /* menu_assistant@2x.png in Resources */, 633FEE9A1D3CD55A0014B822 /* nowebcamCIF.jpg in Resources */, @@ -3842,8 +4250,10 @@ 633FEEDB1D3CD55A0014B822 /* numpad_8_default.png in Resources */, 633FEE5C1D3CD5590014B822 /* edit_disabled.png in Resources */, 8CF25D9E1F9F76BD00BEA0C1 /* chat_group_informations@2x.png in Resources */, + C6710FD62722B20000ED888F /* voip_conference_play_big.png in Resources */, 633FEDCA1D3CD5590014B822 /* call_outgoing.png in Resources */, 633FEDF81D3CD5590014B822 /* camera_disabled.png in Resources */, + C6710FBD2722B20000ED888F /* voip_call_header_paused.png in Resources */, 8CB2B8FB1F86229E0015CEE2 /* next_disabled@2x.png in Resources */, 633FEEE91D3CD55A0014B822 /* numpad_9~ipad.png in Resources */, 633FEE331D3CD5590014B822 /* color_M.png in Resources */, @@ -3853,7 +4263,9 @@ 633FEF411D3CD55A0014B822 /* select_all_default@2x.png in Resources */, 633FEEFD1D3CD55A0014B822 /* options_add_call_default@2x.png in Resources */, 633FEEA81D3CD55A0014B822 /* numpad_1_over~ipad@2x.png in Resources */, + C6710FA12722B20000ED888F /* voip_copy.png in Resources */, D38187AD15FE340100C3EDCA /* ChatConversationView.xib in Resources */, + C6710FB72722B20000ED888F /* voip_numpad_6.png in Resources */, 633FEE7C1D3CD5590014B822 /* history_missed_disabled.png in Resources */, CF1DE92E210A0F5D00A0A97E /* UILinphoneAudioPlayer.xib in Resources */, 633FEDF11D3CD5590014B822 /* call_transfer_disabled@2x.png in Resources */, @@ -3877,6 +4289,7 @@ 633FEF471D3CD55A0014B822 /* speaker_disabled@2x.png in Resources */, 633FEEFE1D3CD55A0014B822 /* options_add_call_disabled.png in Resources */, 633FEE291D3CD5590014B822 /* checkbox_unchecked@2x.png in Resources */, + C6710FCD2722B20000ED888F /* voip_call_participants.png in Resources */, 63AADC001B6A0FF200AA16FD /* assistant_linphone_create.rc in Resources */, 633FEF1C1D3CD55A0014B822 /* presence_offline.png in Resources */, 633FEE901D3CD55A0014B822 /* list_details_over.png in Resources */, @@ -3886,12 +4299,14 @@ 63EC8D391D7438660066547B /* AssistantLinkView.xib in Resources */, 633FEE971D3CD55A0014B822 /* micro_disabled@2x.png in Resources */, D38187CD15FE346700C3EDCA /* HistoryDetailsView.xib in Resources */, + C6710FC52722B20000ED888F /* voip_camera_off.png in Resources */, 633FEEA21D3CD55A0014B822 /* numpad_0~ipad@2x.png in Resources */, 633FEE991D3CD55A0014B822 /* micro_selected@2x.png in Resources */, 633FEE621D3CD5590014B822 /* footer_chat_default.png in Resources */, 24BFAAA3209B0630004F47A7 /* contacts_sip_selected.png in Resources */, 633FEE0D1D3CD5590014B822 /* chat_attachment_disabled@2x.png in Resources */, 639E9CA61C0DB7F200019A75 /* UIChatCreateCell.xib in Resources */, + C6710FAE2722B20000ED888F /* voip_hangup.png in Resources */, 8CBD7BAC20B6B82F00E5DCC0 /* UIChatCreateCollectionViewCell.xib in Resources */, 633FEEA31D3CD55A0014B822 /* numpad_1_default.png in Resources */, 633FEEA51D3CD55A0014B822 /* numpad_1_over.png in Resources */, @@ -3908,6 +4323,7 @@ 633FEE691D3CD5590014B822 /* footer_contacts_disabled@2x.png in Resources */, 8CBD7BA020B6B7FD00E5DCC0 /* ChatConversationInfoView.xib in Resources */, 633FEF071D3CD55A0014B822 /* options_start_conference_default@2x.png in Resources */, + C6710FD32722B20000ED888F /* voip_conference_paused_big.png in Resources */, 633FEE151D3CD5590014B822 /* chat_send_default@2x.png in Resources */, 633FEDC31D3CD5590014B822 /* call_hangup_default@2x.png in Resources */, 633FEF061D3CD55A0014B822 /* options_start_conference_default.png in Resources */, @@ -3929,10 +4345,10 @@ C66B040E26F095D1009B5EDC /* cancel_forward.png in Resources */, CF7602F6210898CC00749F76 /* rec_on_default@2x.png in Resources */, 633FEF081D3CD55A0014B822 /* options_start_conference_disabled.png in Resources */, - 63F1DF511BCE986A00EDED90 /* UICallConferenceCell.xib in Resources */, 633FEE301D3CD5590014B822 /* color_H.png in Resources */, 633FEE7D1D3CD5590014B822 /* history_missed_disabled@2x.png in Resources */, 633FEE941D3CD55A0014B822 /* micro_default.png in Resources */, + C6710FB32722B20000ED888F /* voip_pause.png in Resources */, 633FEE611D3CD5590014B822 /* edit_list_disabled@2x.png in Resources */, 633FEE761D3CD5590014B822 /* history_all_selected.png in Resources */, 8C300D9B1E40E0CC00728EF3 /* lime_ko@2x.png in Resources */, @@ -3971,6 +4387,7 @@ 633FEF3B1D3CD55A0014B822 /* security_ko@2x.png in Resources */, 633FEE4A1D3CD5590014B822 /* delete_disabled.png in Resources */, 614D09CE21E74D5400C43EDF /* GoogleService-Info.plist in Resources */, + C6710F632722AECB00ED888F /* Roboto-Regular.ttf in Resources */, C6B4444526AAD0980076C517 /* file_audio_default.png in Resources */, C6A1BB3526E8815400540D50 /* menu_info.png in Resources */, C61B1BF72667EC6B001A4E4A /* ephemeral_messages_color_A.png in Resources */, @@ -3984,8 +4401,9 @@ 633FEE011D3CD5590014B822 /* camera_switch_over@2x.png in Resources */, 633FEEA01D3CD55A0014B822 /* numpad_0_over~ipad@2x.png in Resources */, 633FEF3E1D3CD55A0014B822 /* security_pending.png in Resources */, - D381881915FE3FCA00C3EDCA /* CallView.xib in Resources */, + C6710FBC2722B20000ED888F /* voip_change_camera.png in Resources */, 633FEE7E1D3CD5590014B822 /* history_missed_selected.png in Resources */, + C6277DA9274BF1CE00406FB9 /* voip_radio_off.png in Resources */, 633FEE261D3CD5590014B822 /* checkbox_checked.png in Resources */, 633FEF531D3CD55A0014B822 /* voicemail@2x.png in Resources */, 633FEF2C1D3CD55A0014B822 /* route_earpiece_selected.png in Resources */, @@ -3996,6 +4414,7 @@ 633FEECB1D3CD55A0014B822 /* numpad_6_default.png in Resources */, 633FEDC71D3CD5590014B822 /* call_incoming@2x.png in Resources */, 633FEDB81D3CD5590014B822 /* call_alt_start_disabled.png in Resources */, + C6710FCC2722B20000ED888F /* voip_call_list_menu.png in Resources */, 615A281D217F6FA80060F920 /* security_2_indicator@2x.png in Resources */, 633FEF3C1D3CD55A0014B822 /* security_ok.png in Resources */, 633FEEAF1D3CD55A0014B822 /* numpad_2_over~ipad.png in Resources */, @@ -4022,6 +4441,7 @@ 633FEDF31D3CD5590014B822 /* call_video_start_default@2x.png in Resources */, 24BFAAA2209B0630004F47A7 /* linphone_user~ipad@2x.png in Resources */, 633FEDBA1D3CD5590014B822 /* call_audio_start_default.png in Resources */, + C6710FA52722B20000ED888F /* voip_mandatory.png in Resources */, 61586B8F217A174F0038AC45 /* menu_options@2x.png in Resources */, 633FEE131D3CD5590014B822 /* chat_message_not_delivered@2x.png in Resources */, 615A282A21805B4C0060F920 /* security_toogle_icon_grey@2x.png in Resources */, @@ -4032,6 +4452,8 @@ 633FEDCE1D3CD5590014B822 /* call_quality_indicator_1.png in Resources */, 8CB2B8F91F86229E0015CEE2 /* chat_secure.png in Resources */, 633FEF4E1D3CD55A0014B822 /* valid_default.png in Resources */, + C6710FA22722B20000ED888F /* voip_merge_calls.png in Resources */, + C6710FAC2722B20000ED888F /* voip_call_chat.png in Resources */, 570742581D5A0691004B9C84 /* ShopView.xib in Resources */, 633FEE361D3CD5590014B822 /* conference_exit_over.png in Resources */, 633FEDAA1D3CD5590014B822 /* backspace_disabled.png in Resources */, @@ -4047,14 +4469,18 @@ 633FEDDD1D3CD5590014B822 /* call_start_body_disabled~ipad@2x.png in Resources */, 633FEEBD1D3CD55A0014B822 /* numpad_4_over.png in Resources */, 8CA70AD41F9E285C00A3D2EB /* chat_group_add@2x.png in Resources */, + C6710FAB2722B20000ED888F /* voip_edit.png in Resources */, C66B040A26EFDA55009B5EDC /* reply_cancel.png in Resources */, 633FEEF11D3CD55A0014B822 /* numpad_hash~ipad.png in Resources */, 633FEE781D3CD5590014B822 /* history_chat_indicator.png in Resources */, 633FEF431D3CD55A0014B822 /* select_all_disabled@2x.png in Resources */, + C6710F622722AECB00ED888F /* Roboto-Bold.ttf in Resources */, 633FEE771D3CD5590014B822 /* history_all_selected@2x.png in Resources */, + C6710F9F2722B20000ED888F /* voip_numpad_1.png in Resources */, 633FEF031D3CD55A0014B822 /* options_disabled@2x.png in Resources */, 633FEDA21D3CD5590014B822 /* avatar~ipad.png in Resources */, 24BFAAA1209B0630004F47A7 /* linphone_user@2x.png in Resources */, + C6710FD42722B20000ED888F /* voip_camera_on.png in Resources */, 633FEF211D3CD55A0014B822 /* presence_unregistered@2x.png in Resources */, 633FEEA71D3CD55A0014B822 /* numpad_1_over~ipad.png in Resources */, ); @@ -4090,16 +4516,20 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 20EEEF6D60A7B77C2EFF85DB /* [CP] Check Pods Manifest.lock */ = { + 068EB8CED53992A5D7A733DF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-linphone-checkManifestLockResult.txt", ); @@ -4108,60 +4538,48 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4D22DCAAC0231865D78AC1E6 /* [CP] Embed Pods Frameworks */ = { + 1E9EBAB02A694F2487E6099B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-linphone/Pods-linphone-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/bctoolbox-ios.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/bctoolbox-tester.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/bctoolbox.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/belcard.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/belle-sip.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/belr.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/lime.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/limetester.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/linphone.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/linphonetester.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/mediastreamer2.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/msamr.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/mscodec2.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/msopenh264.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/mssilk.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/mswebrtc.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/msx264.framework", - "${PODS_ROOT}/linphone-sdk/linphone-sdk/apple-darwin/Frameworks/ortp.framework", - "${BUILT_PRODUCTS_DIR}/linphone-sdk/linphonesw.framework", + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/bctoolbox-ios.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/bctoolbox-tester.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/bctoolbox.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/belcard.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/belle-sip.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/belr.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/lime.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/limetester.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphone.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphonetester.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mediastreamer2.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/msamr.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mscodec2.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/msopenh264.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mssilk.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mswebrtc.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/msx264.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ortp.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphonesw.framework", + "$(DERIVED_FILE_DIR)/Pods-msgNotificationService-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-linphone/Pods-linphone-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 2E68C0F1B7E1F6C3000F700C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-msgNotificationContent-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 6112A019243B2C8400DBD5F5 /* ShellScript */ = { @@ -4236,48 +4654,58 @@ shellPath = /bin/sh; shellScript = "$SRCROOT/Tools/git_version.sh\n"; }; - B0A561F0290F0342EACE9005 /* [CP] Check Pods Manifest.lock */ = { + D7A9CDC06B7BB5D324EA10C9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-linphone/Pods-linphone-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework", + "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/bctoolbox-ios.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/bctoolbox.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/belcard.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/belle-sip.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/belr.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/lime.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/linphone.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/linphonetester.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/mediastreamer2.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/msamr.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/mscodec2.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/msopenh264.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/mssilk.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/mswebrtc.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/msx264.framework", + "${PODS_ROOT}/../../../../../../../Volumes/dada/bc/linphone-sdk/ios/linphone-sdk/apple-darwin/Frameworks/ortp.framework", + "${BUILT_PRODUCTS_DIR}/linphone-sdk/linphonesw.framework", ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-msgNotificationContent-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/bctoolbox-ios.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/bctoolbox.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/belcard.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/belle-sip.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/belr.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/lime.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphone.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphonetester.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mediastreamer2.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/msamr.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mscodec2.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/msopenh264.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mssilk.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mswebrtc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/msx264.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ortp.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphonesw.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - CD5CF0B3FE8B6052CD8219CE /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-msgNotificationService-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-linphone/Pods-linphone-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -4289,15 +4717,27 @@ files = ( 63B81A0F1B57DA33009604A6 /* TPKeyboardAvoidingTableView.m in Sources */, CF1DE92D210A0F5D00A0A97E /* UILinphoneAudioPlayer.m in Sources */, + C6D1EC4A274D212B0091881C /* UICamSwitch.m in Sources */, 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 6135761C240E81BB005304D4 /* UIInterfaceStyleButton.m in Sources */, 8CD99A3C2090B9FA008A7CDA /* ChatConversationImdnView.m in Sources */, 1D3623260D0F684500981E51 /* LinphoneAppDelegate.m in Sources */, + C6F2D503273BAC030071BA52 /* ButtonWithStateBackgrounds.swift in Sources */, + C6C98CD027439A7F00059B55 /* VoipCallCell.swift in Sources */, + C60B66682721AFFA0026AC7D /* CallStatisticsData.swift in Sources */, C6B4444826AADA530076C517 /* SwiftUtil.swift in Sources */, 614C087A23D1A37400217F80 /* CallManager.swift in Sources */, CF15F21E20E4F9A3008B1DE6 /* UIImageViewDeletable.m in Sources */, + C6F2D4FD273A85A90071BA52 /* PausedCallOrConferenceView.swift in Sources */, + C6F2D4FF273AF01A0071BA52 /* ControlsView.swift in Sources */, + C6710F5527229D5900ED888F /* LightDarkColor.swift in Sources */, + C6F2D4F9273A4CD70071BA52 /* SharedLayoutConstants.swift in Sources */, + C6D09F3F274273FB003C2173 /* CallStatsView.swift in Sources */, 22F2508E107141E100AC9B3F /* DialerView.m in Sources */, 633756451B67D2B200E21BAD /* SideMenuView.m in Sources */, + C6F2D4F1273935860071BA52 /* CallExtensions.swift in Sources */, + C6710F5C2722AAED00ED888F /* UIDeviceExtensions.swift in Sources */, + C65A5D3027216B86005BA038 /* ActiveCallOrConferenceView.swift in Sources */, 8CD99A422090CE6F008A7CDA /* UIChatConversationImdnTableViewCell.m in Sources */, 22E0A822111C44E100B04932 /* AboutView.m in Sources */, 633671611BCBAAD200BFCBDE /* ChatConversationCreateView.m in Sources */, @@ -4305,37 +4745,38 @@ 2248E90E12F7E4CF00220D9C /* UIDigitButton.m in Sources */, 6134812F2407B35200695B41 /* AppManager.swift in Sources */, 633756391B67BAF400E21BAD /* SideMenuTableView.m in Sources */, + C6B04D63274B95D500F70559 /* VoipParticipantCell.swift in Sources */, 2214EB7A12F846B1002A5394 /* UICallButton.m in Sources */, - 6352A5751BE0D4B800594C1C /* CallSideMenuView.m in Sources */, - 2214EB8912F84EBB002A5394 /* UIHangUpButton.m in Sources */, + C683B213272276CF00D4E15C /* UIColorExtensions.swift in Sources */, + C6710F512722932600ED888F /* UIImageViewExtensions.swift in Sources */, 630CF5571AF7CE1500539F7A /* UITextField+DoneButton.m in Sources */, 2214EBF312F86360002A5394 /* UIMutedMicroButton.m in Sources */, + C6D09F4127428626003C2173 /* IceState.swift in Sources */, + C658614C273E5B5E00A0DBFC /* VoipExtraButton.swift in Sources */, 8C9C5E111F83BD97006987FA /* UIChatCreateCollectionViewCell.m in Sources */, - 22968A5F12F875C600588287 /* UISpeakerButton.m in Sources */, 63701DDF1BA32039006A9AE3 /* UIConfirmationDialog.m in Sources */, 6134812D2406CECC00695B41 /* ConfigManager.swift in Sources */, 22C755601317E59C007BC101 /* UIBluetoothButton.m in Sources */, - 22AA8B0113D83F6300B30535 /* UICamSwitch.m in Sources */, 63B8D6A21BCBF43100C12B09 /* UIChatCreateCell.m in Sources */, 636BC9971B5F921B00C754CE /* UIIconButton.m in Sources */, 63423C0A1C4501D000D9A050 /* Contact.m in Sources */, - 340751E7150F38FD00B89C47 /* UIVideoButton.m in Sources */, + C6710FE12722F0E400ED888F /* Avatar.swift in Sources */, 34216F401547EBCD00EA9777 /* VideoZoomHandler.m in Sources */, 614C087823D1A35F00217F80 /* ProviderDelegate.swift in Sources */, - D3F83EEC1582021700336684 /* CallView.m in Sources */, CF7602D7210867E800749F76 /* RecordingsListView.m in Sources */, - 63F1DF4B1BCE983200EDED90 /* CallConferenceTableView.m in Sources */, D3F83F8E15822ABE00336684 /* PhoneMainView.m in Sources */, C6A1BB3E26E882D000540D50 /* UIChatReplyBubbleView.m in Sources */, 6377AC801BDE4069007F7625 /* UIBackToCallButton.m in Sources */, + C6D09F43274288D4003C2173 /* PayloadType.swift in Sources */, 6308F9C51BF0DD6600D1234B /* XMLRPCHelper.m in Sources */, + C6F2D4F72739861F0071BA52 /* RemotelyRecording.swift in Sources */, D3ED3E871586291E006C0DE4 /* TabBarView.m in Sources */, 617C242A263022690042FB4A /* UIChatContentView.m in Sources */, D3ED3EA71587334E006C0DE4 /* HistoryListTableView.m in Sources */, 61AEBEBD2191990A00F35E7F /* DevicesListView.m in Sources */, D3ED3EB81587392C006C0DE4 /* HistoryListView.m in Sources */, + C6710FE72723234400ED888F /* OutgoingCallView.swift in Sources */, 24A345A61D95798A00881A5C /* UIShopTableCell.m in Sources */, - 8C1B67061E671826001EA2FE /* AudioHelper.m in Sources */, D35497FE15875372000081D8 /* ContactsListView.m in Sources */, 635173F91BA082A40095EB0A /* UIChatBubblePhotoCell.m in Sources */, D3549816158761D0000081D8 /* ContactsListTableView.m in Sources */, @@ -4345,71 +4786,99 @@ 6341807C1BBC103100F71761 /* ChatConversationCreateTableView.m in Sources */, 63BE7A781D75BDF6000990EF /* ShopTableView.m in Sources */, D326483815887D5200930C67 /* OrderedDictionary.m in Sources */, + C6710F4F2722903200ED888F /* RotatingSpinner.swift in Sources */, D32648441588F6FC00930C67 /* UIToggleButton.m in Sources */, - D36FB2D51589EF7C0036F6F2 /* UIPauseButton.m in Sources */, + C6C98CDF2745590500059B55 /* ConferenceExtensions.swift in Sources */, + C67C97B4274FC5EF0074A0D8 /* AudioRoutesView.swift in Sources */, + C6824FBA27219D890043D4FC /* IncomingCallView.swift in Sources */, + C6C98CD527453ED900059B55 /* ConferenceViewModel.swift in Sources */, D31C9C98158A1CDF00756B45 /* UIHistoryCell.m in Sources */, D35E7597159460580066B1C1 /* ChatsListView.m in Sources */, D35E759F159460B70066B1C1 /* SettingsView.m in Sources */, 63B81A101B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */, F03CA84318C72F1A0008889D /* UITextViewNoDefine.m in Sources */, 63B81A0D1B57DA33009604A6 /* TPKeyboardAvoidingCollectionView.m in Sources */, + C6710FD92722BD0100ED888F /* UICallTimer.swift in Sources */, 570742611D5A09B8004B9C84 /* ShopView.m in Sources */, - 63F1DF4F1BCE985F00EDED90 /* UICallConferenceCell.m in Sources */, + C65A5D3B27216CC0005BA038 /* MutableLiveData.swift in Sources */, + C6C98CCE27438A3F00059B55 /* DismissableView.swift in Sources */, D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */, 63CD4B4F1A5AAC8C00B84282 /* DTAlertView.m in Sources */, D3EA53FD159850E80037DC6B /* LinphoneManager.m in Sources */, + C60D265C272AA0BD006238BB /* UIImageExtensions.swift in Sources */, + C6D09F3D273EE467003C2173 /* BouncingCounter.swift in Sources */, C6DA657C261C950C0020CB43 /* VFSUtil.swift in Sources */, 63B81A0E1B57DA33009604A6 /* TPKeyboardAvoidingScrollView.m in Sources */, 633888451BFB2C49001D5E7B /* HPGrowingTextView.m in Sources */, 63F1DF441BCE618E00EDED90 /* UIAddressTextField.m in Sources */, D3EA540D1598528B0037DC6B /* ChatsListTableView.m in Sources */, D3EA5411159853750037DC6B /* UIChatCell.m in Sources */, - D3F26BF115986B73005F9CAB /* CallIncomingView.m in Sources */, D31B4B21159876C0002E6C72 /* UICompositeView.m in Sources */, - D31AAF5E159B3919002C6B02 /* CallPausedTableView.m in Sources */, 8C9C5E0D1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m in Sources */, 631098491D4660580041F2B3 /* CountryListView.m in Sources */, D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */, D350F20E15A43BB100149E54 /* AssistantView.m in Sources */, D3F795D615A582810077328B /* ChatConversationView.m in Sources */, + C60D265627299C94006238BB /* ControlsViewModel.swift in Sources */, D32B6E2915A5BC440033019F /* ChatConversationTableView.m in Sources */, + C6D09F4B27438707003C2173 /* CallsListView.swift in Sources */, D3A8BB7015A6C7D500F96BE5 /* UIChatBubbleTextCell.m in Sources */, + C683B20E2722702300D4E15C /* VoipTheme.swift in Sources */, + C6278497273C21E1002FAA29 /* LocalVideoView.swift in Sources */, 63D11C531C3D501200E8FCEE /* Log.m in Sources */, D3128FE115AABC7E00A2147A /* ContactDetailsView.m in Sources */, 6135761F240E81D0005304D4 /* UIInterfaceStyleToggleButton.m in Sources */, + C6B04D67274BD61300F70559 /* VoipConferenceActiveSpeakerView.swift in Sources */, D37C639B15AADEF6009D0BAC /* ContactDetailsTableView.m in Sources */, 63E59A3F1ADE70D900646FB3 /* InAppProductsManager.m in Sources */, + C67C97B8274FD76B0074A0D8 /* AudioRouteUtils.swift in Sources */, + C6C98CE1274568F800059B55 /* VoipConferenceGridView.swift in Sources */, D3C6526715AC1A8F0092A874 /* UIContactDetailsCell.m in Sources */, 631348301B6F7B6600C6BDCB /* UIRoundBorderedButton.m in Sources */, C90FAA7915AF54E6002091CB /* HistoryDetailsView.m in Sources */, 63FB30351A680E73008CA393 /* UIRoundedImageView.m in Sources */, 635775251B6673EC00C8B704 /* HistoryDetailsTableView.m in Sources */, + C6C98CD727453F9600059B55 /* ConferenceParticipantData.swift in Sources */, 63C441C31BBC23ED0053DC5E /* UIAssistantTextField.m in Sources */, - 6346100F1B61409800548952 /* CallOutgoingView.m in Sources */, + C6B04D69274BD6A100F70559 /* VoipActiveSpeakerParticipantCell.swift in Sources */, + C65A5D45272196AE005BA038 /* OptionalExtensions.swift in Sources */, D35860D615B549B500513429 /* Utils.m in Sources */, D3F7998115BD32370018C273 /* TPMultiLayoutViewController.m in Sources */, D3807FBF15C28940005BE9BC /* DCRoundSwitch.m in Sources */, D3807FC115C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */, + C6B04D61274B954500F70559 /* ParticipantsListView.swift in Sources */, 61CCC3DF21933B580060EDEA /* UIDeviceCell.m in Sources */, 6306440E1BECB08500134C72 /* FirstLoginView.m in Sources */, D3807FC315C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */, CF7602E221086EB200749F76 /* RecordingsListTableView.m in Sources */, D3807FC515C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */, + C6586149273E595700A0DBFC /* VoipExtraButtonsView.swift in Sources */, 633E41821D74259000320475 /* AssistantLinkView.m in Sources */, + C6710F5727229DEE00ED888F /* TextStyle.swift in Sources */, D3807FE815C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */, D3807FEC15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */, 8CA70AE41F9E39E400A3D2EB /* UIChatConversationInfoTableViewCell.m in Sources */, D3807FEE15C2894A005BE9BC /* IASKSettingsReader.m in Sources */, + C6C65E8B2727274A00E48FC6 /* NumpadView.swift in Sources */, + C6F2D501273B0EFC0071BA52 /* VoipDialog.swift in Sources */, + C6710F53272297C400ED888F /* VoipTexts.swift in Sources */, D3807FF015C2894A005BE9BC /* IASKSettingsStore.m in Sources */, + C6710FEB2726874D00ED888F /* ButtonTheme.swift in Sources */, 8CA70AD11F9E0AE100A3D2EB /* ChatConversationInfoView.m in Sources */, D3807FF215C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */, D3807FF415C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */, + C6710FDC2722C3BB00ED888F /* UIVIewExtensions.swift in Sources */, + C6F2D4F32739475C0071BA52 /* ActiveCallView.swift in Sources */, 639E9C801C0DB13D00019A75 /* UICheckBoxTableView.m in Sources */, CF7602E72108759A00749F76 /* UIRecordingCell.m in Sources */, + C6C98CD22743FD0B00059B55 /* VoipCallContextMenu.swift in Sources */, D3807FF615C2894A005BE9BC /* IASKSpecifier.m in Sources */, + C6710FE92723DD7D00ED888F /* CallControlButton.swift in Sources */, D3807FF815C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */, D3807FFA15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */, D3807FFC15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */, + C6F2D4EF27392D970071BA52 /* CallsViewModel.swift in Sources */, + C6C65E89272723DC00E48FC6 /* UIVIewControllerExtensions.swift in Sources */, D3807FFE15C2894A005BE9BC /* IASKSlider.m in Sources */, D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */, D380800215C2894A005BE9BC /* IASKTextField.m in Sources */, @@ -4417,14 +4886,23 @@ C64A854E2667B67200252AD2 /* EphemeralSettingsView.m in Sources */, 8C92ABF31FA773E50006FB5D /* UIChatNotifiedEventCell.m in Sources */, 633FEF581D3CD5E00014B822 /* UIAvatarPresence.m in Sources */, + C6C98CDB274541E400059B55 /* ConferenceParticipantDeviceData.swift in Sources */, 637157A11B283FE200C91677 /* FileTransferDelegate.m in Sources */, + C6710FDE2722D44B00ED888F /* IncomingOuntgoingCommonView.swift in Sources */, D378AB2A15DCDB4A0098505D /* ImagePickerView.m in Sources */, + C6710F592722A9B800ED888F /* StyledLabel.swift in Sources */, 22405F001601C19200B92522 /* ImageView.m in Sources */, - 63BC49E21BA2CDFC004EC273 /* UICallPausedCell.m in Sources */, + C60D265827299F70006238BB /* CoreExtensions.swift in Sources */, + C6710FE527230B5800ED888F /* AddressExtensions.swift in Sources */, D37EE162160377D7003608A6 /* DTActionSheet.m in Sources */, + C67C97B1274FB4C10074A0D8 /* VoipConferenceDisplayModeSelectionView.swift in Sources */, + C6D52B45274648E500904660 /* VoipGridParticipantCell.swift in Sources */, D306459E1611EC2A00BB571E /* UILoadingImageView.m in Sources */, 6381DA7D1C1AD5EA00DF3BBD /* UIBouncingView.m in Sources */, + C6C98CDD274547C500059B55 /* ParticipantExtensions.swift in Sources */, D37E3ECD1619C27A0087659A /* CAAnimation+Blocks.m in Sources */, + C6F2D505273BB3BB0071BA52 /* UIApplication+Extension.swift in Sources */, + C65A5D3F27216E3A005BA038 /* CallData.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4525,16 +5003,6 @@ name = "SideMenuView~ipad.xib"; sourceTree = ""; }; - 634610101B6140A500548952 /* CallOutgoingView.xib */ = { - isa = PBXVariantGroup; - children = ( - 634610111B6140A500548952 /* Base */, - 8CBD7BB420B6B86B00E5DCC0 /* fr */, - 6187B1BA24B3271700D580FB /* hu */, - ); - name = CallOutgoingView.xib; - sourceTree = ""; - }; 636316D31A1DEBCB0009B839 /* AboutView.xib */ = { isa = PBXVariantGroup; children = ( @@ -4567,16 +5035,6 @@ name = "DialerView~ipad.xib"; sourceTree = ""; }; - 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */ = { - isa = PBXVariantGroup; - children = ( - 638F1A871C2167C2004B8E02 /* Base */, - 8CBD7BB620B6B86D00E5DCC0 /* fr */, - 6187B1BC24B3271800D580FB /* hu */, - ); - name = "CallView~ipad.xib"; - sourceTree = ""; - }; 638F1A8F1C21993D004B8E02 /* UICompositeView~ipad.xib */ = { isa = PBXVariantGroup; children = ( @@ -4642,16 +5100,6 @@ name = FirstLoginView.xib; sourceTree = ""; }; - 639E9C9F1C0DB7DF00019A75 /* UICallPausedCell.xib */ = { - isa = PBXVariantGroup; - children = ( - 639E9C9E1C0DB7DF00019A75 /* Base */, - 8CBD7BC620B6B87900E5DCC0 /* fr */, - 6187B1CC24B3271E00D580FB /* hu */, - ); - name = UICallPausedCell.xib; - sourceTree = ""; - }; 639E9CA21C0DB7E500019A75 /* UIChatBubblePhotoCell.xib */ = { isa = PBXVariantGroup; children = ( @@ -4756,16 +5204,6 @@ name = AssistantLinkView.xib; sourceTree = ""; }; - 63F1DF531BCE986A00EDED90 /* UICallConferenceCell.xib */ = { - isa = PBXVariantGroup; - children = ( - 63F1DF521BCE986A00EDED90 /* Base */, - 8CBD7BC520B6B87800E5DCC0 /* fr */, - 6187B1CB24B3271E00D580FB /* hu */, - ); - name = UICallConferenceCell.xib; - sourceTree = ""; - }; 8CBD7BA220B6B7FD00E5DCC0 /* ChatConversationInfoView.xib */ = { isa = PBXVariantGroup; children = ( @@ -4922,18 +5360,6 @@ name = HistoryListView.xib; sourceTree = ""; }; - D38187DC15FE347700C3EDCA /* CallIncomingView.xib */ = { - isa = PBXVariantGroup; - children = ( - F09548241883F15400E8A69B /* Base */, - F09548481883F55800E8A69B /* ru */, - F0AF06FD1A24BA770086C9C1 /* ar */, - 8CBD7BB320B6B86B00E5DCC0 /* fr */, - 6187B1B924B3271700D580FB /* hu */, - ); - name = CallIncomingView.xib; - sourceTree = ""; - }; D38187E015FE348A00C3EDCA /* AssistantView.xib */ = { isa = PBXVariantGroup; children = ( @@ -4959,18 +5385,6 @@ path = LinphoneUI; sourceTree = ""; }; - D381881C15FE3FCA00C3EDCA /* CallView.xib */ = { - isa = PBXVariantGroup; - children = ( - F09548231883F15400E8A69B /* Base */, - F09548461883F54200E8A69B /* ru */, - F0AF06FC1A24BA770086C9C1 /* ar */, - 8CBD7BB520B6B86C00E5DCC0 /* fr */, - 6187B1BB24B3271700D580FB /* hu */, - ); - name = CallView.xib; - sourceTree = ""; - }; D3D5126A160B3A8E00946DF8 /* AssistantViewScreens.xib */ = { isa = PBXVariantGroup; children = ( @@ -5007,7 +5421,7 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 799BA1104845EB01ACE764D8 /* Pods-linphone.debug.xcconfig */; + baseConfigurationReference = 53432234870660E9876CBCA8 /* Pods-linphone.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; @@ -5050,7 +5464,10 @@ INFOPLIST_FILE = "linphone-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)"; + LIBRARY_SEARCH_PATHS = ( + "$(BUILT_PRODUCTS_DIR)", + "$(inherited)", + ); LINK_WITH_STANDARD_LIBRARIES = YES; MARKETING_VERSION = 4.4.0; OTHER_CFLAGS = ( @@ -5059,7 +5476,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"5.1.0-alpha.75+d4a0bd2\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.2.0-alpha.20+3cffbc5\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5072,6 +5489,7 @@ SWIFT_OBJC_BRIDGING_HEADER = "Classes/linphone-Bridging-Header.h"; SWIFT_OBJC_INTERFACE_HEADER_NAME = "linphoneapp-Swift.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_PRECOMPILE_BRIDGING_HEADER = YES; SWIFT_VERSION = 5.0; WARNING_CFLAGS = ( "-Werror=objc-method-access", @@ -5133,7 +5551,7 @@ }; 228B19A71302902F00F154D3 /* DistributionAdhoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FE7D89A821FDC1BCA9BB9F8F /* Pods-linphone.distributionadhoc.xcconfig */; + baseConfigurationReference = 22D3BF4C45858F6B07F4D2A4 /* Pods-linphone.distributionadhoc.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; @@ -5173,7 +5591,10 @@ INFOPLIST_FILE = "linphone-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)"; + LIBRARY_SEARCH_PATHS = ( + "$(BUILT_PRODUCTS_DIR)", + "$(inherited)", + ); LINK_WITH_STANDARD_LIBRARIES = YES; MARKETING_VERSION = 4.4.0; OTHER_CFLAGS = ( @@ -5182,7 +5603,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"5.1.0-alpha.75+d4a0bd2\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.2.0-alpha.20+3cffbc5\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5194,6 +5615,7 @@ STRIP_SWIFT_SYMBOLS = NO; SWIFT_OBJC_BRIDGING_HEADER = "Classes/linphone-Bridging-Header.h"; SWIFT_OBJC_INTERFACE_HEADER_NAME = "linphoneapp-Swift.h"; + SWIFT_PRECOMPILE_BRIDGING_HEADER = YES; SWIFT_VERSION = 5.0; WARNING_CFLAGS = ( "-Werror=objc-method-access", @@ -5255,7 +5677,7 @@ }; 22F3D55613CC3C9100A0DA02 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FEAFB5AD0E3AA409BBD1136E /* Pods-linphone.release.xcconfig */; + baseConfigurationReference = 0DF941C97B75E7BA39A90600 /* Pods-linphone.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; @@ -5295,7 +5717,10 @@ INFOPLIST_FILE = "linphone-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)"; + LIBRARY_SEARCH_PATHS = ( + "$(BUILT_PRODUCTS_DIR)", + "$(inherited)", + ); LINK_WITH_STANDARD_LIBRARIES = YES; MARKETING_VERSION = 4.4.0; OTHER_CFLAGS = ( @@ -5304,7 +5729,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"5.1.0-alpha.75+d4a0bd2\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.2.0-alpha.20+3cffbc5\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5316,6 +5741,7 @@ STRIP_SWIFT_SYMBOLS = NO; SWIFT_OBJC_BRIDGING_HEADER = "Classes/linphone-Bridging-Header.h"; SWIFT_OBJC_INTERFACE_HEADER_NAME = "linphoneapp-Swift.h"; + SWIFT_PRECOMPILE_BRIDGING_HEADER = YES; SWIFT_VERSION = 5.0; WARNING_CFLAGS = ( "-Werror=objc-method-access", @@ -5376,7 +5802,7 @@ }; 22F51EE8107FA53D00F98953 /* Distribution */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38DF35D11A7C0F45E990C83A /* Pods-linphone.distribution.xcconfig */; + baseConfigurationReference = 79B41078A602EFB886981917 /* Pods-linphone.distribution.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; @@ -5416,7 +5842,10 @@ INFOPLIST_FILE = "linphone-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)"; + LIBRARY_SEARCH_PATHS = ( + "$(BUILT_PRODUCTS_DIR)", + "$(inherited)", + ); LINK_WITH_STANDARD_LIBRARIES = YES; MARKETING_VERSION = 4.4.0; OTHER_CFLAGS = ( @@ -5425,7 +5854,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"5.1.0-alpha.75+d4a0bd2\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.2.0-alpha.20+3cffbc5\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5437,6 +5866,7 @@ STRIP_SWIFT_SYMBOLS = NO; SWIFT_OBJC_BRIDGING_HEADER = "Classes/linphone-Bridging-Header.h"; SWIFT_OBJC_INTERFACE_HEADER_NAME = "linphoneapp-Swift.h"; + SWIFT_PRECOMPILE_BRIDGING_HEADER = YES; SWIFT_VERSION = 5.0; WARNING_CFLAGS = ( "-Werror=objc-method-access", @@ -5662,7 +6092,7 @@ }; EA5F25E2232BD3E300475F2E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ADCA571A7CF61077747BFE53 /* Pods-msgNotificationService.debug.xcconfig */; + baseConfigurationReference = C589627B9D9D2A4F9C816051 /* Pods-msgNotificationService.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -5718,7 +6148,7 @@ }; EA5F25E3232BD3E300475F2E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 904C1EC75CB9E03374AAA802 /* Pods-msgNotificationService.release.xcconfig */; + baseConfigurationReference = 063D57B2E4769739DC5DA5C0 /* Pods-msgNotificationService.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -5770,7 +6200,7 @@ }; EA5F25E4232BD3E300475F2E /* Distribution */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F4BE1A2318FC69D799C34F0A /* Pods-msgNotificationService.distribution.xcconfig */; + baseConfigurationReference = B9F41097CE0124A05554DB9C /* Pods-msgNotificationService.distribution.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -5822,7 +6252,7 @@ }; EA5F25E5232BD3E300475F2E /* DistributionAdhoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8FD0D10102F0A8922703B8A4 /* Pods-msgNotificationService.distributionadhoc.xcconfig */; + baseConfigurationReference = 3411568BE5527EB500F75EBB /* Pods-msgNotificationService.distributionadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; @@ -5874,7 +6304,7 @@ }; EA8CB835239F96CA00C330CC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8B4C43A28E90775F6FCA2CEE /* Pods-msgNotificationContent.debug.xcconfig */; + baseConfigurationReference = 1060E68152C51FCE5ACBF779 /* Pods-msgNotificationContent.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -5929,7 +6359,7 @@ }; EA8CB836239F96CA00C330CC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34027665305514025971F85C /* Pods-msgNotificationContent.release.xcconfig */; + baseConfigurationReference = 02DBDD5A09F46796AEC2485B /* Pods-msgNotificationContent.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -5980,7 +6410,7 @@ }; EA8CB837239F96CA00C330CC /* Distribution */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E40C9A7D22675584396C0A3D /* Pods-msgNotificationContent.distribution.xcconfig */; + baseConfigurationReference = 507103607396F28FF4427108 /* Pods-msgNotificationContent.distribution.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -6031,7 +6461,7 @@ }; EA8CB838239F96CA00C330CC /* DistributionAdhoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BAD0A9494E833034EB559687 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */; + baseConfigurationReference = 6150F32455334A0A7B3D46C8 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; diff --git a/linphone_Prefix.pch b/linphone_Prefix.pch index 6f87a986f..389c6e7d3 100644 --- a/linphone_Prefix.pch +++ b/linphone_Prefix.pch @@ -12,7 +12,6 @@ #import "Contact.h" #import "UIToggleButton.h" -#import "UISpeakerButton.h" #import "UIBluetoothButton.h" #import "UIMutedMicroButton.h"