diff --git a/Classes/ChatConversationImdnView.h b/Classes/ChatConversationImdnView.h index 3fd4b73ad..9872e8ea5 100644 --- a/Classes/ChatConversationImdnView.h +++ b/Classes/ChatConversationImdnView.h @@ -19,6 +19,7 @@ @property(nonatomic) bctbx_list_t *displayedList; @property(nonatomic) bctbx_list_t *receivedList; @property(nonatomic) bctbx_list_t *notReceivedList; +@property(nonatomic) bctbx_list_t *errorList; @property (weak, nonatomic) IBOutlet UIView *msgView; @property (weak, nonatomic) IBOutlet UIImageView *msgBackgroundColorImage; diff --git a/Classes/ChatConversationImdnView.m b/Classes/ChatConversationImdnView.m index 760ff55e0..ac8a4f435 100644 --- a/Classes/ChatConversationImdnView.m +++ b/Classes/ChatConversationImdnView.m @@ -7,7 +7,6 @@ #import -#import "ChatConversationImdnTableViewHeader.h" #import "ChatConversationImdnView.h" #import "PhoneMainView.h" #import "UIChatBubbleTextCell.h" @@ -51,104 +50,161 @@ static UICompositeViewDescription *compositeDescription = nil; _msgText.text = [NSString stringWithUTF8String:linphone_chat_message_get_text(_msg)]; _msgBackgroundColorImage.image = _msgBottomBar.image = [UIImage imageNamed:(outgoing ? @"color_A.png" : @"color_D.png")]; _msgDateLabel.textColor = [UIColor colorWithPatternImage:_msgBackgroundColorImage.image]; - [_msgView setFrame:CGRectMake(_msgView.frame.origin.x, _msgView.frame.origin.y, _msgView.frame.size.width, [UIChatBubbleTextCell ViewHeightForMessage:_msg withWidth:self.view.frame.size.width].height)]; + _tableView.delegate = self; + _tableView.dataSource = self; [_tableView setFrame:CGRectMake(_tableView.frame.origin.x, - _msgView.frame.origin.y + _msgView.frame.size.height, + _msgView.frame.origin.y + _msgView.frame.size.height + 10, _tableView.frame.size.width, self.view.frame.size.height - (_msgView.frame.origin.y + _msgView.frame.size.height))]; _displayedList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateDisplayed); _receivedList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateDeliveredToUser); _notReceivedList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateDelivered); + _errorList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateNotDelivered); + + [_tableView reloadData]; } #pragma mark - TableView - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - NSInteger i = 0; - if (_displayedList) i++; - if (_receivedList) i++; - if (_notReceivedList) i++; - return i; + NSInteger numberOfSection = 0; + if (_displayedList) numberOfSection++; + if (_receivedList) numberOfSection++; + if (_notReceivedList) numberOfSection++; + if (_errorList) numberOfSection++; + return numberOfSection; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 23.0; } -- (UITableViewHeaderFooterView *)tableView:(UITableView *)tableView headerViewForSection:(NSInteger)section { - NSString *kHeaderId = NSStringFromClass(ChatConversationImdnTableViewHeader.class); - ChatConversationImdnTableViewHeader *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:kHeaderId]; - if (!header) - header = [[ChatConversationImdnTableViewHeader alloc] initWithIdentifier:kHeaderId]; +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath { + return 44.0; +} +- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; + label.numberOfLines = 1; + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 23)]; + UIImage *image = NULL; - if (section == 1) { + if (section == 0) { if (_displayedList) { - header.label.text = NSLocalizedString(@"Read", nil); - header.icon.imageView.image = [UIImage imageNamed:@"chat_read"]; + label.text = NSLocalizedString(@"Read", nil); + label.textColor = [UIColor colorWithRed:(24 / 255.0) green:(167 / 255.0) blue:(175 / 255.0) alpha:1.0]; + image = [UIImage imageNamed:@"chat_read"]; } else if (_receivedList) { - header.label.text = NSLocalizedString(@"Delivered", nil); - header.icon.imageView.image = [UIImage imageNamed:@"chat_delivered"]; + label.text = NSLocalizedString(@"Delivered", nil); + label.textColor = [UIColor grayColor]; + image = [UIImage imageNamed:@"chat_delivered"]; } else if (_notReceivedList) { - header.label.text = NSLocalizedString(@"Undelivered", nil); - header.icon.imageView.image = [UIImage imageNamed:@"chat_error"]; + label.text = NSLocalizedString(@"Sent", nil); + label.textColor = [UIColor grayColor]; + } else if (_errorList) { + label.text = NSLocalizedString(@"Error", nil); + label.textColor = [UIColor redColor]; + image = [UIImage imageNamed:@"chat_error"]; + } + } else if (section == 1) { + if (_displayedList && _receivedList) { + label.text = NSLocalizedString(@"Delivered", nil); + label.textColor = [UIColor grayColor]; + image = [UIImage imageNamed:@"chat_delivered"]; + } else if (_notReceivedList) { + label.text = NSLocalizedString(@"Sent", nil); + label.textColor = [UIColor grayColor]; + } else if (_errorList) { + label.text = NSLocalizedString(@"Error", nil); + label.textColor = [UIColor redColor]; + image = [UIImage imageNamed:@"chat_error"]; } } else if (section == 2) { - if (_receivedList) { - header.label.text = NSLocalizedString(@"Delivered", nil); - header.icon.imageView.image = [UIImage imageNamed:@"chat_delivered"]; - } else if (_notReceivedList) { - header.label.text = NSLocalizedString(@"Undelivered", nil); - header.icon.imageView.image = [UIImage imageNamed:@"chat_error"]; + if (_displayedList && _receivedList && _notReceivedList) { + label.text = NSLocalizedString(@"Sent", nil); + label.textColor = [UIColor grayColor]; + } else if (_errorList) { + label.text = NSLocalizedString(@"Error", nil); + label.textColor = [UIColor redColor]; + image = [UIImage imageNamed:@"chat_error"]; } } else if (section == 3) { - header.label.text = NSLocalizedString(@"Undelivered", nil); - header.icon.imageView.image = [UIImage imageNamed:@"chat_error"]; + label.text = NSLocalizedString(@"Error", nil); + label.textColor = [UIColor redColor]; + image = [UIImage imageNamed:@"chat_error"]; } - return header; + [view addSubview:label]; + [label sizeToFit]; + [label setCenter:view.center]; + + if (image) { + UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; + [view addSubview:imageView]; + [imageView setFrame:CGRectMake(label.frame.origin.x + label.frame.size.width + 5, 2, 19, 19)]; + } + [view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"color_G.png"]]]; + return view; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == 1) { + if (section == 0) { if (_displayedList) return bctbx_list_size(_displayedList); else if (_receivedList) return bctbx_list_size(_receivedList); else if (_notReceivedList) return bctbx_list_size(_notReceivedList); - } else if (section == 2) { - if (_receivedList) + else if (_errorList) + return bctbx_list_size(_errorList); + } else if (section == 1) { + if (_displayedList &&_receivedList) return bctbx_list_size(_receivedList); else if (_notReceivedList) return bctbx_list_size(_notReceivedList); + else if (_errorList) + return bctbx_list_size(_errorList); + } else if (section == 2) { + if (_displayedList && _receivedList && _notReceivedList) + return bctbx_list_size(_notReceivedList); + else if (_errorList) + return bctbx_list_size(_errorList); } else if (section == 3) - return bctbx_list_size(_notReceivedList); + return bctbx_list_size(_errorList); return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { bctbx_list_t *list = NULL; - if (indexPath.section == 1) { + if (indexPath.section == 0) { if (_displayedList) list = _displayedList; else if (_receivedList) list = _receivedList; else if (_notReceivedList) list = _notReceivedList; - } else if (indexPath.section == 2) { - if (_receivedList) + else if (_errorList) + list = _errorList; + } else if (indexPath.section == 1) { + if (_displayedList &&_receivedList) list = _receivedList; else if (_notReceivedList) list = _notReceivedList; + else if (_errorList) + list = _errorList; + } else if (indexPath.section == 2) { + if (_displayedList && _receivedList && _notReceivedList) + list = _notReceivedList; + else if (_errorList) + list = _errorList; } else if (indexPath.section == 3) - list = _notReceivedList; + list = _errorList; if (!list) return nil; diff --git a/Classes/ChatConversationImdnView.xib b/Classes/ChatConversationImdnView.xib index a40116afd..8ecca1101 100644 --- a/Classes/ChatConversationImdnView.xib +++ b/Classes/ChatConversationImdnView.xib @@ -108,10 +108,6 @@ - - - - diff --git a/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.h b/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.h deleted file mode 100644 index 1231ae6de..000000000 --- a/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// ChatConversationImdnTableViewHeader.h -// linphone -// -// Created by REIS Benjamin on 26/04/2018. -// - -#ifndef ChatConversationImdnTableViewHeader_h -#define ChatConversationImdnTableViewHeader_h - -@interface ChatConversationImdnTableViewHeader : UITableViewHeaderFooterView - -@property (weak, nonatomic) IBOutlet UILabel *label; -@property (weak, nonatomic) IBOutlet UIIconButton *icon; - -- (id)initWithIdentifier:(NSString *)identifier; - -@end -#endif /* ChatConversationImdnTableViewHeader_h */ diff --git a/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.m b/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.m deleted file mode 100644 index ff1bc19a6..000000000 --- a/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// ChatConversationImdnTableViewHeader.m -// linphone -// -// Created by REIS Benjamin on 26/04/2018. -// - -#import - -#import "ChatConversationImdnTableViewHeader.h" - -@implementation ChatConversationImdnTableViewHeader - -- (id)initWithIdentifier:(NSString *)identifier { - self = [super initWithReuseIdentifier:identifier]; - if (self != nil) { - NSArray *arrayOfViews = - [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; - if ([arrayOfViews count] >= 1) { - ChatConversationImdnTableViewHeader *sub = ((ChatConversationImdnTableViewHeader *)[arrayOfViews objectAtIndex:0]); - self = sub; - } - } - return self; -} - -@end diff --git a/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.xib b/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.xib deleted file mode 100644 index dea53c607..000000000 --- a/Classes/LinphoneUI/ChatConversationImdnTableViewHeader.xib +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.m b/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.m index 8156de586..bdc64412d 100644 --- a/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.m +++ b/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.m @@ -21,8 +21,9 @@ NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; if ([arrayOfViews count] >= 1) { - UIChatConversationImdnTableViewCell *sub = ((UIChatConversationImdnTableViewCell *)[arrayOfViews objectAtIndex:0]); - self = sub; + UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]); + [self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)]; + [self addSubview:sub]; } } return self; diff --git a/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.xib b/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.xib index a70224e6e..517e27a99 100644 --- a/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.xib +++ b/Classes/LinphoneUI/UIChatConversationImdnTableViewCell.xib @@ -25,18 +25,18 @@ - +