From a05064edaf646785359119583b798526afdefa49 Mon Sep 17 00:00:00 2001 From: Christophe Deschamps Date: Thu, 3 Jun 2021 09:53:46 +0200 Subject: [PATCH] Ephemeral messages --- .../Base.lproj/ChatConversationInfoView.xib | 37 +-- Classes/Base.lproj/ChatConversationView.xib | 92 ++++++-- Classes/ChatConversationTableView.h | 1 + Classes/ChatConversationTableView.m | 106 +++++++-- Classes/ChatConversationView.h | 5 +- Classes/ChatConversationView.m | 82 +++++++ Classes/ChatsListView.m | 8 + Classes/DevicesListView.xib | 36 ++- Classes/EphemeralSettingsView.h | 36 +++ Classes/EphemeralSettingsView.m | 159 +++++++++++++ Classes/EphemeralSettingsView.xib | 218 ++++++++++++++++++ Classes/LinphoneManager.h | 1 + Classes/LinphoneManager.m | 16 ++ .../Base.lproj/UIChatBubblePhotoCell.xib | 20 +- .../Base.lproj/UIChatBubbleTextCell.xib | 42 ++-- Classes/LinphoneUI/UIChatBubbleTextCell.h | 2 + Classes/LinphoneUI/UIChatNotifiedEventCell.m | 28 ++- Classes/Utils/Utils.h | 6 + Classes/Utils/Utils.m | 10 + Resources/en.lproj/Localizable.strings | Bin 52510 -> 52514 bytes Resources/fr.lproj/Localizable.strings | Bin 55870 -> 57084 bytes .../images/ephemeral_messages_color_A.png | Bin 0 -> 12736 bytes .../images/ephemeral_messages_default.png | Bin 0 -> 14110 bytes Resources/images/menu_security_default.png | Bin 0 -> 3625 bytes Resources/images/more_menu_default.png | Bin 0 -> 3543 bytes linphone.xcodeproj/project.pbxproj | 34 ++- 26 files changed, 852 insertions(+), 87 deletions(-) create mode 100644 Classes/EphemeralSettingsView.h create mode 100644 Classes/EphemeralSettingsView.m create mode 100644 Classes/EphemeralSettingsView.xib create mode 100644 Resources/images/ephemeral_messages_color_A.png create mode 100644 Resources/images/ephemeral_messages_default.png create mode 100644 Resources/images/menu_security_default.png create mode 100644 Resources/images/more_menu_default.png diff --git a/Classes/Base.lproj/ChatConversationInfoView.xib b/Classes/Base.lproj/ChatConversationInfoView.xib index 791c647eb..75d87f5cf 100644 --- a/Classes/Base.lproj/ChatConversationInfoView.xib +++ b/Classes/Base.lproj/ChatConversationInfoView.xib @@ -1,7 +1,10 @@ - + + - + + + @@ -19,17 +22,17 @@ - + - + - + - + @@ -77,7 +80,7 @@ - + @@ -109,10 +112,10 @@ - + + + - + @@ -319,7 +345,7 @@ + - + @@ -532,17 +571,26 @@ + + - + @@ -588,8 +636,16 @@ + + + + + + + + diff --git a/Classes/ChatConversationTableView.h b/Classes/ChatConversationTableView.h index 39fd08ba6..3fb5e83be 100644 --- a/Classes/ChatConversationTableView.h +++ b/Classes/ChatConversationTableView.h @@ -57,6 +57,7 @@ @property(nonatomic) NSInteger currentIndex; @property(nonatomic, strong) id chatRoomDelegate; @property NSMutableDictionary *imagesInChatroom; +@property(nonatomic) NSTimer *ephemeralDisplayTimer; - (void)addEventEntry:(LinphoneEventLog *)event; - (void)scrollToBottom:(BOOL)animated; diff --git a/Classes/ChatConversationTableView.m b/Classes/ChatConversationTableView.m index 6b3d7eebc..ed18f9144 100644 --- a/Classes/ChatConversationTableView.m +++ b/Classes/ChatConversationTableView.m @@ -41,6 +41,17 @@ self.tableView.accessibilityIdentifier = @"ChatRoom list"; _imagesInChatroom = [NSMutableDictionary dictionary]; _currentIndex = 0; + [self startEphemeralDisplayTimer]; + [NSNotificationCenter.defaultCenter addObserver:self + selector:@selector(ephemeralDeleted:) + name:kLinphoneEphemeralMessageDeletedInRoom + object:nil]; +} + +-(void) viewWillDisappear:(BOOL)animated { + [self stopEphemeralDisplayTimer]; + [NSNotificationCenter.defaultCenter removeObserver:self]; + [super viewWillDisappear:animated]; } #pragma mark - @@ -54,35 +65,48 @@ [totalEventList removeAllObjects]; } +-(bool) eventTypeIsOfInterestForOneToOneRoom:(LinphoneEventLogType)type { + return + type == LinphoneEventLogTypeConferenceChatMessage || + type == LinphoneEventLogTypeConferenceEphemeralMessageEnabled || + type == LinphoneEventLogTypeConferenceEphemeralMessageDisabled || + type == LinphoneEventLogTypeConferenceEphemeralMessageLifetimeChanged; +} + - (void)updateData { - [self clearEventList]; + [self clearEventList]; if (!_chatRoom) return; - + LinphoneChatRoomCapabilitiesMask capabilities = linphone_chat_room_get_capabilities(_chatRoom); - bctbx_list_t *chatRoomEvents = (capabilities & LinphoneChatRoomCapabilitiesOneToOne) - ? linphone_chat_room_get_history_message_events(_chatRoom, 0) - : linphone_chat_room_get_history_events(_chatRoom, 0); - bctbx_list_t *head = chatRoomEvents; - size_t listSize = bctbx_list_size(chatRoomEvents); + bool oneToOne = capabilities & LinphoneChatRoomCapabilitiesOneToOne; + bctbx_list_t *chatRoomEvents = linphone_chat_room_get_history_events(_chatRoom, 0); + + + bctbx_list_t *head = chatRoomEvents; + size_t listSize = bctbx_list_size(chatRoomEvents); totalEventList = [[NSMutableArray alloc] initWithCapacity:listSize]; - eventList = [[NSMutableArray alloc] initWithCapacity:MIN(listSize, BASIC_EVENT_LIST)]; + eventList = [[NSMutableArray alloc] initWithCapacity:MIN(listSize, BASIC_EVENT_LIST)]; BOOL autoDownload = (linphone_core_get_max_size_for_auto_download_incoming_files(LC) > -1); while (chatRoomEvents) { - LinphoneEventLog *event = (LinphoneEventLog *)chatRoomEvents->data; - LinphoneChatMessage *chat = linphone_event_log_get_chat_message(event); - // if auto_download is available and file transfer in progress, not add event now - if (!(autoDownload && chat && linphone_chat_message_is_file_transfer_in_progress(chat))) { - [totalEventList addObject:[NSValue valueWithPointer:linphone_event_log_ref(event)]]; - if (listSize <= BASIC_EVENT_LIST) { - [eventList addObject:[NSValue valueWithPointer:linphone_event_log_ref(event)]]; + LinphoneEventLog *event = (LinphoneEventLog *)chatRoomEvents->data; + if (oneToOne && ![self eventTypeIsOfInterestForOneToOneRoom:linphone_event_log_get_type(event)]) { + chatRoomEvents = chatRoomEvents->next; + } else { + LinphoneChatMessage *chat = linphone_event_log_get_chat_message(event); + // if auto_download is available and file transfer in progress, not add event now + if (!(autoDownload && chat && linphone_chat_message_is_file_transfer_in_progress(chat))) { + [totalEventList addObject:[NSValue valueWithPointer:linphone_event_log_ref(event)]]; + if (listSize <= BASIC_EVENT_LIST) { + [eventList addObject:[NSValue valueWithPointer:linphone_event_log_ref(event)]]; + } } + + chatRoomEvents = chatRoomEvents->next; + listSize -= 1; } - - chatRoomEvents = chatRoomEvents->next; - listSize -= 1; } - bctbx_list_free_with_data(head, (bctbx_list_free_func)linphone_event_log_unref); + bctbx_list_free_with_data(head, (bctbx_list_free_func)linphone_event_log_unref); } - (void)refreshData { @@ -185,6 +209,7 @@ - (void)setChatRoom:(LinphoneChatRoom *)room { _chatRoom = room; [self reloadData]; + [self updateEphemeralTimes]; } static const int MAX_AGGLOMERATED_TIME=300; @@ -378,4 +403,47 @@ static const CGFloat MESSAGE_SPACING_PERCENTAGE = 1.f; }]; } +#pragma mark ephemeral messages + +-(void) startEphemeralDisplayTimer { + _ephemeralDisplayTimer = [NSTimer scheduledTimerWithTimeInterval:1 + target:self + selector:@selector(updateEphemeralTimes) + userInfo:nil + repeats:YES]; +} + +-(void) updateEphemeralTimes { + NSDateComponentsFormatter *f= [[NSDateComponentsFormatter alloc] init]; + f.unitsStyle = NSDateComponentsFormatterUnitsStylePositional; + f.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad; + + for (NSValue *v in eventList) { + LinphoneEventLog *event = [v pointerValue]; + if (linphone_event_log_get_type(event) == LinphoneEventLogTypeConferenceChatMessage) { + LinphoneChatMessage *msg = linphone_event_log_get_chat_message(event); + if (linphone_chat_message_is_outgoing(msg) && linphone_chat_message_is_ephemeral(msg)) { + UIChatBubbleTextCell *cell = (UIChatBubbleTextCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[eventList indexOfObject:v] inSection:0]]; + long duration = linphone_chat_message_get_ephemeral_expire_time(msg) == 0 ? + linphone_chat_room_get_ephemeral_lifetime(linphone_chat_message_get_chat_room(msg)) : + linphone_chat_message_get_ephemeral_expire_time(msg)-[NSDate date].timeIntervalSince1970; + f.allowedUnits = (duration > 86400 ? kCFCalendarUnitDay : 0)|(duration > 3600 ? kCFCalendarUnitHour : 0)|kCFCalendarUnitMinute|kCFCalendarUnitSecond; + cell.ephemeralTime.text = [f stringFromTimeInterval:duration]; + cell.ephemeralTime.hidden = NO; + cell.ephemeralIcon.hidden = NO; + } + } + } +} + +-(void) stopEphemeralDisplayTimer { + [_ephemeralDisplayTimer invalidate]; +} + +- (void)ephemeralDeleted:(NSNotification *)notif { + LinphoneChatRoom *r =[[notif.userInfo objectForKey:@"room"] pointerValue]; + if (r ==_chatRoom) + [self reloadData]; +} + @end diff --git a/Classes/ChatConversationView.h b/Classes/ChatConversationView.h index 777f9f6bd..32595c83c 100644 --- a/Classes/ChatConversationView.h +++ b/Classes/ChatConversationView.h @@ -49,7 +49,7 @@ @interface ChatConversationView : TPMultiLayoutViewController { + UIDocumentInteractionControllerDelegate, UISearchBarDelegate, UIImageViewDeletableDelegate,QLPreviewControllerDelegate, UICollectionViewDataSource,UIDocumentMenuDelegate,UIDocumentPickerDelegate,UITableViewDataSource, UITableViewDelegate> { OrderedDictionary *imageQualities; BOOL scrollOnGrowingEnabled; BOOL composingVisible; @@ -88,6 +88,9 @@ @property (weak, nonatomic) IBOutlet UIButton *encryptedButton; @property (weak, nonatomic) IBOutlet UIInterfaceStyleButton *toggleSelectionButton; @property FileContext *fileContext; +@property (weak, nonatomic) IBOutlet UITableView *popupMenu; +@property (weak, nonatomic) IBOutlet UIInterfaceStyleButton *toggleMenuButton; +@property (weak, nonatomic) IBOutlet UIImageView *ephemeralndicator; + (void)markAsRead:(LinphoneChatRoom *)chatRoom; + (void)autoDownload:(LinphoneChatMessage *)message; diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index 031132c73..fc5b8b989 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -26,6 +26,8 @@ #import "UIChatBubbleTextCell.h" #import "DevicesListView.h" #import "SVProgressHUD.h" +#import "EphemeralSettingsView.h" +#import "Utils.h" @implementation FileContext @@ -335,8 +337,22 @@ static UICompositeViewDescription *compositeDescription = nil; _encryptedButton.hidden = image ? FALSE : TRUE; [self update]; [self shareFile]; + + if (![self isBasicChatRoom]) { + [self setupPopupMenu]; + _ephemeralndicator.hidden = !linphone_chat_room_ephemeral_enabled(_chatRoom); + } + } +-(BOOL) isBasicChatRoom { + if (!_chatRoom) + return true; + LinphoneChatRoomCapabilitiesMask capabilities = linphone_chat_room_get_capabilities(_chatRoom); + return capabilities & LinphoneChatRoomCapabilitiesBasic; +} + + - (void)configureMessageField { if (isOneToOne) { _messageField.editable = TRUE; @@ -563,6 +579,8 @@ static UICompositeViewDescription *compositeDescription = nil; [_backToCallButton update]; _infoButton.hidden = (isOneToOne|| !_backToCallButton.hidden || _tableController.tableView.isEditing); _callButton.hidden = !_backToCallButton.hidden || !_infoButton.hidden || _tableController.tableView.isEditing; + _toggleMenuButton.hidden = [self isBasicChatRoom] || _tableController.tableView.isEditing; + _tableController.editButton.hidden = _tableController.editButton.hidden || ![self isBasicChatRoom]; } - (void)updateParticipantLabel { @@ -1541,5 +1559,69 @@ void on_chat_room_conference_alert(LinphoneChatRoom *cr, const LinphoneEventLog return newImage; } +// Popup menu + + + +- (void) setupPopupMenu { + _popupMenu.dataSource = self; + _popupMenu.delegate = self; + _tableController.editButton.hidden = true; + _popupMenu.layer.shadowColor = [UIColor lightGrayColor].CGColor; + _popupMenu.layer.shadowOpacity = 0.5; + _popupMenu.layer.shadowOffset = CGSizeZero; + _popupMenu.layer.shadowRadius = 10; + _popupMenu.layer.masksToBounds = false; + _toggleMenuButton.hidden = false; +} + +-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [self onToggleMenu:nil]; + if (indexPath.row == 0) { + [self goToDeviceListView]; + } + if (indexPath.row == 1) { + EphemeralSettingsView *view = VIEW(EphemeralSettingsView); + view.room = _chatRoom; + [PhoneMainView.instance popToView:view.compositeViewDescription]; + } + if (indexPath.row == 2) { + [_tableController onEditClick:nil]; + [self onEditionChangeClick:nil]; + } +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 3; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [[UITableViewCell alloc] init]; + + if (indexPath.row == 0) { + cell.imageView.image = [LinphoneUtils resizeImage:[UIImage imageNamed:@"menu_security_default.png"] newSize:CGSizeMake(20, 25)]; + cell.textLabel.text = NSLocalizedString(@"Conversation's devices",nil); + } + if (indexPath.row == 1) { + cell.imageView.image = [LinphoneUtils resizeImage:[UIImage imageNamed:@"ephemeral_messages_default.png"] newSize:CGSizeMake(20, 25)]; + cell.textLabel.text = NSLocalizedString(@"Ephemeral messages",nil); + } + if (indexPath.row == 2) { + cell.imageView.image = [LinphoneUtils resizeImage:[UIImage imageNamed:@"delete_default.png"] newSize:CGSizeMake(20, 25)]; + cell.textLabel.text = NSLocalizedString(@"Delete messages",nil); + } + cell.imageView.contentMode = UIViewContentModeScaleAspectFit; + return cell; +} +- (IBAction)onToggleMenu:(id)sender { + _popupMenu.hidden = !_popupMenu.hidden; + if (!_popupMenu.hidden) + [_popupMenu selectRowAtIndexPath:nil animated:false scrollPosition:UITableViewScrollPositionNone]; +} + @end diff --git a/Classes/ChatsListView.m b/Classes/ChatsListView.m index 75d816954..a3acc5b7c 100644 --- a/Classes/ChatsListView.m +++ b/Classes/ChatsListView.m @@ -35,6 +35,10 @@ selector:@selector(callUpdateEvent:) name:kLinphoneCallUpdate object:nil]; + [NSNotificationCenter.defaultCenter addObserver:self + selector:@selector(ephemeralDeleted:) + name:kLinphoneEphemeralMessageDeletedInRoom + object:nil]; [_backToCallButton update]; self.tableController.waitView = _waitView; [self setEditing:NO]; @@ -146,4 +150,8 @@ static UICompositeViewDescription *compositeDescription = nil; assert(NO); } +- (void)ephemeralDeleted:(NSNotification *)notif { + [self.tableController loadData]; +} + @end diff --git a/Classes/DevicesListView.xib b/Classes/DevicesListView.xib index 385b73d84..c0e97cabe 100644 --- a/Classes/DevicesListView.xib +++ b/Classes/DevicesListView.xib @@ -1,8 +1,11 @@ - + + - + + + @@ -15,19 +18,19 @@ - + - + - + - + - + - + - + @@ -81,5 +84,14 @@ + + + + + + + + + diff --git a/Classes/EphemeralSettingsView.h b/Classes/EphemeralSettingsView.h new file mode 100644 index 000000000..0bab2880c --- /dev/null +++ b/Classes/EphemeralSettingsView.h @@ -0,0 +1,36 @@ +/* + * 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" + + + +@interface EphemeralSettingsView : TPMultiLayoutViewController + +@property (weak, nonatomic) IBOutlet UITableView *tableView; +@property (weak, nonatomic) IBOutlet UIImageView *icon; +@property (weak, nonatomic) IBOutlet UILabel *explanations; +@property (weak, nonatomic) IBOutlet UILabel *titleText; +@property(nonatomic) LinphoneChatRoom *room; +@property(nonatomic) long selectedIndex; + +- (IBAction)onBackClick:(id)sender; + +@end diff --git a/Classes/EphemeralSettingsView.m b/Classes/EphemeralSettingsView.m new file mode 100644 index 000000000..ab34989a4 --- /dev/null +++ b/Classes/EphemeralSettingsView.m @@ -0,0 +1,159 @@ +/* + * 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 "EphemeralSettingsView.h" +#import "PhoneMainView.h" +#import "UIDevicesDetails.h" +#import "UIDeviceCell.h" + + + +@implementation EphemeralSettingsView +#pragma mark - UICompositeViewDelegate Functions + +static UICompositeViewDescription *compositeDescription = nil; + ++ (UICompositeViewDescription *)compositeViewDescription { + if (compositeDescription == nil) { + compositeDescription = [[UICompositeViewDescription alloc] init:self.class + statusBar:StatusBarView.class + tabBar:TabBarView.class + sideMenu:SideMenuView.class + fullscreen:false + isLeftFragment:NO + fragmentWith:ChatsListView.class]; + } + return compositeDescription; +} + +- (UICompositeViewDescription *)compositeViewDescription { + return self.class.compositeViewDescription; +} + +#pragma mark - ViewController Functions + + + +-(void) viewDidLoad { + [super viewDidLoad]; + self.tableView.tableHeaderView = ({ + UIView *line = [[UIView alloc] + initWithFrame:CGRectMake(0, 0, + self.tableView.frame.size.width, 1 / UIScreen.mainScreen.scale)]; + line.backgroundColor = self.tableView.separatorColor; + line; + }); + self.tableView.tintColor = UIColorFromRGB(0x96c11f); + self.explanations.text = NSLocalizedString(@"Messages will be deleted on both ends once they have been read and after the selected timeout.", nil); + self.titleText.text = NSLocalizedString(@"Ephemeral messages", nil); + +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + _tableView.dataSource = self; + _tableView.delegate = self; + [self setIndexBasedOnRoomSetting]; + [_tableView reloadData]; +} + +#pragma mark - Action Functions +- (IBAction)onBackClick:(id)sender { + ChatConversationView *view = VIEW(ChatConversationView); + [PhoneMainView.instance popToView:view.compositeViewDescription]; +} + + +- (IBAction)onSaveClick:(id)sender { + [self setRoomSettingsBasedOnIndex]; + ChatConversationView *view = VIEW(ChatConversationView); + [PhoneMainView.instance popToView:view.compositeViewDescription]; +} + +#pragma mark - TableView + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 6; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [[UITableViewCell alloc] init]; + + switch(indexPath.row) { + case 0:cell.textLabel.text = NSLocalizedString(@"Disabled",nil);break; + case 1:cell.textLabel.text = NSLocalizedString(@"1 minute",nil);break; + case 2:cell.textLabel.text = NSLocalizedString(@"1 hour",nil);break; + case 3:cell.textLabel.text = NSLocalizedString(@"1 day",nil);break; + case 4:cell.textLabel.text = NSLocalizedString(@"3 days",nil);break; + case 5:cell.textLabel.text = NSLocalizedString(@"1 week",nil);break; + } + if (indexPath.row == _selectedIndex) { + cell.accessoryType = UITableViewCellAccessoryCheckmark; + cell.textLabel.font = [UIFont fontWithDescriptor:[cell.textLabel.font.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold] + size:cell.textLabel.font.pointSize]; + } + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + _selectedIndex = indexPath.row; + [_tableView reloadData]; +} + +#pragma mark - BL Functions + +-(void) setIndexBasedOnRoomSetting { + if (!linphone_chat_room_ephemeral_enabled(_room)) { + _selectedIndex = 0; + }else if (linphone_chat_room_get_ephemeral_lifetime(_room) == 60) { + _selectedIndex = 1; + }else if (linphone_chat_room_get_ephemeral_lifetime(_room) == 3600) { + _selectedIndex = 2; + }else if (linphone_chat_room_get_ephemeral_lifetime(_room) == 86400) { + _selectedIndex = 3; + }else if (linphone_chat_room_get_ephemeral_lifetime(_room) == 3*86400) { + _selectedIndex = 4; + }else if (linphone_chat_room_get_ephemeral_lifetime(_room) == 7*86400) { + _selectedIndex = 5; + } +} + +-(void) setRoomSettingsBasedOnIndex { + if (_selectedIndex == 0) { + linphone_chat_room_enable_ephemeral(_room, false); + return; + } + + linphone_chat_room_enable_ephemeral(_room, true); + switch (_selectedIndex) { + case 1: linphone_chat_room_set_ephemeral_lifetime(_room, 60);break; + case 2: linphone_chat_room_set_ephemeral_lifetime(_room, 3600);break; + case 3: linphone_chat_room_set_ephemeral_lifetime(_room, 86400);break; + case 4: linphone_chat_room_set_ephemeral_lifetime(_room, 3*86400);break; + case 5: linphone_chat_room_set_ephemeral_lifetime(_room, 7*86400);break; + } + +} + +@end diff --git a/Classes/EphemeralSettingsView.xib b/Classes/EphemeralSettingsView.xib new file mode 100644 index 000000000..d5bdf2a17 --- /dev/null +++ b/Classes/EphemeralSettingsView.xib @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Classes/LinphoneManager.h b/Classes/LinphoneManager.h index 710338ea6..319302535 100644 --- a/Classes/LinphoneManager.h +++ b/Classes/LinphoneManager.h @@ -59,6 +59,7 @@ extern NSString *const kLinphoneFileTransferSendUpdate; extern NSString *const kLinphoneFileTransferRecvUpdate; extern NSString *const kLinphoneQRCodeFound; extern NSString *const kLinphoneChatCreateViewChange; +extern NSString *const kLinphoneEphemeralMessageDeletedInRoom; extern NSString *const kLinphoneMsgNotificationAppGroupId; diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index 2c922c24e..1b2da6af8 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -74,6 +74,8 @@ NSString *const kLinphoneFileTransferSendUpdate = @"LinphoneFileTransferSendUpda NSString *const kLinphoneFileTransferRecvUpdate = @"LinphoneFileTransferRecvUpdate"; NSString *const kLinphoneQRCodeFound = @"LinphoneQRCodeFound"; NSString *const kLinphoneChatCreateViewChange = @"LinphoneChatCreateViewChange"; +NSString *const kLinphoneEphemeralMessageDeletedInRoom = @"LinphoneEphemeralMessageDeletedInRoom"; + NSString *const kLinphoneMsgNotificationAppGroupId = @"group.org.linphone.phone.msgNotification"; @@ -591,6 +593,18 @@ static void linphone_iphone_display_status(struct _LinphoneCore *lc, const char } } +#pragma mark - Ephemeral State Functions +static void linphone_iphone_ephemeral_message_deleted(LinphoneCore *lc, LinphoneChatRoom *cr) { + LinphoneManager *lm = (__bridge LinphoneManager *)linphone_core_cbs_get_user_data(linphone_core_get_current_callbacks(lc)); + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSValue valueWithPointer:cr], @"room", nil]; + + // dispatch the notification asynchronously + dispatch_async(dispatch_get_main_queue(), ^(void) { + [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneEphemeralMessageDeletedInRoom object:lm userInfo:dict]; + }); + +} + #pragma mark - Transfert State Functions static void linphone_iphone_transfer_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState state) { @@ -1356,6 +1370,8 @@ void popup_link_account_cb(LinphoneAccountCreator *creator, LinphoneAccountCreat linphone_core_cbs_set_call_log_updated(cbs, linphone_iphone_call_log_updated); linphone_core_cbs_set_call_id_updated(cbs, linphone_iphone_call_id_updated); linphone_core_cbs_set_user_data(cbs, (__bridge void *)(self)); + linphone_core_cbs_set_chat_room_ephemeral_message_deleted(cbs, linphone_iphone_ephemeral_message_deleted); + theLinphoneCore = linphone_factory_create_shared_core_with_config(factory, _configDb, NULL, [kLinphoneMsgNotificationAppGroupId UTF8String], true); linphone_core_add_callbacks(theLinphoneCore, cbs); diff --git a/Classes/LinphoneUI/Base.lproj/UIChatBubblePhotoCell.xib b/Classes/LinphoneUI/Base.lproj/UIChatBubblePhotoCell.xib index da225bc9d..d320d6580 100644 --- a/Classes/LinphoneUI/Base.lproj/UIChatBubblePhotoCell.xib +++ b/Classes/LinphoneUI/Base.lproj/UIChatBubblePhotoCell.xib @@ -1,9 +1,9 @@ - + - + @@ -15,6 +15,8 @@ + + @@ -167,6 +169,17 @@ + + @@ -177,7 +190,7 @@ - + @@ -202,6 +215,7 @@ + diff --git a/Classes/LinphoneUI/Base.lproj/UIChatBubbleTextCell.xib b/Classes/LinphoneUI/Base.lproj/UIChatBubbleTextCell.xib index bcdf8588c..481e4541a 100644 --- a/Classes/LinphoneUI/Base.lproj/UIChatBubbleTextCell.xib +++ b/Classes/LinphoneUI/Base.lproj/UIChatBubbleTextCell.xib @@ -1,11 +1,9 @@ - - - - + + - + @@ -15,21 +13,23 @@ + + - + - - + - - + + + diff --git a/Classes/LinphoneUI/UIChatBubbleTextCell.h b/Classes/LinphoneUI/UIChatBubbleTextCell.h index bf34937d2..6778a8143 100644 --- a/Classes/LinphoneUI/UIChatBubbleTextCell.h +++ b/Classes/LinphoneUI/UIChatBubbleTextCell.h @@ -45,6 +45,8 @@ //@property(weak, nonatomic) IBOutlet UILabel *imdmLabel; @property (nonatomic, strong) UIDocumentPickerViewController *documentPicker; @property (weak, nonatomic) IBOutlet UIView *innerView; +@property (weak, nonatomic) IBOutlet UILabel *ephemeralTime; +@property (weak, nonatomic) IBOutlet UIImageView *ephemeralIcon; @property(nonatomic) BOOL isFirst; @property(nonatomic) BOOL isLast; diff --git a/Classes/LinphoneUI/UIChatNotifiedEventCell.m b/Classes/LinphoneUI/UIChatNotifiedEventCell.m index 3057bc138..510d07e93 100644 --- a/Classes/LinphoneUI/UIChatNotifiedEventCell.m +++ b/Classes/LinphoneUI/UIChatNotifiedEventCell.m @@ -146,7 +146,20 @@ static const CGFloat NOTIFIED_CELL_HEIGHT = 44; break; } - + + case LinphoneEventLogTypeConferenceEphemeralMessageDisabled: { + eventString = [NSString stringWithFormat:NSLocalizedString(@"You disabled ephemeral messages", nil)]; + break; + } + case LinphoneEventLogTypeConferenceEphemeralMessageEnabled: { + eventString = [NSString stringWithFormat:NSLocalizedString(@"You enabled ephemeral messages", nil)]; + break; + } + case LinphoneEventLogTypeConferenceEphemeralMessageLifetimeChanged: { + eventString = [NSString stringWithFormat:NSLocalizedString(@"Ephemeral messages expiry date: %@",nil),[self formatEphemeralExpiration:linphone_event_log_get_ephemeral_message_lifetime(event)]]; + break; + } + default: return; } @@ -174,4 +187,17 @@ static const CGFloat NOTIFIED_CELL_HEIGHT = 44; [super layoutSubviews]; } +- (NSString *) formatEphemeralExpiration:(long)duration { + switch (duration) { + case 0:return NSLocalizedString(@"Disabled",nil);break; + case 60:return NSLocalizedString(@"1 minute",nil);break; + case 3600:return NSLocalizedString(@"1 hour",nil);break; + case 86400:return NSLocalizedString(@"1 day",nil);break; + case 259200:return NSLocalizedString(@"3 days",nil);break; + case 604800L:return NSLocalizedString(@"1 week",nil);break; + } + return NSLocalizedString(@"Unexpected duration",nil); +} + + @end diff --git a/Classes/Utils/Utils.h b/Classes/Utils/Utils.h index 0cee92791..7289bbe83 100644 --- a/Classes/Utils/Utils.h +++ b/Classes/Utils/Utils.h @@ -22,6 +22,11 @@ #define IPAD (LinphoneManager.runningOnIpad) #define ANIMATED ([LinphoneManager.instance lpConfigBoolForKey:@"animations_preference"]) #define LC ([LinphoneManager getLc]) +#define UIColorFromRGB(rgbValue) \ +[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ + green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 \ + blue:((float)((rgbValue & 0x0000FF) >> 0))/255.0 \ + alpha:1.0] @interface LinphoneUtils : NSObject @@ -31,6 +36,7 @@ + (void)buttonMultiViewAddAttributes:(NSMutableDictionary*)attributes button:(UIButton*)button; + (void)buttonMultiViewApplyAttributes:(NSDictionary*)attributes button:(UIButton*)button; + (NSString *)deviceModelIdentifier; ++ (UIImage *)resizeImage:(UIImage *)imageToResize newSize:(CGSize)newSize; + (LinphoneAddress *)normalizeSipOrPhoneAddress:(NSString *)addr; + (UIAlertController *)networkErrorView; diff --git a/Classes/Utils/Utils.m b/Classes/Utils/Utils.m index 0fc436eac..4f6d1249d 100644 --- a/Classes/Utils/Utils.m +++ b/Classes/Utils/Utils.m @@ -30,6 +30,15 @@ @implementation LinphoneUtils + ++ (UIImage *)resizeImage:(UIImage *)imageToResize newSize:(CGSize)newSize { + UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:newSize]; + UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext*_Nonnull myContext) { + [imageToResize drawInRect:(CGRect) {.origin = CGPointZero, .size = newSize}]; + }]; + return [image imageWithRenderingMode:imageToResize.renderingMode]; +} + + (BOOL)hasSelfAvatar { return [LinphoneManager.instance lpConfigStringForKey:@"avatar"] != nil; } @@ -918,4 +927,5 @@ return imgRef; } + @end diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 6b66641c8bcad2086dc1f5e9886d8a3c4624e8b5..a6921777283f02b6a3459d925a1e1ca1157e6be4 100644 GIT binary patch delta 14 VcmbO?i+Ry3<_&UZS-2Ru7yv0P1TFvo delta 9 QcmZ29i+SEG<_&UZ0Tg=#761SM diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index b44a1e8489b205a0bc8e89cdb22e2eb751373daa..98505bc0a52cc419c395ad4776d5ad45a896e680 100644 GIT binary patch delta 911 zcma)4O)mpc6unXsDppO+qG>X1Vxg7R#EuY+bVt&yg~XV7)uCVdfv)%gc5i7R@e4F; z`3p8yeu4Q97S6p>rdmQKZ$8dDbMCqKou`M$`(xy8J!T`|iC!UMMv3yuoMM2&`wD@1sl zC-;WFe4dr*W08nJ4#Z~{SRsY2(JnVm2RG6R`0HFT#QP*};HSq*Fxj0(d z{ICGIc{^EvEWB(i0RXSH+8mo?!uI6aFEcDh1YDwi7nZCCRG*hC{xJ$l*<`7 zF}{6*ZdG@EU*B5;gn+R1KZOLZ_lQkCU%TwK@`oRL=bqq%m@?ds#z-FX;l|Hy?tI3! zkRI+{LLM}~1QzjxwpO0v9BH#rm_| z-MdA8g;aTSlvCu({Bk9ok!VDG_1p96OF-n8{B7Qr)Z5wl*ZYDIl~DZE*$K0&jS!Rh z*L#Tar}ypFx381YlQ-($lfT{zHZwjSd4#B5E%(*Ne*&lY+|i z1-nvgth2-j=g{25iRb1>aOj&s`z_V;?-kFNkNn*TWeb?e?88wgR3V|C8I(1(qU!XZh&Q}@haL}{Jb$1>EKj%|Oa zJRP!g_B@SZFrHd8M1|3qYg*X*;4^5>ggsYwqKg%mB+Joi+S=6JvoYwjnOZJEyA+pY z*;Q)V*|)CDt4`K(*tNDUuOFk!PxZQ;wYG1*;m)HtaC9the}rgR=GYwSluh%kpSv;) zS{-Pl*LJO)+MRbSz*4ncbgf_d=4_)%JKxg&R{VZ(&(757u`u1P-~G_Ge)ZgGyOZ4( z`0;8~qx)Q^>qlSuw3J^xT3xqH@)JHdrHIpP#1ys0YY7oJr($=gH^ysw&|=vqm0Tna ztJA{e09T7Em!TAS5T0-M^n2o?+TFGEzZCPeFu}|C?`vd&H~sSJ>=CWHZN&Ag_AfOO zXSraK|NDE(jwu0I>rKLz6^Zwg7w#p4+0*dCH^V!D5+mxF-dNHR|8&fYLz<~r}Xaky6(cX1})kW&` zqH2D<2=!rF+Rtp1+nXHdBmZf=xOJR zNJszNW025h=SjDl%9c)aaU@4@?H!(!&G-H1{YT*u561j${pwPQ`Mz+w>TXKWTHek- zG2#p`vz+q4gU}?8QKMsqn;Y2~WrE>&(lzukxg#M#B4VdUB=eZyypbKs4B|9O zoQlNKc-r2@`e%+Eg`%&wmpSrRPK%vU!yAf4sj8G?n-|IAV&^I&0xnI&g9F#7v;6Pv zKegFT{lW>G@eY*J0OAoD$kmMoJTr#{RdLL7f#g>BvalG21Il&>gU|E!k{&LPJmdF9 zXDM={^V{)Dt97*4j{D4><~40j>sTATb*rp15A8x0G=SPVZjj0g|K>ZP-~a<>;gG&- zOS4i|#TLO3aZMD7IMcPJtIPH(m#E+RDwI!Ogr@~@q1=)&0vFFfO1Qmi-gJobYPZgT z4p`|EE+GAi3H0In7v)^~g2`n8*QhR!@?ZO6pAmF^3@$yU4K3ZHC0CKpzAdj^hn_WCz7j=je0wOHMT=J1-C18DZQB zlVob^@IUe<1%@b*eT3fQ93)+m{^R!YKh;OZE!kQs4G_2Lc1GIvqO1$D9cNtCj{%-_ z=AIAbHA8HGp-owSX7b6qPFwOrL%OMd%(070Ut!ceNDnsJ61a%d{qzEg1}Mf3Urt6e zH!zS$lRz#vSng~>p^Tf>C}03$g5BLbCKH+Ad84V;a4Zs^p}5;cH(rHF8r%Ni)Ar)| zcRzC;-z?`I;wj@!3eGi#tupv9Z;@3FhAN7!E`tG7QahT2E7RhU3f+`OE5;U|*5$tk zr2+8wUKd2A4JK?IcYv(4^?0>s`g!TTeD?zXTlZy-?Zv^c*JEhhlJlo+I7v;oREV7k zH|j$R?VQ>m0%%H^r2CF;?0|!T=ObxrRMk+D0C>9tv~2IMJ^td+xR)k$)TI8W=B!JV zW#}VMV^MrNl;7kZfN$7j>@Z;&cHiyBBQgOfuhi=AJEnWMJ5WKG@KFrOa{Cj?JEk+s ztBP&vQ8>a?tV%mU=`^*tgQEa@W9QK&XUC^Cfqz5tJ65b}sE`428HEyHm0212grzN~pSMW2T)vcLu)V6T6{WQOj z>5T2z{x-OP*?N->eHnhcD=kAzAc#NfwyBf3TlXgtGTin$DkjrJC{_1vPK0)WtgR|~ zq!b7!Yu3Mj%OOe+czSeVPmN)LK;UC{f_kci7gdE*n54wdLQ)vbwj%$YH=I!lQxW9k z$!6D$QcziNYW!{RDYdOlWF@IGyea#IzD0m4K<5}S@l*Uy<$7oin$HS^L4jBp30H#I zHm?kPS&_XC-TSxB-@#_`;~<&H3UAEHx2GqutmE$P&_@WQ+fZp(6|Kt{gV-Nq@922C z%7NnOopxus-w?UV{58T;^Cc|U3^cKiy15L~+>!2z*ymA{>1Byxp)K&xgG63Qk6(kY zM_EQNT)ZSnN!y()s0R^zBppSKD9C0vO5ea5Op@`ChT=Y5{>A(6qORHKziwucOC6EkF!`%hSj&ZPYR{&E0L5>`QfYY_>+nU)SFn;=RJ* zEhPnKKh)nSy$`w9VAMbz?c^^M)*VnGf+4B+iK zbTWA~(RflUP%Z$B0}oDvu~+jYjJTe?I|7wIu?s1~Bis)E;W9B}1@3A#6>VaiMo=>u zIScoq8@V0KRk8*25U7)g^gR0AuPDeqOw@o>GA&Ew;zQA2(QQMm`SJ%XiZ$OPr0zjJ=8DS7 z=0YvLIu^kwIHJG;dH^FHABTRw@Q@qWc8_an|DJ{`5edg2N!uJ{HrNMCGv!AJLWDts zKI6bp*qFvG3RT)R22ILb0Ony~5}6Y`d-Qh;EKT&D;(W~8N|2$719E^Lk;Ms;4y;^E z!8Pr^y)8&KXT?M)37sfP^b**<|NUGWY(hwqVx5;2A9h(Z*Cb?(=;@l45=DDg`?5B!n@%^DSkzjdT7DN<1N*)2Pp+zEjt^$nve7A9|<0)|p1%B>_u1B>1>^}f?!-w$zj z8T1Cotfpx85^`l%<@>Qmm@8-~m{*tNt?v#~{i#iHKB+PdKd?Zdt`&Vj27Mq($NpAh z4k`-q_X2!avW3XkGp2hn!EFM9U6kVRw>6#FT%G&yM)5%Ro}mDjyt!@KCo2ClwG3(F zVO|gaFgIn9L?}KQ)}BzsD0Ds@ns2)fG6~g1vKS%1Krr`C<@-E|F}Q)RRNan7n*kx3d+3R3J7u@VhSf{}1$QsYQFV-7->yrT(pqR4;4 z`u01YdG+`7BuqhMfkVT91Id6wQnJx`4H^;{J&HmBSv}vj%an< zX`FLVw3OZanp&YVPxy*fjs=$u@F)0mI-UO!x`_0$o%`IU69bf~XNIIJtFzi@q=Vck zwhMe?q~hf{v2r5jqdTGoUQ)sdk|^NSM+nX9tHwi|OAdmKg@^@=FPsc*P^ zS4Q?5&x-OnXt>~ zcxcDK;XsgVjqYR`)>U>l-+P0Z_=2w4$ffMn@R7ozx_7q9VIiL@!(Vtj+LM64*qfQ< z$Jc>;-j}C9(@BfkpoYXmgjtQSkvmrNgSbSF-Kr{r?d<7sx<}oe06O1~nF?qCp zVuW;d%E&k+pFC>ysNTGd0Fpq$%A*hGHCGQka^&T_XwP8AuwVxg)xnf`{am9%N#a6x zLo$MvYwDgJ1Plv6q+^Eu%@fcrJToR7`XCME@+Xz85i=pkhsh~0G@dT>`%Lnq$RJs< z}jlv=otx5h_!Vn~c@yh{$%D|O*Y=ZDWm_p&lohWN$bpIi|2N8yzdwm58 zc0tm(1}D+&w_Y-xf@-Cxu!mZ&yb2cPF-RjNxE)S{swz$=S#(|fH5!+{Kkl0W2qGLE zP7RmY(vU9^El3=g>Q82U<+ktili#FR+!d2z+Wa(0wmmT^f~aW>?Qwyjh!h)tsq{KD z(}1C^+&kf0OM=$=YkEP)*!6}H=KBbx`dGiT|5YUpEoy3<0;!Y#ZD8k7&@~%(RRXWi z*V4F7i1KJq6XD9_E$GSWPjte2gfG=({brR)bzEQD|FGW#L!tfjwe*w!P9LGpIiYyZ}nd3o{;?x?DQMZjQ_9*JN` zD4R$~WjVy@ji;0nzjjtytGyP-C3a>1=U)konH>fXMIRT=gP5ZF>^{l9(1WIohG{(0 zIB+ry<|e$xVcnXRD;#t5#eM+3^|AdPXb*@FROe3J=eND~NYP zgDK>2;qr>ijRtfZBp-=GM%Iu%8ydv6J;;m9L1IoPl5SL1df6%@B@naduO+T3dHV9I zb`kO;J;i6BahM!&=8Jxmo=~>Lw$QtO=$c0m-xa?xBhFEOV<6QoI3jD-24E>S?+SZ{ zJRvq$>YTOZJ*reT5;L{Tm%go*WtC2<}o!qF08?J*{I~LOYmfC8Y1N%}O$@@%}C8%S}?(hX7yafOxv>6P(eo$yk-f$;Q zoIANJcWh39%3PmDxhO2^v?2;rJ=($7M*ScGvEHwLOm7-;9rYQ{ap~ZYfGPybTV|hN z^{+~r4d&$C_s7qeoN-u@)NmPLnQv4HR@q3Bv14p-h}4?Ib%`t#r}Eg8c6;UG&<(P1 zvFbu%5X9J)Pf?WlUbYv#+lr8}5eC0o3YzJ1s+82huQ~LsL2N>7Q8Z#n0(4(5XsZ0h zA`7ISW4wV{66f%?IxD#L-u@7>bVp|LR9W}Xhp6p^P5G88wLtJx9>gQ$jmacZM2aZ} zI`>j)XlVowRUiNsh+es=qgYl~&`c_;u~u&zT|XRVHjsQV+F{1ljJ>hzECbbXqQ3E`YYN>ArVPIn^9XO zuKo{cHL^ys0SHBnyB&UkCO;DFDyl@_UGnjv^l809_eJ~T->DVZ|KApO_!Rer6e) z#2oQPVU)tkVre`2JVp!Q((rP-3Sl&we>cf&<)>!*LSgOROEjgIOP|}7L%YN`_K)p;D%yzW(=xi zZ9hPfU3CUxq`CBB{PUt}DWoQt+*bG|@kb1}={_)f3MNQ|i9w&x*g5hBY0|AILPGdb zR?IV*o2kVw1tvMR`}lmc>yWjXjtx5g=7&M!C*!I0{UBinzF5Myp85(YDj_$JE}eF| z^C~kVFb=0QD4&WPS_hYlO2r}jUi>1DQVGITWS5hn7Ly<5ss zRA(Ptv{kYh3~CkYYh7HqJ5Up34N|7=xm6lrMOn`H0uRUO>*v zfdVIj)0{h);CHuK2Lx_h_>iLTDoAONm=>87x?7FOPFF)uz5rxDK)YgbB+NvLqFZb@ zCz@8P9IASTzY|d|caPGsaQq{MD(w3mR!F0?9KpuhZdv#Kko(%!LV75e7*Xu}!myuM z!yDutzVUl2Jes@E3TBv}5R0)1xN{!ZU_BKZ1TYJ2-4lN){>d;tiGsQS?Pmh2z~ z)h~!!y@!2X);}eB0Cn>Y46b(dADaAYh;UH}*CouX6Q()MRn*ehaYqt=s=ClSaB&mr zDF1BZ>mxPAAqX+KF_qp@)U*;c}0(<1J&n|Fx|%jZ0BRvL4Vn)QMTo zvPu`ypg;S=@`4emmF*<{kGKyYmw7!NUo*)4oEy0zd^N` zxC(Kk$bpK-t~f(L1v;caUB;R$uScAbDFv>o0KEur)+{(oQW#R{fEM!}yU3CJbsu>L zELU}xB7I#}w0o7_kGl3ZPVAwuHkW=7?%AoJ;4u?>j*WYxx{3=;WTU~u`fphxE7t4v zuHoDJTKRO7?>3t1{lx;|kO&u;UH3ScQbRpfUrw&nLz)W{)u7G9lw=g5`DxE9z%YeJ z5QPM)Yb~uVeIz!2TQim((svGj98#)DcM74YoZDN)W`{dl1wZdTK@Xy5v13m?V>FA9 z@H96|Q|;tJA=3s;rq@GXGyB25ki22uI2X7e1dPZj%`cjaBzll`gh<4~!h_|ec-5{< z?LO7yukdz}_>(Vw3%#bA@F7F_5W;}T){&s3!itqBGF(WjJv48nMc=d5ItOxQNXQfr z<6XFhPD)J!i4bio;=>LX`tMtQlYf@~k?4Z72`^C#|M$KUg|W2GrD~mBp4q(X)ov-i z!2afN4o565&o=V(G3#})UA=X@%%AFOgBLaU$*(PUk-r~`koJx4XKpBQyfHLU8Ja#Z zI57a4si>_kQX z-NZ|=Fg~NIV7lZ!6~i<|TWW(R8Is5{l_OTfkcWifAAA$lw1O$CCmJF)4mc^l`)9dpu=GRs-bmF6gidPPy5=t7&+8V=|Ozz<3{tFqVD*g^&V*eMa3Q_{T16n9XzBuSw1MF(0RTu;Wg8Z}cTg>&QpJ*Gc;N)i;6l^u1G~=*5?G^Go&;Ac zso^$j{&lmsZZVnc81Ai_cmG%(+k=Q&lngD_Tmo>tw9{B8m25RxZ-%pTvv%9I%W1D+ zUrLb(OQQsSHqv$6&nwkU>_!X54Cl_HX z6dOzGk+!CZ=GoaUHP88cz+z5Ic<5VZ1}`;IYV$VA{+ht*Ut0 zioX06<-|h#5J?5nahBpME%3n~QsG9Kih4$4GtkQxkW(nc?wQdx{sK?FDthV&Qz1@l zebTv>^et7#qYbf3ZGxh}d{%?4H(Y$D;=UVz+;Nq7JWo{wrs~h&Uh|1{LcV?X7K_3U z@bl^jg5xA##Vn8om=Y2)Csc&CSDiJtM?Eib>S#;NI**vjU}q{*J&JM)l7uKln$+|Wzu6|26#3~SQVB$;-c<2bO zy6}c>N-U5Q9sf|HJMP)*I*buH0lG669y$kI0)+#r{fC^&Av8d0k# z0bWuM7U#rgMLlzf>afb9=1p#Z><5ey##n((^Mm?ZZ_p3@q_+hP~cQ&hkSM^(_?N?ScJoj>2NXN(}!PoP0fK# z7psWft>n}XHKeeYB-cbk~p@z1$2Qzcsi3d&N5XcxJ6m56_}IwH#EK#Xr0PR2}((@ z;kquLbTCeqE#9cXebDRp8Y4;tHbltUtWG&~@*=}@Z~B@~t5TA?4<>g-t{3M;iFeP? zc5$9`7_L|DQqa|$M?YH&3e=b+BWIFTnv$2f2Aa0V11{{DJWC$k$hlW!dfr?vr!8EJ zH6t#wYOa*_k;c?o+NpYW`-G7zvL<1yL}cOds2MW%V&D5r+OZeirCDoo-4WchOQ^9;cep!+7hZUK!4VJ_)JGzbBnlmODHf)c~@ zVl66hlFppMyRsQ*yQjXASj7qB8HO==@Zb=rn8hBfCB~18DQfySJn8{$a0ZEyZ=YMq zC0P=y7zG5{IxR?gXvI`V1-QY=A;OdRkqgZi^vPI#x%Fx zi5~8&KSBfq+F=Ir_(ZBa?sB@Et~0{}8Ht$lJ!Uak3+^#TO7Gr(cDZ#`dCmbVO3GS> zW5pv0gQg9D#TYNZ+O{FkgN=xPTfGhZ;9O7?=lqr!3gH9?y3@b$1XXSkUf8M}4^%CF)Jn*SCTgzJJ; zxkO35$Zxi`yJ_HWQ_|dm^yq+fD7`ZzD!%A79Ev$pX6V96(=Lid6h*^|H!JvJht=#YS}#^&9riP&EbS=UZ+X z6?|(@#mq@%85*t^s}W#bS{2Y|7QA%71A{pnGgZ*)kBe>Peos7r;$ugrO_J@ zUOqz?=|8VZdG)E-cxK7tno$PbGaE;4;eo=_s%!>QY)Z%; zThGJ7@wUiOP?%t9mEYf;LFc`-yFt1VT67-`-uAL-d1F-RzLC2gwIlIuYUGai0rn6D z{}DRRArC%91w%|IH7lI?bHfKeaMYU<4B&5uGL2?-ur=a&J55lwm4?0JV&C`4Q%z8} zG1`HhLp~$TMGGqlr`Fb-V5u1mH}XRqY9T8U{fUSm(7ZLTmK&9__LR+|ExIfUdGm|7gs z5O?sls#S(jwouErou;FP^m61hfs~KyI!>a;r+#U6mu+JYEkG38%~ znMWmplrBO}#EHU}Z1S!xLQ%mNwp_?~2{Sm@7hH8&fqGcZL>Z&$A*Bc0ZTw3r*M%JX9sD96kQ(-RxNA9e6dds9A z!@CGeY+Xj)qjn&Sm56Ov0^g!?YHK|E`r9dze0v9Lcb)=s6|84}3eq4gmv8m4>K}aN zcWoKN%yZ_W{bWc#=8IIr@DX08;RWAH!)fM?`JBhA4noS3n}oZ2xccViO^bXn47qThVCtF zf6{TvYXneBt8C3dXFa?>^j{=gffLsM`96I?z$tK06c-R^0RRx8HezDRGGb!?zZ393 z|6h)O(s$`0VZsq3wN|n;RP1jmW6HS8#W;2ww5^zR%A-I0rhLN1uefw#%kqC5k+Ya2?W3P~K(@Zq8HGPz|Vh z_-NRS${_JM=`4EEG3O2yNr3%FS@PYmi7D&Ws4PKqa3#7Dx|F&?xgY68(}Z_Svu0J( z;rAD$5FLMu%rlM%;BT^YkVt4ST{KN$FikBVEp~DX$=x*?UqF;TVrR7RzP2zPzWHyo zPq<&*tu85;4yr7$Zhe0rf5QX+!r*hRe+sr;j3R6Y!q(lV|I&xE6qKoNZ5cxcuE8?Z z>18#+>0bh%l)`^Z#P65W?z{BA;rXk<9(Tj|EN^UPz47=1R2MaNVR?9DKJ2QJpMb&O{HZFFE@xpva|)li8EeCQiuIySy>x}6k4fY0}q6*%6F8X zfBiLO;CCuIXzQYj$y9|z!O_41GGPgLWpqe&=n8lUy8jRW7OAkr{}TTp|3icVu>P0$ z-%)8@iR?Aeb*MJU^E##Yd7vdXm~0_>6CQ)o>PC-Uj9!m$-Uoxmwb z`ovAGMuef)o*bnWJXMxNhlLQ0_KA~64z)^%hH%xdq|_=-aO?8zomQ_7e$LO|K2@zu zU3=_p=lCeL3-kLJ4RuHFS$|&7r?k4n?sL7hU0!PLQr9Z>GMJJX6k7S%5A0R}i}S4b2X(7RC08P^j|-g59ai+}=@X5l z1-9T@4KTpXcZwm^Y)F`>H5saaHH!~RIS9t4AF*N#rU6en2~HbA!!Aeyj9Gl<#(Yb;eWmI|PM{&o;qJmtYdI03gFM* z_%(bpdb9QO3b_bfXzJECppNshrLybZp&%$1YPqnWO^{ajwA_KHw?bL+!zAhg(R$^X zQSOMALdG)OUSdbV4{BONH~*=hoec{6f;uGis@s7`1G0jjE)lXCu|l(5x4`2<2XZ9< zqRd((`dsdAte}^nvNT{L6+@WvA>}s6-5fy~7kj^OivAByT((cR`+6`qyn46dm_K$Z z=bt;yV!8#_hFcy+fkjO_iwDkPv7;1(4UNS(>((G{C5gTB(#~%HRumN?cPaGo#~Tlw zOJQ&}8QT8{X)8Wjc~+htlFo*twaWALw@MO{7GrTfD72aw(p_USGty~E=wV4QgqhIY z-x7CD+P`%HbWcsCl5?-b9;VNsVd2IdF}H#?aMh~{Cv{*=>;~5*7W=+Q-?PU7o7sgHBJl+F97;I{ZC;-Ae^hUi znwWN|yQpIG=g`ilrz}7pN2U1x+7l>n4+o8T9_{x8ha+ACe0?RT`Oj144j-(QG2-CY z7f+dwNPH|(_5z2O4K#N;n=NqhZ6`^|c?Azi)9IqcB8jAHiND(Pw*@8XER?PQ^ZDv} zPm#11*FQowf$NT6AD#IQ@v^T{$?~bvN@UUe;iX4m3%k+!hs9+O0I%7jV6v9{#LKI1iRcSM57T zy3fw7DLpA{EDEyyAQ&+-p7S$nJTv9UBg|RCDbba$;62SF7}VJl>+0TV%0jiStKnAa zDjgxcZaEL&JzAOaIFF?LRgzntRL!mC>(J1E3*n^1*)x(vC@3xIPUdB= zH%*0`53I6V{;OA`kMs2DYFdN~w_2Dq`@W=$v$yvTZcznCiMC+fIU(H5`qU8ta97g@ zx=?95P-)nyaTQ*h)SjpS+`DKBnswF^KOoz1OSL+gbyW9yJu=Ksbtc^t*Xp#CE$Ed* z2mIdyNgn^;M=SX>3S-a5&db2qx#oQxJj+0hEBQf62iSTO?T z!L8Vs^XzK1TvA`~!VWRU9!k#&>vf2M0>%QpyO^F(eSYY%*vGn`ej|J(ox?dBdQ zK%1l*FdB%^1HzTRD&6~ZdXOum?|PLUeM$c%2ivfPQY{6}Hq?*E@A>}swF3Y$5{lw=qQ=4h E2TMvgL;wH) literal 0 HcmV?d00001 diff --git a/Resources/images/ephemeral_messages_default.png b/Resources/images/ephemeral_messages_default.png new file mode 100644 index 0000000000000000000000000000000000000000..fed52afb5bbdea1552980b754d3e74eefd30a793 GIT binary patch literal 14110 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 J8qse-{{ucw1&jay literal 0 HcmV?d00001 diff --git a/Resources/images/menu_security_default.png b/Resources/images/menu_security_default.png new file mode 100644 index 0000000000000000000000000000000000000000..51ee24fd9523557a600a61fb894e5b464c41262d GIT binary patch literal 3625 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 literal 0 HcmV?d00001 diff --git a/Resources/images/more_menu_default.png b/Resources/images/more_menu_default.png new file mode 100644 index 0000000000000000000000000000000000000000..aa544d0edd57bf26392bbd00c6bbd5e56b93a71d GIT binary patch literal 3543 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 RH;e!P002ovPDHLkV1mnD$3y@C literal 0 HcmV?d00001 diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 71986178a..0a53db91c 100644 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -674,6 +674,12 @@ 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 */; }; + 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 */; }; + 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 */; }; C666756F264C925800A0273C /* VFSUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA657B261C950C0020CB43 /* VFSUtil.swift */; }; C6667571264C925B00A0273C /* VFSUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA657B261C950C0020CB43 /* VFSUtil.swift */; }; C6DA657C261C950C0020CB43 /* VFSUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA657B261C950C0020CB43 /* VFSUtil.swift */; }; @@ -1710,6 +1716,13 @@ 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 = ""; }; + 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 = ""; }; + 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 = ""; }; C6DA657B261C950C0020CB43 /* VFSUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VFSUtil.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 = ""; }; @@ -2063,6 +2076,9 @@ 631098471D4660580041F2B3 /* CountryListView.h */, 631098481D4660580041F2B3 /* CountryListView.m */, 631098501D4660630041F2B3 /* CountryListView.xib */, + C64A854C2667B66900252AD2 /* EphemeralSettingsView.h */, + C64A854D2667B67200252AD2 /* EphemeralSettingsView.m */, + C64A854F2667B67A00252AD2 /* EphemeralSettingsView.xib */, 61AEBEB5219198EF00F35E7F /* DevicesListView.h */, 61AEBEBC2191990A00F35E7F /* DevicesListView.m */, 61AEBEBE2191991F00F35E7F /* DevicesListView.xib */, @@ -2439,6 +2455,10 @@ 633FEBE11D3CD5570014B822 /* images */ = { isa = PBXGroup; children = ( + C61B1BF62667EC6B001A4E4A /* ephemeral_messages_color_A.png */, + C61B1BF32667D202001A4E4A /* more_menu_default.png */, + C61B1BF12667D075001A4E4A /* menu_security_default.png */, + C64A85512667B74100252AD2 /* ephemeral_messages_default.png */, 633FEBE21D3CD5570014B822 /* add_field_default.png */, 633FEBE31D3CD5570014B822 /* add_field_default@2x.png */, 633FEBE41D3CD5570014B822 /* add_field_over.png */, @@ -3387,6 +3407,7 @@ 633FEE9C1D3CD55A0014B822 /* numpad_0_default@2x.png in Resources */, 633FEE3C1D3CD5590014B822 /* contacts_all_default.png in Resources */, 633FEE171D3CD5590014B822 /* chat_send_disabled@2x.png in Resources */, + C61B1BF22667D075001A4E4A /* menu_security_default.png in Resources */, 633FEE6E1D3CD5590014B822 /* footer_history_default.png in Resources */, 633FEEB21D3CD55A0014B822 /* numpad_2~ipad@2x.png in Resources */, 633FEDC61D3CD5590014B822 /* call_incoming.png in Resources */, @@ -3530,6 +3551,7 @@ 633FEDED1D3CD5590014B822 /* call_status_outgoing~ipad@2x.png in Resources */, 633FEE2D1D3CD5590014B822 /* color_E.png in Resources */, 633FEED01D3CD55A0014B822 /* numpad_6_over~ipad@2x.png in Resources */, + C64A85502667B67A00252AD2 /* EphemeralSettingsView.xib in Resources */, 633FEEC81D3CD55A0014B822 /* numpad_5_over~ipad@2x.png in Resources */, 61586B91217A175D0038AC45 /* menu_recordings.png in Resources */, 633FEF1B1D3CD55A0014B822 /* presence_away@2x.png in Resources */, @@ -3684,7 +3706,9 @@ 633FEEBC1D3CD55A0014B822 /* numpad_4_default@2x.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 */, 633FEDCF1D3CD5590014B822 /* call_quality_indicator_1@2x.png in Resources */, 633FEF131D3CD55A0014B822 /* pause_big_over_selected@2x.png in Resources */, @@ -3861,6 +3885,7 @@ 633FEF3B1D3CD55A0014B822 /* security_ko@2x.png in Resources */, 633FEE4A1D3CD5590014B822 /* delete_disabled.png in Resources */, 614D09CE21E74D5400C43EDF /* GoogleService-Info.plist in Resources */, + C61B1BF72667EC6B001A4E4A /* ephemeral_messages_color_A.png in Resources */, 633FEF151D3CD55A0014B822 /* pause_small_default@2x.png in Resources */, 633FEEF91D3CD55A0014B822 /* numpad_star_over~ipad@2x.png in Resources */, 633FEDCB1D3CD5590014B822 /* call_outgoing@2x.png in Resources */, @@ -4299,6 +4324,7 @@ D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */, D380800215C2894A005BE9BC /* IASKTextField.m in Sources */, D380801315C299D0005BE9BC /* ColorSpaceUtilites.m in Sources */, + C64A854E2667B67200252AD2 /* EphemeralSettingsView.m in Sources */, 8C92ABF31FA773E50006FB5D /* UIChatNotifiedEventCell.m in Sources */, 633FEF581D3CD5E00014B822 /* UIAvatarPresence.m in Sources */, 637157A11B283FE200C91677 /* FileTransferDelegate.m in Sources */, @@ -4933,7 +4959,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"4.5.0\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.0.0-alpha.109+40dd0cf\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5056,7 +5082,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"4.5.0\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.0.0-alpha.109+40dd0cf\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5178,7 +5204,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"4.5.0\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.0.0-alpha.109+40dd0cf\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone; @@ -5299,7 +5325,7 @@ "-DENABLE_QRCODE=TRUE", "-DENABLE_SMS_INVITE=TRUE", "$(inherited)", - "-DLINPHONE_SDK_VERSION=\\\"4.5.0\\\"", + "-DLINPHONE_SDK_VERSION=\\\"5.0.0-alpha.109+40dd0cf\\\"", ); OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone;