diff --git a/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift b/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift
index bc807f083..cdd68881a 100644
--- a/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift
+++ b/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift
@@ -1161,7 +1161,7 @@ class ChatConversationViewSwift: BackActionsNavigationView, PHPickerViewControll
let viewCell: UIView = UIView(frame: cell.contentView.frame)
cell.addSubview(viewCell)
- let deleteButton = CallControlButton(width: 22, height: 22, buttonTheme:VoipTheme.nav_black_button("reply_cancel"))
+ let deleteButton = CallControlButton(width: 22, height: 22, buttonTheme:VoipTheme.nav_color_button("reply_cancel"))
deleteButton.onClickAction = {
ChatConversationViewModel.sharedModel.mediaCollectionView.remove(at: indexPath.row)
diff --git a/Classes/Swift/Chat/Views/MultilineMessageCell.swift b/Classes/Swift/Chat/Views/MultilineMessageCell.swift
index 6aba05cbe..7e799ffe5 100644
--- a/Classes/Swift/Chat/Views/MultilineMessageCell.swift
+++ b/Classes/Swift/Chat/Views/MultilineMessageCell.swift
@@ -530,8 +530,8 @@ class MultilineMessageCell: SwipeCollectionViewCell, UICollectionViewDataSource,
}
func initPlayerAudio(message: ChatMessage){
- let recordingPlayButton = CallControlButton(width: 40, height: 40, buttonTheme:VoipTheme.nav_black_button("vr_play"))
- let recordingStopButton = CallControlButton(width: 40, height: 40, buttonTheme:VoipTheme.nav_black_button("vr_stop"))
+ let recordingPlayButton = CallControlButton(width: 40, height: 40, buttonTheme:VoipTheme.nav_color_button("vr_play"))
+ let recordingStopButton = CallControlButton(width: 40, height: 40, buttonTheme:VoipTheme.nav_color_button("vr_stop"))
let recordingWaveView = UIProgressView()
let recordingDurationTextView = StyledLabel(VoipTheme.chat_conversation_recording_duration)
let recordingWaveImage = UIImageView(image: UIImage(named: "vr_wave.png"))
diff --git a/Classes/Swift/Conference/Data/Mode.swift b/Classes/Swift/Conference/Data/Mode.swift
new file mode 100644
index 000000000..bdfbe71cb
--- /dev/null
+++ b/Classes/Swift/Conference/Data/Mode.swift
@@ -0,0 +1,31 @@
+/*
+ * 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
+
+struct Mode : Comparable {
+ static func < (lhs: Mode, rhs: Mode) -> Bool {
+ return lhs.value < rhs.value
+ }
+
+ let value: Int
+ let display: String
+}
diff --git a/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift b/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift
index 0dc8c50e2..9a9b9ab37 100644
--- a/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift
+++ b/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift
@@ -30,6 +30,9 @@ class ConferenceSchedulingViewModel {
let subject = MutableLiveData()
let description = MutableLiveData()
+ let mode = MutableLiveData()
+ static let modeList: [Mode] = computeModeList()
+
let scheduleForLater = MutableLiveData()
let scheduledDate = MutableLiveData()
let scheduledTime = MutableLiveData()
@@ -55,6 +58,7 @@ class ConferenceSchedulingViewModel {
let continueEnabled: MutableLiveData = MutableLiveData()
let selectedAddresses = MutableLiveData<[Address]>([])
+ let selectedSpeakerAddresses = MutableLiveData<[Address]>([])
private var conferenceScheduler: ConferenceScheduler? = nil
@@ -156,6 +160,10 @@ class ConferenceSchedulingViewModel {
sendInviteViaEmail.value = false
scheduledDate.value = nil
scheduledTime.value = nil
+
+ mode.value = ConferenceSchedulingViewModel.modeList.indices.filter {
+ ConferenceSchedulingViewModel.modeList[$0].value == 0
+ }.first
scheduledTimeZone.value = ConferenceSchedulingViewModel.timeZones.indices.filter {
ConferenceSchedulingViewModel.timeZones[$0].timeZone.identifier == NSTimeZone.default.identifier
@@ -243,6 +251,10 @@ class ConferenceSchedulingViewModel {
}.sorted()
}
+ private static func computeModeList() -> [Mode] {
+ return [Mode(value: 0, display: "Meeting"), Mode(value: 1, display: "Broadcast")]
+ }
+
private static func computeDurationList() -> [Duration] {
return [Duration(value: 30, display: "30min"), Duration(value: 60, display: "1h"), Duration(value: 120, display: "2h")]
}
@@ -258,5 +270,12 @@ class ConferenceSchedulingViewModel {
return nil
}
+ func getMode() -> Int {
+ if mode.value != nil {
+ return mode.value!
+ } else {
+ return 0
+ }
+ }
}
diff --git a/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift b/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift
index 5ba20527a..33d78af51 100644
--- a/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift
+++ b/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift
@@ -27,6 +27,9 @@ import SVProgressHUD
let CONFERENCE_CREATION_TIME_OUT_SEC = 15.0
+ let viaChatLabel = StyledLabel(VoipTheme.conference_scheduling_font, VoipTexts.conference_schedule_send_invite_chat_summary)
+ let speakersLabel = StyledLabel(VoipTheme.conference_scheduling_font, " "+VoipTexts.conference_schedule_speakers_list)
+ let speakersListTableView = UITableView()
let participantsListTableView = UITableView()
let datePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDate,pickerMode: .date, readOnly:true)
@@ -52,7 +55,7 @@ import SVProgressHUD
},nextAction: {
},
nextActionEnableCondition: ConferenceSchedulingViewModel.shared.continueEnabled,
- title:VoipTexts.conference_schedule_summary)
+ title: ConferenceSchedulingViewModel.shared.getMode() == 0 ? VoipTexts.conference_schedule_summary : VoipTexts.conference_schedule_broadcast_summary)
super.nextButton.isHidden = true
let subjectLabel = StyledLabel(VoipTheme.conference_scheduling_font, VoipTexts.conference_schedule_subject_title)
@@ -130,18 +133,34 @@ import SVProgressHUD
scheduleForm.addSubview(descriptionInput)
// Sending method
- let viaChatLabel = StyledLabel(VoipTheme.conference_scheduling_font, VoipTexts.conference_schedule_send_invite_chat_summary)
contentView.addSubview(viaChatLabel)
viaChatLabel.matchParentSideBorders(insetedByDx: form_margin).alignUnder(view: schedulingStack,withMargin: 2*form_margin).done()
viaChatLabel.numberOfLines = 2
ConferenceSchedulingViewModel.shared.sendInviteViaChat.readCurrentAndObserve { (sendChat) in
- viaChatLabel.isHidden = sendChat != true || ConferenceSchedulingViewModel.shared.scheduleForLater.value != true
+ self.viaChatLabel.isHidden = sendChat != true || ConferenceSchedulingViewModel.shared.scheduleForLater.value != true
}
-
+
+ // Speaker
+ contentView.addSubview(speakersLabel)
+ speakersLabel.matchParentSideBorders().height(form_input_height).alignUnder(view: viaChatLabel,withMargin: form_margin).done()
+ speakersLabel.textAlignment = .left
+
+
+ contentView.addSubview(speakersListTableView)
+ speakersListTableView.isScrollEnabled = false
+ speakersListTableView.dataSource = self
+ speakersListTableView.register(VoipSpeakerCell.self, forCellReuseIdentifier: "VoipSpeakerCellSSchedule")
+ speakersListTableView.allowsSelection = false
+ if #available(iOS 15.0, *) {
+ speakersListTableView.allowsFocus = false
+ }
+ speakersListTableView.separatorStyle = .singleLine
+ speakersListTableView.backgroundColor = .clear
+
// Participants
let participantsLabel = StyledLabel(VoipTheme.conference_scheduling_font, " "+VoipTexts.conference_schedule_participants_list)
contentView.addSubview(participantsLabel)
- participantsLabel.matchParentSideBorders().height(form_input_height).alignUnder(view: viaChatLabel,withMargin: form_margin).done()
+ participantsLabel.matchParentSideBorders().height(form_input_height).alignUnder(view: speakersListTableView,withMargin: form_margin).done()
participantsLabel.textAlignment = .left
@@ -156,6 +175,23 @@ import SVProgressHUD
participantsListTableView.separatorStyle = .singleLine
participantsListTableView.backgroundColor = .clear
+ ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.readCurrentAndObserve { (addresses) in
+ self.speakersListTableView.reloadData()
+ self.speakersListTableView.removeConstraints().done()
+ self.speakersListTableView.matchParentSideBorders().alignUnder(view: self.speakersLabel,withMargin: self.form_margin).done()
+ self.speakersListTableView.height((addresses!.count > 0 ? Double(addresses!.count) : 0.5) * VoipParticipantCell.cell_height).done()
+ if addresses!.count == 0 {
+ let emptyLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
+ emptyLabel.text = VoipTexts.conference_schedule_speakers_list_empty
+ emptyLabel.textAlignment = NSTextAlignment.center
+ self.speakersListTableView.backgroundView = emptyLabel
+ self.speakersListTableView.separatorStyle = UITableViewCell.SeparatorStyle.none
+ self.speakersListTableView.backgroundView?.isHidden = false
+ } else {
+ self.speakersListTableView.backgroundView?.isHidden = true
+ }
+ }
+
ConferenceSchedulingViewModel.shared.selectedAddresses.readCurrentAndObserve { (addresses) in
self.participantsListTableView.reloadData()
self.participantsListTableView.removeConstraints().done()
@@ -209,10 +245,10 @@ import SVProgressHUD
}
ConferenceSchedulingViewModel.shared.scheduleForLater.readCurrentAndObserve { (later) in
self.createButton.title = ConferenceSchedulingViewModel.shared.scheduleForLater.value == true ? ConferenceSchedulingViewModel.shared.existingConfInfo.value != nil ? VoipTexts.conference_schedule_edit.uppercased() : VoipTexts.conference_schedule_start.uppercased() : VoipTexts.conference_group_call_create.uppercased()
- viaChatLabel.isHidden = later != true || ConferenceSchedulingViewModel.shared.sendInviteViaChat.value != true
- viaChatLabel.removeConstraints().matchParentSideBorders(insetedByDx: self.form_margin).alignUnder(view: schedulingStack,withMargin: (viaChatLabel.isHidden ? 0 : 1)*self.form_margin).done()
- if (viaChatLabel.isHidden) {
- viaChatLabel.height(0).done()
+ self.viaChatLabel.isHidden = later != true || ConferenceSchedulingViewModel.shared.sendInviteViaChat.value != true
+ self.viaChatLabel.removeConstraints().matchParentSideBorders(insetedByDx: self.form_margin).alignUnder(view: schedulingStack,withMargin: (self.viaChatLabel.isHidden ? 0 : 1)*self.form_margin).done()
+ if (self.viaChatLabel.isHidden) {
+ self.viaChatLabel.height(0).done()
}
self.createButton.addSidePadding()
@@ -220,6 +256,8 @@ import SVProgressHUD
UIDeviceBridge.displayModeSwitched.readCurrentAndObserve { _ in
self.view.backgroundColor = VoipTheme.voipBackgroundBWColor.get()
+ self.speakersLabel.backgroundColor = VoipTheme.voipFormBackgroundColor.get()
+ self.speakersListTableView.separatorColor = VoipTheme.separatorColor.get()
participantsLabel.backgroundColor = VoipTheme.voipFormBackgroundColor.get()
self.participantsListTableView.separatorColor = VoipTheme.separatorColor.get()
}
@@ -227,6 +265,8 @@ import SVProgressHUD
}
override func viewWillAppear(_ animated: Bool) {
+ titleLabel.text = ConferenceSchedulingViewModel.shared.getMode() == 0 ? VoipTexts.conference_schedule_summary : VoipTexts.conference_schedule_broadcast_summary
+
datePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDate
timeZoneValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledTimeZone.value!)
durationValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledDuration.value!)
@@ -243,6 +283,35 @@ import SVProgressHUD
scheduleForm.removeConstraints().matchParentSideBorders().wrapContentY().done()
createButton.addSidePadding()
+
+ speakersLabel.removeConstraints().matchParentSideBorders().height(form_input_height).alignUnder(view: viaChatLabel,withMargin: form_margin).done()
+
+ speakersListTableView.removeConstraints().done()
+ speakersListTableView.matchParentSideBorders().alignUnder(view: self.speakersLabel,withMargin: self.form_margin).done()
+ speakersListTableView.height(Double(ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value!.count) * VoipParticipantCell.cell_height).done()
+
+ if ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value?.count == 0 {
+ self.speakersListTableView.reloadData()
+ self.speakersListTableView.removeConstraints().done()
+ self.speakersListTableView.matchParentSideBorders().alignUnder(view: self.speakersLabel,withMargin: self.form_margin).done()
+ self.speakersListTableView.height(0.5 * VoipParticipantCell.cell_height).done()
+ let emptyLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
+ emptyLabel.text = VoipTexts.conference_schedule_speakers_list_empty
+ emptyLabel.textAlignment = NSTextAlignment.center
+ self.speakersListTableView.backgroundView = emptyLabel
+ self.speakersListTableView.separatorStyle = UITableViewCell.SeparatorStyle.none
+ }
+
+ if ConferenceSchedulingViewModel.shared.getMode() == 0 {
+ speakersLabel.isHidden = true
+ speakersListTableView.isHidden = true
+ speakersLabel.height(0).done()
+ speakersListTableView.height(0).done()
+ } else {
+ speakersLabel.isHidden = false
+ speakersListTableView.isHidden = false
+ }
+
super.viewWillAppear(animated)
}
@@ -251,6 +320,13 @@ import SVProgressHUD
func goBackParticipantsListSelection() {
let view: ChatConversationCreateView = VIEW(ChatConversationCreateView.compositeViewDescription())
view.unfragmentCompositeDescription()
+
+ ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value!.forEach { address in
+ ConferenceSchedulingViewModel.shared.selectedAddresses.value?.append(address)
+ }
+
+ ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value!.removeAll()
+
let addresses = ConferenceSchedulingViewModel.shared.selectedAddresses.value!.map { (address) in String(address.asStringUriOnly()) }
view.tableController.contactsGroup = (addresses as NSArray).mutableCopy() as? NSMutableArray
view.tableController.notFirstTime = true
@@ -271,22 +347,69 @@ import SVProgressHUD
// TableView datasource delegate
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- guard let participants = ConferenceSchedulingViewModel.shared.selectedAddresses.value else {
- return 0
+ if(tableView == speakersListTableView){
+ guard let speakers = ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value else {
+ return 0
+ }
+ return speakers.count
+ } else {
+ guard let participants = ConferenceSchedulingViewModel.shared.selectedAddresses.value else {
+ return 0
+ }
+ return participants.count
}
- return participants.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell:VoipParticipantCell = tableView.dequeueReusableCell(withIdentifier: "VoipParticipantCellSSchedule") as! VoipParticipantCell
- guard let participant = ConferenceSchedulingViewModel.shared.selectedAddresses.value?[indexPath.row] else {
+ if(tableView == speakersListTableView){
+ let cell:VoipSpeakerCell = tableView.dequeueReusableCell(withIdentifier: "VoipSpeakerCellSSchedule") as! VoipSpeakerCell
+ guard let speaker = ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value?[indexPath.row] else {
+ return cell
+ }
+ cell.selectionStyle = .none
+ cell.scheduleConfSpeakerAddress = speaker
+ cell.limeBadge.isHidden = ConferenceSchedulingViewModel.shared.isEncrypted.value != true
+
+ cell.deleteButton.addTarget(self, action: #selector(deleteButtonPressed), for: .touchUpInside)
+ cell.deleteButton.tag = indexPath.row
+
+ return cell
+ } else {
+ let cell:VoipParticipantCell = tableView.dequeueReusableCell(withIdentifier: "VoipParticipantCellSSchedule") as! VoipParticipantCell
+ guard let participant = ConferenceSchedulingViewModel.shared.selectedAddresses.value?[indexPath.row] else {
+ return cell
+ }
+ cell.selectionStyle = .none
+ cell.scheduleConfParticipantAddress = participant
+ cell.limeBadge.isHidden = ConferenceSchedulingViewModel.shared.isEncrypted.value != true
+
+ if ConferenceSchedulingViewModel.shared.getMode() == 0 {
+ cell.addButton.isHidden = true
+ } else {
+ cell.addButton.isHidden = false
+ cell.addButton.addTarget(self, action: #selector(addButtonPressed), for: .touchUpInside)
+ cell.addButton.tag = indexPath.row
+ }
return cell
}
- cell.selectionStyle = .none
- cell.scheduleConfParticipantAddress = participant
- cell.limeBadge.isHidden = ConferenceSchedulingViewModel.shared.isEncrypted.value != true
- return cell
}
+ @objc func addButtonPressed(sender:UIButton!) {
+ if(ConferenceSchedulingViewModel.shared.selectedAddresses.value?[sender.tag] != nil) {
+ ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value?.append((ConferenceSchedulingViewModel.shared.selectedAddresses.value?[sender.tag])!)
+ ConferenceSchedulingViewModel.shared.selectedAddresses.value?.remove(at: sender.tag)
+ }
+ speakersListTableView.reloadData()
+ participantsListTableView.reloadData()
+ }
+
+ @objc func deleteButtonPressed(sender:UIButton!) {
+ if(ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value?[sender.tag] != nil) {
+ ConferenceSchedulingViewModel.shared.selectedAddresses.value?.append((ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value?[sender.tag])!)
+ ConferenceSchedulingViewModel.shared.selectedSpeakerAddresses.value?.remove(at: sender.tag)
+ }
+ speakersListTableView.reloadData()
+ participantsListTableView.reloadData()
+ }
}
diff --git a/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift b/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift
index 42e2ee07c..598e13a44 100644
--- a/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift
+++ b/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift
@@ -30,6 +30,7 @@ import IQKeyboardManager
static func compositeViewDescription() -> UICompositeViewDescription! { return compositeDescription }
func compositeViewDescription() -> UICompositeViewDescription! { return type(of: self).compositeDescription }
+ let modeValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.mode,options: ConferenceSchedulingViewModel.modeList.map({ (mode: Mode) -> String in mode.display}))
let datePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDate,pickerMode: .date)
let timeZoneValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.scheduledTimeZone,options: ConferenceSchedulingViewModel.timeZones.map({ (tzd: TimeZoneData) -> String in tzd.descWithOffset()}))
let durationValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.scheduledDuration,options: ConferenceSchedulingViewModel.durationList.map({ (duration: Duration) -> String in duration.display}))
@@ -81,10 +82,18 @@ import IQKeyboardManager
schedulingStack.addArrangedSubview(scheduleForm)
scheduleForm.matchParentSideBorders().done()
+ // Mode
+ let modeLabel = StyledLabel(VoipTheme.conference_scheduling_font, VoipTexts.conference_schedule_mode)
+ scheduleForm.addSubview(modeLabel)
+ modeLabel.alignParentTop(withMargin: form_margin).matchParentSideBorders(insetedByDx: form_margin).done()
+
+ scheduleForm.addSubview(modeValue)
+ modeValue.alignUnder(view: modeLabel, withMargin: form_margin).matchParentSideBorders(insetedByDx: form_margin).done()
+
// Left column (Date & Time)
let leftColumn = UIView()
scheduleForm.addSubview(leftColumn)
- leftColumn.matchParentWidthDividedBy(2.2).alignParentLeft(withMargin: form_margin).alignParentTop(withMargin: form_margin).done()
+ leftColumn.matchParentWidthDividedBy(2.2).alignParentLeft(withMargin: form_margin).alignUnder(view: modeValue, withMargin: form_margin).done()
let dateLabel = StyledLabel(VoipTheme.conference_scheduling_font, VoipTexts.conference_schedule_date)
dateLabel.addIndicatorIcon(iconName: "voip_mandatory")
@@ -108,7 +117,7 @@ import IQKeyboardManager
// Right column (Duration & Timezone)
let rightColumn = UIView()
scheduleForm.addSubview(rightColumn)
- rightColumn.matchParentWidthDividedBy(2.2).alignParentRight(withMargin: form_margin).alignParentTop().done()
+ rightColumn.matchParentWidthDividedBy(2.2).alignParentRight(withMargin: form_margin).alignUnder(view: modeValue, withMargin: form_margin).done()
let durationLabel = StyledLabel(VoipTheme.conference_scheduling_font, VoipTexts.conference_schedule_duration)
rightColumn.addSubview(durationLabel)
@@ -219,6 +228,7 @@ import IQKeyboardManager
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
+ modeValue.setIndex(index: ConferenceSchedulingViewModel.shared.mode.value!)
datePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDate
timeZoneValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledTimeZone.value!)
durationValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledDuration.value!)
diff --git a/Classes/Swift/Util/ContentMessageView.swift b/Classes/Swift/Util/ContentMessageView.swift
index d42d671a2..c59056ca2 100644
--- a/Classes/Swift/Util/ContentMessageView.swift
+++ b/Classes/Swift/Util/ContentMessageView.swift
@@ -29,7 +29,7 @@ class ContentMessageView: UIViewController {
let replyContentTextView = StyledLabel(VoipTheme.chat_conversation_reply_content)
let replyContentTextSpacing = UIView()
let replyContentForMeetingTextView = StyledLabel(VoipTheme.chat_conversation_reply_content)
- let replyDeleteButton = CallControlButton(width: 22, height: 22, buttonTheme:VoipTheme.nav_black_button("reply_cancel"))
+ let replyDeleteButton = CallControlButton(width: 22, height: 22, buttonTheme:VoipTheme.nav_color_button("reply_cancel"))
let replyMeetingSchedule = UIImageView()
let recordingView = UIView()
let recordingDeleteButton = CallControlButton(width: 40, height: 40, buttonTheme:VoipTheme.nav_button("delete_default"))
diff --git a/Classes/Swift/Voip/Theme/VoipTexts.swift b/Classes/Swift/Voip/Theme/VoipTexts.swift
index 73e1df408..749d0f4d4 100644
--- a/Classes/Swift/Voip/Theme/VoipTexts.swift
+++ b/Classes/Swift/Voip/Theme/VoipTexts.swift
@@ -30,6 +30,7 @@ import UIKit
@objc static let call_action_change_conf_layout = NSLocalizedString("Change layout",comment:"")
@objc static let call_action_chat = NSLocalizedString("Chat",comment:"")
@objc static let call_action_numpad = NSLocalizedString("Numpad",comment:"")
+ @objc static let call_action_speakers_list = NSLocalizedString("Speakers list",comment:"")
@objc static let call_action_participants_list = NSLocalizedString("Participants list",comment:"")
@objc static let call_action_statistics = NSLocalizedString("Call statistics",comment:"")
@objc static let call_action_transfer_call = NSLocalizedString("Transfer call",comment:"")
@@ -110,6 +111,7 @@ import UIKit
@objc static let conference_paused_title = NSLocalizedString("You are currently out of the meeting.",comment:"")
@objc static let conference_schedule_address_copied_to_clipboard = NSLocalizedString("Meeting address copied into clipboard",comment:"")
@objc static let conference_schedule_address_title = NSLocalizedString("Meeting address",comment:"")
+ @objc static let conference_schedule_mode = NSLocalizedString("Mode",comment:"")
@objc static let conference_schedule_date = NSLocalizedString("Date",comment:"")
@objc static let conference_schedule_description_hint = NSLocalizedString("Description",comment:"")
@objc static let conference_schedule_description_title = NSLocalizedString("Add a description",comment:"")
@@ -121,6 +123,8 @@ import UIKit
@objc static let conference_schedule_mandatory_field = NSLocalizedString("Mandatory",comment:"")
@objc static let conference_schedule_organizer = NSLocalizedString("Organizer:",comment:"")
@objc static let conference_schedule_participants_list = NSLocalizedString("Participants list",comment:"")
+ @objc static let conference_schedule_speakers_list = NSLocalizedString("Speakers list",comment:"")
+ @objc static let conference_schedule_speakers_list_empty = NSLocalizedString("Select at least one speaker",comment:"")
@objc static let conference_schedule_send_invite_chat = NSLocalizedString("Send invite via &appName;",comment:"").replacingOccurrences(of: "&appName;", with: appName)
@objc static let conference_schedule_send_invite_chat_summary = NSLocalizedString("Invite will be sent out from my &appName; account",comment:"").replacingOccurrences(of: "&appName;", with: appName)
@objc static let conference_schedule_send_invite_email = NSLocalizedString("Send invite via email",comment:"")
@@ -130,6 +134,7 @@ import UIKit
@objc static let conference_group_call_subject_hint = NSLocalizedString("Group call subject",comment:"")
@objc static let conference_schedule_subject_title = NSLocalizedString("Subject",comment:"")
@objc static let conference_schedule_summary = NSLocalizedString("Meeting info",comment:"")
+ @objc static let conference_schedule_broadcast_summary = NSLocalizedString("Broadcast info",comment:"")
@objc static let conference_schedule_time = NSLocalizedString("Time",comment:"")
@objc static let conference_schedule_timezone = NSLocalizedString("Timezone",comment:"")
@objc static let conference_schedule_title = NSLocalizedString("Schedule a meeting",comment:"")
diff --git a/Classes/Swift/Voip/Theme/VoipTheme.swift b/Classes/Swift/Voip/Theme/VoipTheme.swift
index e7ed1c077..aed8f8bb0 100644
--- a/Classes/Swift/Voip/Theme/VoipTheme.swift
+++ b/Classes/Swift/Voip/Theme/VoipTheme.swift
@@ -407,7 +407,7 @@ import UIKit
backgroundStateColors: [:])
}
- static func nav_black_button(_ iconName:String) -> ButtonTheme {
+ static func nav_color_button(_ iconName:String) -> ButtonTheme {
return ButtonTheme(
tintableStateIcons:[
UIButton.State.normal.rawValue : TintableIcon(name: iconName),
diff --git a/Classes/Swift/Voip/ViewModels/ConferenceSpeakerData.swift b/Classes/Swift/Voip/ViewModels/ConferenceSpeakerData.swift
new file mode 100644
index 000000000..1aaafd7b3
--- /dev/null
+++ b/Classes/Swift/Voip/ViewModels/ConferenceSpeakerData.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 ConferenceSpeakerData {
+
+ var conference:Conference
+ var speaker:Participant
+
+ let isAdmin = MutableLiveData()
+ let isMeAdmin = MutableLiveData()
+
+ private var callDelegate : CallDelegateStub?
+
+ init (conference:Conference, speaker:Participant) {
+ self.conference = conference
+ self.speaker = speaker
+ isAdmin.value = speaker.isAdmin
+ isMeAdmin.value = conference.me?.isAdmin
+ Log.i("[Conference Speaker] Speaker \(sipUri!) is admin=\(isAdmin.value!)")
+
+ }
+
+ var sipUri:String? {
+ get {
+ return self.speaker.address?.asString()
+ }
+ }
+
+ func destroy() {
+ isAdmin.clearObservers()
+ isMeAdmin.clearObservers()
+ }
+}
diff --git a/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift b/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift
index b551b21e5..555e48516 100644
--- a/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift
+++ b/Classes/Swift/Voip/ViewModels/ConferenceViewModel.swift
@@ -36,6 +36,7 @@ class ConferenceViewModel {
let conference = MutableLiveData()
let conferenceCreationPending = MutableLiveData()
+ let conferenceSpeakers = MutableLiveData<[ConferenceSpeakerData]>()
let conferenceParticipants = MutableLiveData<[ConferenceParticipantData]>()
let conferenceParticipantDevices = MutableLiveData<[ConferenceParticipantDeviceData]>()
let conferenceDisplayMode = MutableLiveData()
diff --git a/Classes/Swift/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift b/Classes/Swift/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift
index bf0db4695..16e621f87 100644
--- a/Classes/Swift/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift
+++ b/Classes/Swift/Voip/Views/Fragments/ParticipantsList/VoipParticipantCell.swift
@@ -45,6 +45,7 @@ class VoipParticipantCell: UITableViewCell {
let isAdminCheck = UIImageView(image: UIImage(named:("check_unselected")))
let removePart = CallControlButton(imageInset:dismiss_icon_inset,buttonTheme: VoipTheme.voip_cancel, onClickAction: {})
+ let addButton = CallControlButton(buttonTheme:VoipTheme.nav_color_button("add_field_default"))
var owningParticpantsListView : ParticipantsListView? = nil
@@ -135,6 +136,11 @@ class VoipParticipantCell: UITableViewCell {
isAdminView.matchParentHeight().toRightOf(nameAddress).alignParentRight(withMargin: dismiss_right_margin).done()
contentView.backgroundColor = .clear
backgroundColor = .clear
+
+ // Add button for broadcast mode
+ addSubview(addButton)
+ addButton.alignParentRight(withMargin: 10).matchParentHeight().done()
+ addButton.isEnabled = true
}
required init?(coder: NSCoder) {
diff --git a/Classes/Swift/Voip/Views/Fragments/SpeakersList/SpeakersListView.swift b/Classes/Swift/Voip/Views/Fragments/SpeakersList/SpeakersListView.swift
new file mode 100644
index 000000000..621cf771a
--- /dev/null
+++ b/Classes/Swift/Voip/Views/Fragments/SpeakersList/SpeakersListView.swift
@@ -0,0 +1,127 @@
+/*
+ * 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 SpeakersListView: DismissableView, UITableViewDataSource {
+
+ // Layout constants
+ let side_margin = 10.0
+
+ let speakersListTableView = UITableView()
+ let noSpeakersLabel = StyledLabel(VoipTheme.empty_list_font,VoipTexts.conference_empty)
+
+
+ var callsDataObserver : MutableLiveDataOnChangeClosure<[CallData]>? = nil
+
+ init() {
+ super.init(title: VoipTexts.call_action_speakers_list)
+
+
+ let edit = CallControlButton(buttonTheme: VoipTheme.voip_edit, onClickAction: {
+ self.removeFromSuperview()
+ self.gotoSpeakersListSelection()
+ })
+ super.headerView.addSubview(edit)
+ edit.centerY().done()
+ super.dismiss?.toRightOf(edit,withLeftMargin: dismiss_right_margin).centerY().done()
+
+
+ // SpeakersList
+ super.contentView.addSubview(speakersListTableView)
+ speakersListTableView.matchParentDimmensions().done()
+ speakersListTableView.dataSource = self
+ speakersListTableView.register(VoipSpeakerCell.self, forCellReuseIdentifier: "VoipSpeakerCell")
+ speakersListTableView.allowsSelection = false
+ if #available(iOS 15.0, *) {
+ speakersListTableView.allowsFocus = false
+ }
+ speakersListTableView.separatorStyle = .singleLine
+ speakersListTableView.separatorColor = .white
+
+
+ ConferenceViewModel.shared.conferenceSpeakers.readCurrentAndObserve{ _ in
+ self.speakersListTableView.reloadData()
+ self.noSpeakersLabel.isHidden = ConferenceViewModel.shared.conferenceSpeakers.value?.count ?? 0 > 0
+ }
+
+ ConferenceViewModel.shared.isMeAdmin.readCurrentAndObserve { (meAdmin) in
+ edit.isHidden = meAdmin != true
+ }
+
+ super.contentView.addSubview(noSpeakersLabel)
+ noSpeakersLabel.center().matchParentSideBorders(insetedByDx: side_margin).done()
+ noSpeakersLabel.isHidden = ConferenceViewModel.shared.conferenceSpeakers.value?.count ?? 0 > 0
+ noSpeakersLabel.numberOfLines = 2
+ self.speakersListTableView.backgroundColor = VoipTheme.voipBackgroundBWColor.get()
+
+ UIDeviceBridge.displayModeSwitched.observe { _ in
+ self.speakersListTableView.backgroundColor = VoipTheme.voipBackgroundBWColor.get()
+ self.speakersListTableView.reloadData()
+ }
+ }
+
+
+ // TableView datasource delegate
+
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ guard let speakers = ConferenceViewModel.shared.conferenceSpeakers.value else {
+ return 0
+ }
+ return speakers.count
+ }
+
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell:VoipSpeakerCell = tableView.dequeueReusableCell(withIdentifier: "VoipSpeakerCell") as! VoipSpeakerCell
+ guard let speakerData = ConferenceViewModel.shared.conferenceSpeakers.value?[indexPath.row] else {
+ return cell
+ }
+ cell.selectionStyle = .none
+ cell.speakerData = speakerData
+ cell.owningParticpantsListView = self
+ return cell
+ }
+
+ // View controller
+
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+
+ func gotoSpeakersListSelection() {
+ let view: ChatConversationCreateView = self.VIEW(ChatConversationCreateView.compositeViewDescription())
+ view.unfragmentCompositeDescription()
+ let addresses = ConferenceViewModel.shared.conferenceSpeakers.value!.map { (data) in String(data.speaker.address!.asStringUriOnly()) }
+ view.tableController.contactsGroup = (addresses as NSArray).mutableCopy() as? NSMutableArray
+ view.isForEditing = false
+ view.isForVoipConference = true
+ view.isForOngoingVoipConference = true
+ view.tableController.notFirstTime = true
+ view.isGroupChat = true
+ PhoneMainView.instance().changeCurrentView(view.compositeViewDescription())
+ }
+
+
+
+
+}
diff --git a/Classes/Swift/Voip/Views/Fragments/SpeakersList/VoipSpeakerCell.swift b/Classes/Swift/Voip/Views/Fragments/SpeakersList/VoipSpeakerCell.swift
new file mode 100644
index 000000000..04651983a
--- /dev/null
+++ b/Classes/Swift/Voip/Views/Fragments/SpeakersList/VoipSpeakerCell.swift
@@ -0,0 +1,149 @@
+/*
+ * 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 VoipSpeakerCell: UITableViewCell {
+
+ // Layout Constants
+
+ static let dismiss_icon_inset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
+ let dismiss_right_margin = 10
+ let check_box_size = 15
+ static let cell_height = 80.0
+ let avatar_left_margin = 15.0
+ let texts_left_margin = 20.0
+ let lime_badge_width = 18.0
+ let lime_badge_offset = -10.0
+
+ let avatar = Avatar(color:VoipTheme.primaryTextColor, textStyle: VoipTheme.call_generated_avatar_small)
+ let limeBadge = UIImageView(image: UIImage(named: "security_toggle_icon_green"))
+ let displayName = StyledLabel(VoipTheme.conference_participant_name_font)
+ let sipAddress = StyledLabel(VoipTheme.conference_participant_sip_uri_font)
+ let isAdminView = UIStackView()
+ let isAdminLabel = StyledLabel(VoipTheme.conference_participant_admin_label,VoipTexts.chat_room_group_info_admin)
+ let isAdminCheck = UIImageView(image: UIImage(named:("check_unselected")))
+ let removePart = CallControlButton(imageInset:dismiss_icon_inset,buttonTheme: VoipTheme.voip_cancel, onClickAction: {})
+
+ let deleteButton = CallControlButton(buttonTheme:VoipTheme.nav_color_button("delete_field_default"))
+
+ var owningParticpantsListView : SpeakersListView? = nil
+
+ var speakerData: ConferenceSpeakerData? = nil {
+ didSet {
+ if let data = speakerData {
+ limeBadge.isHidden = true
+ avatar.fillFromAddress(address: data.speaker.address!)
+ displayName.text = data.speaker.address?.addressBookEnhancedDisplayName()
+ sipAddress.text = data.speaker.address?.asStringUriOnly()
+ data.isAdmin.readCurrentAndObserve { _ in
+ self.setAdminStatus(data: data)
+ }
+ data.isMeAdmin.readCurrentAndObserve { _ in
+ self.setAdminStatus(data: data)
+ }
+ self.isAdminView.onClick {
+ data.conference.setParticipantAdminStatus(participant: data.speaker, isAdmin: data.isAdmin.value != true)
+ self.owningParticpantsListView?.speakersListTableView.reloadData()
+ }
+ self.removePart.onClick {
+ try?data.conference.removeParticipant(participant: data.speaker)
+ self.owningParticpantsListView?.speakersListTableView.reloadData()
+ }
+ }
+ }
+ }
+
+ func setAdminStatus(data:ConferenceSpeakerData) {
+ let isAdmin = data.isAdmin.value!
+ let isMeAdmin = data.isMeAdmin.value!
+ self.removePart.isHidden = !isMeAdmin
+ self.isAdminView.isUserInteractionEnabled = isMeAdmin
+ self.isAdminLabel.textColor = !isAdmin ? VoipTheme.primarySubtextLightColor.get() : VoipTheme.primaryTextColor.get()
+ self.isAdminView.isHidden = !isAdmin && !isMeAdmin // Non admin don't see status of others non admin (they just see admins)
+ }
+
+ var scheduleConfSpeakerAddress: Address? = nil {
+ didSet {
+ if let address = scheduleConfSpeakerAddress {
+ avatar.fillFromAddress(address: address)
+ displayName.text = address.addressBookEnhancedDisplayName()
+ sipAddress.text = address.asStringUriOnly()
+ self.isAdminView.isHidden = true
+ self.removePart.isHidden = true
+ }
+ }
+ }
+
+
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+ super.init(style: style, reuseIdentifier: reuseIdentifier)
+ contentView.height(VoipSpeakerCell.cell_height).matchParentSideBorders().done()
+
+ addSubview(avatar)
+ avatar.size(w: VoipCallCell.avatar_size, h: VoipCallCell.avatar_size).centerY().alignParentLeft(withMargin: avatar_left_margin).done()
+
+ limeBadge.contentMode = .scaleAspectFit
+ addSubview(limeBadge)
+ limeBadge.toRightOf(avatar,withLeftMargin: lime_badge_offset).width(lime_badge_width).done()
+
+ // Name Address
+
+ let nameAddress = UIStackView()
+ nameAddress.addArrangedSubview(displayName)
+ nameAddress.addArrangedSubview(sipAddress)
+ nameAddress.axis = .vertical
+ addSubview(nameAddress)
+ nameAddress.toRightOf(avatar,withLeftMargin:texts_left_margin).centerY().done()
+
+ // Admin section
+ isAdminView.spacing = 5
+
+ isAdminView.addArrangedSubview(isAdminCheck)
+ isAdminCheck.square(check_box_size).done()
+ isAdminCheck.contentMode = .scaleAspectFit
+ isAdminCheck.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+
+ isAdminView.addArrangedSubview(isAdminLabel)
+ isAdminLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+
+ isAdminView.addArrangedSubview(removePart)
+ removePart.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+
+ addSubview(isAdminView)
+ isAdminView.leadingAnchor.constraint(greaterThanOrEqualTo: leadingAnchor).isActive = true
+ isAdminView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
+ isAdminView.matchParentHeight().toRightOf(nameAddress).alignParentRight(withMargin: dismiss_right_margin).done()
+ contentView.backgroundColor = .clear
+ backgroundColor = .clear
+
+ // Delete button for broadcast mode
+ addSubview(deleteButton)
+ deleteButton.alignParentRight(withMargin: 10).matchParentHeight().done()
+ deleteButton.isEnabled = true
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+}
diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj
index 04955cb8c..d8b3317dd 100644
--- a/linphone.xcodeproj/project.pbxproj
+++ b/linphone.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
340751971506459A00B89C47 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 340751961506459A00B89C47 /* CoreTelephony.framework */; };
344ABDF114850AE9007420B6 /* libc++.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 344ABDEF14850AE9007420B6 /* libc++.1.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
+ 4701D3DADBB5643F3BFBDB13 /* Pods_msgNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785F0C8F17CC0C3ED32D877A /* Pods_msgNotificationService.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 */; };
@@ -625,8 +626,11 @@
669B140C27A29D140012220A /* FloatingScrollDownButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669B140B27A29D140012220A /* FloatingScrollDownButton.swift */; };
66E399F72857869300E73456 /* menu_notifications_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 66E399F52857869200E73456 /* menu_notifications_off.png */; };
66E399F82857869300E73456 /* menu_notifications_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 66E399F62857869200E73456 /* menu_notifications_on.png */; };
+ 670570508BCF8E632DA30693 /* Pods_msgNotificationContent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E34400DB0BBC32817BBC646 /* Pods_msgNotificationContent.framework */; };
+ 6BFC6480E944DC85FB4B596B /* Pods_linphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99AE8AC439FE1502BDB82EEE /* Pods_linphone.framework */; };
70E542F313E147E3002BA2C0 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F213E147E3002BA2C0 /* OpenGLES.framework */; };
70E542F513E147EB002BA2C0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F413E147EB002BA2C0 /* QuartzCore.framework */; };
+ 71AC843E9555663F6A2308A6 /* Pods_CallUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8005C73AB852A5FC6C960F4B /* Pods_CallUITests.framework */; };
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 */; };
@@ -969,6 +973,10 @@
D7A7545029507038005C9D4A /* CustomAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A7544F29507038005C9D4A /* CustomAlertController.swift */; };
D7C6DE832948CF3100756E03 /* DropDownCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C6DE812948CF3100756E03 /* DropDownCell.swift */; };
D7C6DE842948CF3100756E03 /* DropDownCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D7C6DE822948CF3100756E03 /* DropDownCell.xib */; };
+ D7CBC0F72A8E1669009182D8 /* Mode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBC0F62A8E1669009182D8 /* Mode.swift */; };
+ D7CBC0FB2A8E3D1E009182D8 /* SpeakersListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBC0FA2A8E3D1E009182D8 /* SpeakersListView.swift */; };
+ D7CBC0FD2A8E3D3F009182D8 /* VoipSpeakerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBC0FC2A8E3D3F009182D8 /* VoipSpeakerCell.swift */; };
+ D7CBC0FF2A8E3E11009182D8 /* ConferenceSpeakerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBC0FE2A8E3E11009182D8 /* ConferenceSpeakerData.swift */; };
D7CF13732A2E225200D92165 /* emoji.png in Resources */ = {isa = PBXBuildFile; fileRef = D7CF13722A2E225200D92165 /* emoji.png */; };
D7DA18712A02598700FABA0D /* TextViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA18702A02598700FABA0D /* TextViewer.swift */; };
EA0007A62356008F003CC6BF /* msgNotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = EA5F25D9232BD3E200475F2E /* msgNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
@@ -1049,11 +1057,13 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 13DBC5D3188A145CD7240456 /* 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 = ""; };
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 = ""; };
1D3623250D0F684500981E51 /* LinphoneAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneAppDelegate.m; sourceTree = ""; };
1D6058910D05DD3D006BFB54 /* linphone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = linphone.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DB171367FBC063A92DFF671 /* 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 = ""; };
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 = ""; };
@@ -1102,16 +1112,22 @@
24BFAA9C209B062F004F47A7 /* contacts_sip_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_sip_selected@2x.png"; sourceTree = ""; };
24BFAA9D209B0630004F47A7 /* linphone_logo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "linphone_logo@2x.png"; sourceTree = ""; };
24E1C7B91F9A235500D3F981 /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; };
+ 2805D857950EB54DE9EC76F3 /* 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 = ""; };
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 = ""; };
340751961506459A00B89C47 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
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; };
+ 3D777FF83A489472E2530A85 /* 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 = ""; };
+ 413401F544CB2668F07E0EA0 /* 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 = ""; };
+ 44CD55BCF1F7605D70B925D6 /* 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 = ""; };
+ 4ABDEF5B597BAA50AB49EEE2 /* 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 = ""; };
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 = ""; };
570742661D5A63DB004B9C84 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
+ 5A0745F1212040EAEC11A72A /* Pods-CallUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CallUITests.release.xcconfig"; path = "Target Support Files/Pods-CallUITests/Pods-CallUITests.release.xcconfig"; sourceTree = ""; };
5E58962520DCE5700030868C /* UserNotificationsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotificationsUI.framework; path = System/Library/Frameworks/UserNotificationsUI.framework; sourceTree = SDKROOT; };
5EF0C33820C806A5005081B0 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };
6112A01B243B31A600DBD5F5 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
@@ -1800,8 +1816,14 @@
66EADB022A939487002DDCEE /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_CN; path = zh_CN.lproj/Localizable.strings; sourceTree = ""; };
6EA1EF0554CF75B5C078A4F8 /* 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 = ""; };
6FFD86D62D3E1E8093160069 /* 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 = ""; };
+ 67039DAF1162F13644E2B622 /* Pods-CallUITests.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CallUITests.distribution.xcconfig"; path = "Target Support Files/Pods-CallUITests/Pods-CallUITests.distribution.xcconfig"; sourceTree = ""; };
+ 68F0AD8BF6C2A009468601CF /* 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 = ""; };
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; };
+ 785F0C8F17CC0C3ED32D877A /* Pods_msgNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_msgNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7E34400DB0BBC32817BBC646 /* Pods_msgNotificationContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_msgNotificationContent.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8005C73AB852A5FC6C960F4B /* Pods_CallUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CallUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 86CA4651CCBB3B93873B787A /* 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 = ""; };
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; };
@@ -1887,6 +1909,10 @@
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 = ""; };
+ 8E72C2B55BD41E35CBD59144 /* Pods-CallUITests.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CallUITests.distributionadhoc.xcconfig"; path = "Target Support Files/Pods-CallUITests/Pods-CallUITests.distributionadhoc.xcconfig"; sourceTree = ""; };
+ 99AE8AC439FE1502BDB82EEE /* Pods_linphone.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_linphone.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 99EE66591AAE0A56B2752224 /* 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 = ""; };
+ A8E18CF5D897E58D43C78844 /* Pods-CallUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CallUITests.debug.xcconfig"; path = "Target Support Files/Pods-CallUITests/Pods-CallUITests.debug.xcconfig"; 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 = ""; };
@@ -2097,6 +2123,7 @@
C6E3E7ED291D648D00DDFC46 /* side_menu_voip_meeting_schedule@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "side_menu_voip_meeting_schedule@2x.png"; sourceTree = ""; };
C6F55644287CC69F0056E213 /* voip_meeting_schedule.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = voip_meeting_schedule.png; sourceTree = ""; };
C6F55646287CCFB60056E213 /* menu_voip_meeting_schedule.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_voip_meeting_schedule.png; sourceTree = ""; };
+ C8153405A74E7E99A5AE0926 /* 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 = ""; };
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 = ""; };
@@ -2240,8 +2267,13 @@
D7A7544F29507038005C9D4A /* CustomAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomAlertController.swift; sourceTree = ""; };
D7C6DE812948CF3100756E03 /* DropDownCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropDownCell.swift; sourceTree = ""; };
D7C6DE822948CF3100756E03 /* DropDownCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DropDownCell.xib; sourceTree = ""; };
+ D7CBC0F62A8E1669009182D8 /* Mode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mode.swift; sourceTree = ""; };
+ D7CBC0FA2A8E3D1E009182D8 /* SpeakersListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpeakersListView.swift; sourceTree = ""; };
+ D7CBC0FC2A8E3D3F009182D8 /* VoipSpeakerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoipSpeakerCell.swift; sourceTree = ""; };
+ D7CBC0FE2A8E3E11009182D8 /* ConferenceSpeakerData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConferenceSpeakerData.swift; sourceTree = ""; };
D7CF13722A2E225200D92165 /* emoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = emoji.png; sourceTree = ""; };
D7DA18702A02598700FABA0D /* TextViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextViewer.swift; sourceTree = ""; };
+ E4178B3BF1512DBE49E7D6C9 /* 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 = ""; };
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 = ""; };
@@ -2315,6 +2347,7 @@
files = (
EA88F3AC241BD05200E66528 /* UserNotificationsUI.framework in Frameworks */,
EA88F3AB241BD05200E66528 /* UserNotifications.framework in Frameworks */,
+ 670570508BCF8E632DA30693 /* Pods_msgNotificationContent.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2355,6 +2388,7 @@
F05BAA621A5D594E00411815 /* libz.dylib in Frameworks */,
344ABDF114850AE9007420B6 /* libc++.1.dylib in Frameworks */,
22D1B68112A3E0BE001AE361 /* libresolv.dylib in Frameworks */,
+ 6BFC6480E944DC85FB4B596B /* Pods_linphone.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2362,6 +2396,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 4701D3DADBB5643F3BFBDB13 /* Pods_msgNotificationService.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2376,6 +2411,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 71AC843E9555663F6A2308A6 /* Pods_CallUITests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2714,6 +2750,10 @@
8C73477B1D9BA3A00022EE8C /* UserNotifications.framework */,
5E58962520DCE5700030868C /* UserNotificationsUI.framework */,
63CE583F1C85EBF400304800 /* VideoToolbox.framework */,
+ 8005C73AB852A5FC6C960F4B /* Pods_CallUITests.framework */,
+ 99AE8AC439FE1502BDB82EEE /* Pods_linphone.framework */,
+ 7E34400DB0BBC32817BBC646 /* Pods_msgNotificationContent.framework */,
+ 785F0C8F17CC0C3ED32D877A /* Pods_msgNotificationService.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -3462,6 +3502,22 @@
75AA7090378DBBA5417E4370 /* Pods */ = {
isa = PBXGroup;
children = (
+ A8E18CF5D897E58D43C78844 /* Pods-CallUITests.debug.xcconfig */,
+ 5A0745F1212040EAEC11A72A /* Pods-CallUITests.release.xcconfig */,
+ 67039DAF1162F13644E2B622 /* Pods-CallUITests.distribution.xcconfig */,
+ 8E72C2B55BD41E35CBD59144 /* Pods-CallUITests.distributionadhoc.xcconfig */,
+ 99EE66591AAE0A56B2752224 /* Pods-linphone.debug.xcconfig */,
+ 68F0AD8BF6C2A009468601CF /* Pods-linphone.release.xcconfig */,
+ 86CA4651CCBB3B93873B787A /* Pods-linphone.distribution.xcconfig */,
+ E4178B3BF1512DBE49E7D6C9 /* Pods-linphone.distributionadhoc.xcconfig */,
+ 4ABDEF5B597BAA50AB49EEE2 /* Pods-msgNotificationContent.debug.xcconfig */,
+ C8153405A74E7E99A5AE0926 /* Pods-msgNotificationContent.release.xcconfig */,
+ 413401F544CB2668F07E0EA0 /* Pods-msgNotificationContent.distribution.xcconfig */,
+ 13DBC5D3188A145CD7240456 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */,
+ 3D777FF83A489472E2530A85 /* Pods-msgNotificationService.debug.xcconfig */,
+ 2805D857950EB54DE9EC76F3 /* Pods-msgNotificationService.release.xcconfig */,
+ 1DB171367FBC063A92DFF671 /* Pods-msgNotificationService.distribution.xcconfig */,
+ 44CD55BCF1F7605D70B925D6 /* Pods-msgNotificationService.distributionadhoc.xcconfig */,
);
path = Pods;
sourceTree = "";
@@ -3511,6 +3567,7 @@
C63F719F285A24B10066163B /* ScheduledConferenceData.swift */,
C63F71A0285A24B10066163B /* TimeZoneData.swift */,
C63F71A1285A24B10066163B /* Duration.swift */,
+ D7CBC0F62A8E1669009182D8 /* Mode.swift */,
);
path = Data;
sourceTree = "";
@@ -3620,6 +3677,7 @@
C63F71CD285A24B10066163B /* ConferenceParticipantData.swift */,
C63F71CE285A24B10066163B /* ConferenceParticipantDeviceData.swift */,
C63F71CF285A24B10066163B /* CallData.swift */,
+ D7CBC0FE2A8E3E11009182D8 /* ConferenceSpeakerData.swift */,
);
path = ViewModels;
sourceTree = "";
@@ -3649,6 +3707,7 @@
C63F71D8285A24B10066163B /* Fragments */ = {
isa = PBXGroup;
children = (
+ D7CBC0F92A8E3CF4009182D8 /* SpeakersList */,
C63F71D9285A24B10066163B /* ParticipantsList */,
C63F71DC285A24B10066163B /* AudioRoutesView.swift */,
C63F71DD285A24B10066163B /* Conference */,
@@ -3939,6 +3998,15 @@
path = Views;
sourceTree = "";
};
+ D7CBC0F92A8E3CF4009182D8 /* SpeakersList */ = {
+ isa = PBXGroup;
+ children = (
+ D7CBC0FA2A8E3D1E009182D8 /* SpeakersListView.swift */,
+ D7CBC0FC2A8E3D3F009182D8 /* VoipSpeakerCell.swift */,
+ );
+ path = SpeakersList;
+ sourceTree = "";
+ };
D7DA18722A02599A00FABA0D /* Viewers */ = {
isa = PBXGroup;
children = (
@@ -3979,6 +4047,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "linphone" */;
buildPhases = (
+ 4B1E635C760AB13551B24106 /* [CP] Check Pods Manifest.lock */,
1D60588D0D05DD3D006BFB54 /* Resources */,
63DCC71D1A07B08E00916627 /* Run Script */,
1D60588E0D05DD3D006BFB54 /* Sources */,
@@ -3986,6 +4055,7 @@
8CDC89061EAF89A8006B5652 /* Embed Frameworks */,
5EF0C35020C806A5005081B0 /* Embed App Extensions */,
614D0A1821E77F5300C43EDF /* ShellScript */,
+ 805994971B2482F7ED933FF5 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -4020,9 +4090,11 @@
isa = PBXNativeTarget;
buildConfigurationList = 6637AF99288593AF00965733 /* Build configuration list for PBXNativeTarget "CallUITests" */;
buildPhases = (
+ FF5E503C6A83D3C5D8F4CE83 /* [CP] Check Pods Manifest.lock */,
6637AF89288593AF00965733 /* Sources */,
6637AF8A288593AF00965733 /* Frameworks */,
6637AF8B288593AF00965733 /* Resources */,
+ E41455F2A82C6AEC45A47409 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -4038,6 +4110,7 @@
isa = PBXNativeTarget;
buildConfigurationList = EA5F25E1232BD3E300475F2E /* Build configuration list for PBXNativeTarget "msgNotificationService" */;
buildPhases = (
+ 223F838B1E2854EBF44D1434 /* [CP] Check Pods Manifest.lock */,
EA5F25D5232BD3E200475F2E /* Sources */,
203E6292C3E84CD13778F720 /* Frameworks */,
EA88A406242A6224007FEC61 /* Resources */,
@@ -4056,6 +4129,7 @@
isa = PBXNativeTarget;
buildConfigurationList = EA8CB834239F96CA00C330CC /* Build configuration list for PBXNativeTarget "msgNotificationContent" */;
buildPhases = (
+ 5B941D10A235EDF133762CBF /* [CP] Check Pods Manifest.lock */,
EA8CB823239F96CA00C330CC /* Sources */,
143EFEE2501CB14E6BB244EF /* Frameworks */,
EA88F3AE241BD1ED00E66528 /* Resources */,
@@ -4911,6 +4985,72 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 223F838B1E2854EBF44D1434 /* [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";
+ showEnvVarsInLog = 0;
+ };
+ 4B1E635C760AB13551B24106 /* [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",
+ );
+ 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;
+ };
+ 5B941D10A235EDF133762CBF /* [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 */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -4983,6 +5123,152 @@
shellPath = /bin/sh;
shellScript = "$SRCROOT/Tools/git_version.sh\n";
};
+ 805994971B2482F7ED933FF5 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-linphone/Pods-linphone-frameworks.sh",
+ "${BUILT_PRODUCTS_DIR}/DropDown/DropDown.framework",
+ "${BUILT_PRODUCTS_DIR}/EmojiPicker/EmojiPicker.framework",
+ "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework",
+ "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework",
+ "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework",
+ "${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework",
+ "${BUILT_PRODUCTS_DIR}/linphone-sdk/linphonesw.framework",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/bctoolbox-ios.framework/bctoolbox-ios",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/bctoolbox-tester.framework/bctoolbox-tester",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/bctoolbox.framework/bctoolbox",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/belcard.framework/belcard",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/belle-sip.framework/belle-sip",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/belr.framework/belr",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/exampleplugin.framework/exampleplugin",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/lime.framework/lime",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/limetester.framework/limetester",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/linphone.framework/linphone",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/linphonetester.framework/linphonetester",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mediastreamer2.framework/mediastreamer2",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/msamr.framework/msamr",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mscodec2.framework/mscodec2",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/msopenh264.framework/msopenh264",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mssilk.framework/mssilk",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mswebrtc.framework/mswebrtc",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/ortp.framework/ortp",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/ZXing.framework/ZXing",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DropDown.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/EmojiPicker.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManager.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwipeCellKit.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphonesw.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}/exampleplugin.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}/ortp.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXing.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-linphone/Pods-linphone-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ E41455F2A82C6AEC45A47409 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-CallUITests/Pods-CallUITests-frameworks.sh",
+ "${BUILT_PRODUCTS_DIR}/linphone-sdk/linphonesw.framework",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/bctoolbox-ios.framework/bctoolbox-ios",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/bctoolbox-tester.framework/bctoolbox-tester",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/bctoolbox.framework/bctoolbox",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/belcard.framework/belcard",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/belle-sip.framework/belle-sip",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/belr.framework/belr",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/exampleplugin.framework/exampleplugin",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/lime.framework/lime",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/limetester.framework/limetester",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/linphone.framework/linphone",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/linphonetester.framework/linphonetester",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mediastreamer2.framework/mediastreamer2",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/msamr.framework/msamr",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mscodec2.framework/mscodec2",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/msopenh264.framework/msopenh264",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mssilk.framework/mssilk",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/mswebrtc.framework/mswebrtc",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/ortp.framework/ortp",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/linphone-sdk/ZXing.framework/ZXing",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/linphonesw.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}/exampleplugin.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}/ortp.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXing.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-CallUITests/Pods-CallUITests-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FF5E503C6A83D3C5D8F4CE83 /* [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-CallUITests-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;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -5016,6 +5302,7 @@
633671611BCBAAD200BFCBDE /* ChatConversationCreateView.m in Sources */,
634610061B61330300548952 /* UILabel+Boldify.m in Sources */,
2248E90E12F7E4CF00220D9C /* UIDigitButton.m in Sources */,
+ D7CBC0F72A8E1669009182D8 /* Mode.swift in Sources */,
633756391B67BAF400E21BAD /* SideMenuTableView.m in Sources */,
C63F7245285A24B10066163B /* VoipConferenceAudioOnlyView.swift in Sources */,
2214EB7A12F846B1002A5394 /* UICallButton.m in Sources */,
@@ -5041,6 +5328,7 @@
C63F7214285A24B10066163B /* Duration.swift in Sources */,
C63F723B285A24B10066163B /* AudioRouteUtils.swift in Sources */,
C63F7269285A24B10066163B /* StyledLabel.swift in Sources */,
+ D7CBC0FD2A8E3D3F009182D8 /* VoipSpeakerCell.swift in Sources */,
C63F722C285A24B10066163B /* UIColorExtensions.swift in Sources */,
D3F83F8E15822ABE00336684 /* PhoneMainView.m in Sources */,
C63F7251285A24B10066163B /* NumpadView.swift in Sources */,
@@ -5094,6 +5382,7 @@
C63F7238285A24B10066163B /* ConferenceParticipantData.swift in Sources */,
63B81A0D1B57DA33009604A6 /* TPKeyboardAvoidingCollectionView.m in Sources */,
D7C6DE832948CF3100756E03 /* DropDownCell.swift in Sources */,
+ D7CBC0FF2A8E3E11009182D8 /* ConferenceSpeakerData.swift in Sources */,
C63F726D285A24B10066163B /* ProviderDelegate.swift in Sources */,
C63F7266285A24B10066163B /* UICallTimer.swift in Sources */,
C6548821292D32FA00BF646B /* ConferenceCallView.swift in Sources */,
@@ -5145,6 +5434,7 @@
C63F725A285A24B10066163B /* OutgoingCallView.swift in Sources */,
63FB30351A680E73008CA393 /* UIRoundedImageView.m in Sources */,
635775251B6673EC00C8B704 /* HistoryDetailsTableView.m in Sources */,
+ D7CBC0FB2A8E3D1E009182D8 /* SpeakersListView.swift in Sources */,
C63F720E285A24B10066163B /* CallManager.swift in Sources */,
63C441C31BBC23ED0053DC5E /* UIAssistantTextField.m in Sources */,
D35860D615B549B500513429 /* Utils.m in Sources */,
@@ -5772,6 +6062,7 @@
/* Begin XCBuildConfiguration section */
1D6058940D05DD3E006BFB54 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 99EE66591AAE0A56B2752224 /* Pods-linphone.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -5826,7 +6117,7 @@
"-DENABLE_QRCODE=TRUE",
"-DENABLE_SMS_INVITE=TRUE",
"$(inherited)",
- "-DLINPHONE_SDK_VERSION=\\\"5.2.79\\\"",
+ "-DLINPHONE_SDK_VERSION=\\\"5.3.0-alpha.173+990473d73\\\"",
);
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone;
@@ -5901,6 +6192,7 @@
};
228B19A71302902F00F154D3 /* DistributionAdhoc */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = E4178B3BF1512DBE49E7D6C9 /* Pods-linphone.distributionadhoc.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -5952,7 +6244,7 @@
"-DENABLE_QRCODE=TRUE",
"-DENABLE_SMS_INVITE=TRUE",
"$(inherited)",
- "-DLINPHONE_SDK_VERSION=\\\"5.2.79\\\"",
+ "-DLINPHONE_SDK_VERSION=\\\"5.3.0-alpha.173+990473d73\\\"",
);
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone;
@@ -6026,6 +6318,7 @@
};
22F3D55613CC3C9100A0DA02 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 68F0AD8BF6C2A009468601CF /* Pods-linphone.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -6077,7 +6370,7 @@
"-DENABLE_QRCODE=TRUE",
"-DENABLE_SMS_INVITE=TRUE",
"$(inherited)",
- "-DLINPHONE_SDK_VERSION=\\\"5.2.79\\\"",
+ "-DLINPHONE_SDK_VERSION=\\\"5.3.0-alpha.173+990473d73\\\"",
);
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone;
@@ -6150,6 +6443,7 @@
};
22F51EE8107FA53D00F98953 /* Distribution */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 86CA4651CCBB3B93873B787A /* Pods-linphone.distribution.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -6201,7 +6495,7 @@
"-DENABLE_QRCODE=TRUE",
"-DENABLE_SMS_INVITE=TRUE",
"$(inherited)",
- "-DLINPHONE_SDK_VERSION=\\\"5.3.0-alpha.234+871ded4\\\"",
+ "-DLINPHONE_SDK_VERSION=\\\"5.3.0-alpha.173+990473d73\\\"",
);
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone;
@@ -6395,6 +6689,7 @@
};
6637AF95288593AF00965733 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = A8E18CF5D897E58D43C78844 /* Pods-CallUITests.debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -6456,6 +6751,7 @@
};
6637AF96288593AF00965733 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 5A0745F1212040EAEC11A72A /* Pods-CallUITests.release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -6503,6 +6799,7 @@
};
6637AF97288593AF00965733 /* Distribution */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 67039DAF1162F13644E2B622 /* Pods-CallUITests.distribution.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -6550,6 +6847,7 @@
};
6637AF98288593AF00965733 /* DistributionAdhoc */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 8E72C2B55BD41E35CBD59144 /* Pods-CallUITests.distributionadhoc.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -6644,6 +6942,7 @@
};
EA5F25E2232BD3E300475F2E /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 3D777FF83A489472E2530A85 /* Pods-msgNotificationService.debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -6699,6 +6998,7 @@
};
EA5F25E3232BD3E300475F2E /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 2805D857950EB54DE9EC76F3 /* Pods-msgNotificationService.release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -6750,6 +7050,7 @@
};
EA5F25E4232BD3E300475F2E /* Distribution */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 1DB171367FBC063A92DFF671 /* Pods-msgNotificationService.distribution.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -6801,6 +7102,7 @@
};
EA5F25E5232BD3E300475F2E /* DistributionAdhoc */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 44CD55BCF1F7605D70B925D6 /* Pods-msgNotificationService.distributionadhoc.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -6852,6 +7154,7 @@
};
EA8CB835239F96CA00C330CC /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 4ABDEF5B597BAA50AB49EEE2 /* Pods-msgNotificationContent.debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -6907,6 +7210,7 @@
};
EA8CB836239F96CA00C330CC /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C8153405A74E7E99A5AE0926 /* Pods-msgNotificationContent.release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -6958,6 +7262,7 @@
};
EA8CB837239F96CA00C330CC /* Distribution */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 413401F544CB2668F07E0EA0 /* Pods-msgNotificationContent.distribution.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;
@@ -7009,6 +7314,7 @@
};
EA8CB838239F96CA00C330CC /* DistributionAdhoc */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 13DBC5D3188A145CD7240456 /* Pods-msgNotificationContent.distributionadhoc.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
APPLICATION_EXTENSION_API_ONLY = YES;