// // TAPSearchResultChatTableViewCell.m // TapTalk // // Created by Dominic Vedericho on 22/10/18. // Copyright © 2018 Moselo. All rights reserved. // #import "TAPSearchResultChatTableViewCell.h" #import "TAPRoomListModel.h" @interface TAPSearchResultChatTableViewCell() @property (strong, nonatomic) UIView *bgView; @property (strong, nonatomic) UIView *separatorView; @property (strong, nonatomic) UIView *bubbleUnreadView; @property (strong, nonatomic) UIView *onlineStatusView; @property (strong, nonatomic) UIView *initialNameView; @property (strong, nonatomic) UILabel *initialNameLabel; @property (strong, nonatomic) TAPImageView *profileImageView; @property (strong, nonatomic) UIImageView *expertIconImageView; @property (strong, nonatomic) UIImageView *muteImageView; @property (strong, nonatomic) UILabel *roomNameLabel; @property (strong, nonatomic) UILabel *numberOfUnreadMessageLabel; @property (strong, nonatomic) UILabel *onlineStatusLabel; @end @implementation TAPSearchResultChatTableViewCell #pragma mark - Lifecycle - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { _bgView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth([UIScreen mainScreen].bounds), 70.0f)]; [self.contentView addSubview:self.bgView]; CGFloat leftPadding = 16.0f; CGFloat rightPadding = 16.0f; _initialNameView = [[UIView alloc] initWithFrame:CGRectMake(leftPadding, 9.0f, 52.0f, 52.0f)]; self.initialNameView.alpha = 0.0f; self.initialNameView.layer.cornerRadius = CGRectGetHeight(self.initialNameView.frame) / 2.0f; self.initialNameView.clipsToBounds = YES; [self.bgView addSubview:self.initialNameView]; UIFont *initialNameLabelFont = [[TAPStyleManager sharedManager] getComponentFontForType:TAPComponentFontRoomAvatarMediumLabel]; UIColor *initialNameLabelColor = [[TAPStyleManager sharedManager] getTextColorForType:TAPTextColorRoomAvatarMediumLabel]; _initialNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.initialNameView.frame), CGRectGetHeight(self.initialNameView.frame))]; self.initialNameLabel.font = initialNameLabelFont; self.initialNameLabel.textColor = initialNameLabelColor; self.initialNameLabel.textAlignment = NSTextAlignmentCenter; [self.initialNameView addSubview:self.initialNameLabel]; _profileImageView = [[TAPImageView alloc] initWithFrame:CGRectMake(leftPadding, 9.0f, 52.0f, 52.0f)]; self.profileImageView.backgroundColor = [UIColor clearColor]; self.profileImageView.layer.cornerRadius = CGRectGetHeight(self.profileImageView.frame) / 2.0f; self.profileImageView.clipsToBounds = YES; self.profileImageView.contentMode = UIViewContentModeScaleAspectFill; [self.bgView addSubview:self.profileImageView]; _expertIconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.profileImageView.frame) - 22.0f, CGRectGetMaxY(self.profileImageView.frame) - 22.0f, 22.0f, 22.0f)]; self.expertIconImageView.image = [UIImage imageNamed:@"TAPIconExpert" inBundle:[TAPUtil currentBundle] compatibleWithTraitCollection:nil]; self.expertIconImageView.alpha = 0.0f; [self.bgView addSubview:self.expertIconImageView]; _bubbleUnreadView = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.bgView.frame) - 16.0f, 25.0f, 0.0f, 20.0f)]; self.bubbleUnreadView.clipsToBounds = YES; self.bubbleUnreadView.layer.cornerRadius = CGRectGetHeight(self.bubbleUnreadView.frame) / 2.0f; self.bubbleUnreadView.backgroundColor = [[TAPStyleManager sharedManager] getComponentColorForType:TAPComponentColorUnreadBadgeBackground]; [self.bgView addSubview:self.bubbleUnreadView]; UIFont *roomListUnreadBadgeLabelFont = [[TAPStyleManager sharedManager] getComponentFontForType:TAPComponentFontRoomListUnreadBadgeLabel]; UIColor *roomListUnreadBadgeLabelColor = [[TAPStyleManager sharedManager] getTextColorForType:TAPTextColorRoomListUnreadBadgeLabel]; _numberOfUnreadMessageLabel = [[UILabel alloc] initWithFrame:CGRectMake(7.0f, 3.0f, 0.0f, 13.0f)]; self.numberOfUnreadMessageLabel.textColor = roomListUnreadBadgeLabelColor; self.numberOfUnreadMessageLabel.font = roomListUnreadBadgeLabelFont; [self.bubbleUnreadView addSubview:self.numberOfUnreadMessageLabel]; _muteImageView = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.bgView.frame) - rightPadding, 0.0f, 0.0f, 13.0f)]; self.muteImageView.alpha = 0.0f; self.muteImageView.image = [UIImage imageNamed:@"TAPIconMute" inBundle:[TAPUtil currentBundle] compatibleWithTraitCollection:nil]; self.muteImageView.image = [self.muteImageView.image setImageTintColor:[[TAPStyleManager sharedManager] getComponentColorForType:TAPComponentColorIconRoomListMuted]]; [self.bgView addSubview:self.muteImageView]; UIFont *roomListNameLabelFont = [[TAPStyleManager sharedManager] getComponentFontForType:TAPComponentFontRoomListName]; UIColor *roomListNameLabelColor = [[TAPStyleManager sharedManager] getTextColorForType:TAPTextColorRoomListName]; _roomNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.profileImageView.frame) + 8.0f, 25.0f, CGRectGetMinX(self.muteImageView.frame) - 4.0f - (CGRectGetMaxX(self.profileImageView.frame) + 8.0f), 20.0f)]; self.roomNameLabel.textColor = roomListNameLabelColor; self.roomNameLabel.font = roomListNameLabelFont; [self.bgView addSubview:self.roomNameLabel]; self.muteImageView.center = CGPointMake(self.muteImageView.center.x, self.roomNameLabel.center.y); _separatorView = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetMinX(self.roomNameLabel.frame), CGRectGetHeight(self.bgView.frame) - 1.0f, CGRectGetWidth(self.bgView.frame) - CGRectGetMinX(self.roomNameLabel.frame), 1.0f)]; self.separatorView.backgroundColor = [TAPUtil getColor:TAP_COLOR_GREY_DC]; [self.bgView addSubview:self.separatorView]; } return self; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; self.onlineStatusView.backgroundColor = [TAPUtil getColor:@"19C700"]; self.separatorView.backgroundColor = [TAPUtil getColor:TAP_COLOR_GREY_DC]; } - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { [super setHighlighted:highlighted animated:animated]; self.onlineStatusView.backgroundColor = [TAPUtil getColor:@"19C700"]; self.separatorView.backgroundColor = [TAPUtil getColor:TAP_COLOR_GREY_DC]; } #pragma mark - Custom Methods - (void)setSearchResultChatTableViewCellWithData:(TAPRoomModel *)room searchedString:(NSString *)searchedString numberOfUnreadMessages:(NSString *)unreadMessageCount { searchedString = [searchedString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //DV Temp BOOL isExpert = NO; BOOL isMuted = NO; BOOL isOnline = NO; //END DV Temp BOOL isGroup = NO; if (room.type == RoomTypeGroup || room.type == RoomTypeChannel) { isGroup = YES; } NSString *profileImageURL = @""; NSString *roomName = @""; if (room.type == RoomTypePersonal) { NSString *otherUserID = [[TAPChatManager sharedManager] getOtherUserIDWithRoomID:room.roomID]; TAPUserModel *obtainedUser = [[TAPContactManager sharedManager] getUserWithUserID:otherUserID]; if([room.deleted longValue] != 0) { profileImageURL = @""; } else if (obtainedUser != nil && ![obtainedUser.imageURL.thumbnail isEqualToString:@""]) { profileImageURL = obtainedUser.imageURL.thumbnail; profileImageURL = [TAPUtil nullToEmptyString:profileImageURL]; } else { profileImageURL = room.imageURL.thumbnail; profileImageURL = [TAPUtil nullToEmptyString:profileImageURL]; } if (obtainedUser != nil && obtainedUser.fullname != nil && [room.deleted longValue] == 0) { roomName = obtainedUser.fullname; roomName = [TAPUtil nullToEmptyString:roomName]; } else { roomName = room.name; roomName = [TAPUtil nullToEmptyString:roomName]; } } else if (room.type == RoomTypeGroup) { TAPRoomModel *obtainedRoom = [[TAPGroupManager sharedManager] getRoomWithRoomID:room.roomID]; NSString *groupProfileImageURL = obtainedRoom.imageURL.thumbnail; groupProfileImageURL = [TAPUtil nullToEmptyString:groupProfileImageURL]; NSString *groupRoomName = obtainedRoom.name; groupRoomName = [TAPUtil nullToEmptyString:groupRoomName]; if ([groupProfileImageURL isEqualToString:@""]) { profileImageURL = room.imageURL.thumbnail; profileImageURL = [TAPUtil nullToEmptyString:profileImageURL]; } else { profileImageURL = groupProfileImageURL; profileImageURL = [TAPUtil nullToEmptyString:profileImageURL]; } if ([groupRoomName isEqualToString:@""]) { roomName = room.name; roomName = [TAPUtil nullToEmptyString:roomName]; } else { roomName = groupRoomName; roomName = [TAPUtil nullToEmptyString:roomName]; } } NSInteger numberOfUnreadMessage = [unreadMessageCount integerValue]; if (profileImageURL == nil || [profileImageURL isEqualToString:@""]) { //No photo found, get the initial self.initialNameView.alpha = 1.0f; self.profileImageView.alpha = 0.0f; self.initialNameView.backgroundColor = [[TAPStyleManager sharedManager] getRandomDefaultAvatarBackgroundColorWithName:roomName]; self.initialNameLabel.text = [[TAPStyleManager sharedManager] getInitialsWithName:roomName isGroup:isGroup]; } else { self.initialNameView.alpha = 0.0f; self.profileImageView.alpha = 1.0f; [self.profileImageView setImageWithURLString:profileImageURL]; } if (numberOfUnreadMessage == 0) { self.bubbleUnreadView.alpha = 0.0f; self.bubbleUnreadView.frame = CGRectMake(CGRectGetWidth(self.bgView.frame) - 16.0f, CGRectGetMinY(self.bgView.frame), 0.0f, CGRectGetHeight(self.bubbleUnreadView.frame)); } else { if (numberOfUnreadMessage > 99) { self.numberOfUnreadMessageLabel.text = @"99+"; } else { self.numberOfUnreadMessageLabel.text = [NSString stringWithFormat:@"%ld", (long)numberOfUnreadMessage]; } //Bubble Number CGSize newNumberOfUnreadMessageLabelSize = [self.numberOfUnreadMessageLabel sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGRectGetHeight(self.numberOfUnreadMessageLabel.frame))]; //Bubble View CGFloat bubbleUnreadViewWidth = newNumberOfUnreadMessageLabelSize.width + 7.0f + 7.0f; CGFloat numberOfUnreadMessageLabelXPosition = 7.0f; self.numberOfUnreadMessageLabel.frame = CGRectMake(numberOfUnreadMessageLabelXPosition, CGRectGetMinY(self.numberOfUnreadMessageLabel.frame), newNumberOfUnreadMessageLabelSize.width, CGRectGetHeight(self.numberOfUnreadMessageLabel.frame)); self.bubbleUnreadView.frame = CGRectMake(CGRectGetWidth(self.bgView.frame) - 16.0f - bubbleUnreadViewWidth, CGRectGetMinY(self.bubbleUnreadView.frame), bubbleUnreadViewWidth, CGRectGetHeight(self.bubbleUnreadView.frame)); self.bubbleUnreadView.alpha = 1.0f; } //MUTE IMAGE VIEW if (isMuted) { if (numberOfUnreadMessage == 0) { self.muteImageView.frame = CGRectMake(CGRectGetWidth(self.bgView.frame) - 16.0f - 10.0f, CGRectGetMinY(self.muteImageView.frame), 10.0f, CGRectGetHeight(self.muteImageView.frame)); } else { self.muteImageView.frame = CGRectMake(CGRectGetMinX(self.bubbleUnreadView.frame) - 4.0f - 10.0f, CGRectGetMinY(self.muteImageView.frame), 10.0f, CGRectGetHeight(self.muteImageView.frame)); } self.muteImageView.alpha = 1.0f; } else { self.muteImageView.frame = CGRectMake(CGRectGetMinX(self.bubbleUnreadView.frame), CGRectGetMinY(self.muteImageView.frame), 0.0f, CGRectGetHeight(self.muteImageView.frame)); self.muteImageView.alpha = 0.0f; } if (isGroup) { self.expertIconImageView.image = [UIImage imageNamed:@"TAPIconGroup" inBundle:[TAPUtil currentBundle] compatibleWithTraitCollection:nil]; self.expertIconImageView.alpha = 1.0f; //DV Temp - Adding how many people online in here for group if (isOnline) { self.onlineStatusView.alpha = 1.0f; self.onlineStatusLabel.frame = CGRectMake(CGRectGetMaxX(self.onlineStatusView.frame) + 3.0f, CGRectGetMinY(self.onlineStatusLabel.frame), CGRectGetMinX(self.bubbleUnreadView.frame) - 4.0f - (CGRectGetMaxX(self.onlineStatusView.frame) + 3.0f), CGRectGetHeight(self.onlineStatusLabel.frame)); self.onlineStatusLabel.text = @"Active now"; } else { self.onlineStatusView.alpha = 0.0f; self.onlineStatusLabel.frame = CGRectMake(CGRectGetMaxX(self.profileImageView.frame) + 8.0f, CGRectGetMaxY(self.roomNameLabel.frame), CGRectGetMinX(self.bubbleUnreadView.frame) - 4.0f - (CGRectGetMaxX(self.profileImageView.frame) + 8.0f), 20.0f); } } else { if (isExpert) { self.expertIconImageView.image = [UIImage imageNamed:@"TAPIconExpert" inBundle:[TAPUtil currentBundle] compatibleWithTraitCollection:nil]; self.expertIconImageView.alpha = 1.0f; } else { self.expertIconImageView.alpha = 0.0f; } if (isOnline) { self.onlineStatusView.alpha = 1.0f; self.onlineStatusLabel.frame = CGRectMake(CGRectGetMaxX(self.onlineStatusView.frame) + 3.0f, CGRectGetMinY(self.onlineStatusLabel.frame), CGRectGetMinX(self.bubbleUnreadView.frame) - 4.0f - (CGRectGetMaxX(self.onlineStatusView.frame) + 3.0f), CGRectGetHeight(self.onlineStatusLabel.frame)); self.onlineStatusLabel.text = @"Active now"; } else { self.onlineStatusView.alpha = 0.0f; self.onlineStatusLabel.frame = CGRectMake(CGRectGetMaxX(self.profileImageView.frame) + 8.0f, CGRectGetMaxY(self.roomNameLabel.frame), CGRectGetMinX(self.bubbleUnreadView.frame) - 4.0f - (CGRectGetMaxX(self.profileImageView.frame) + 8.0f), 20.0f); } } //ROOM NAME LABEL self.roomNameLabel.text = roomName; NSString *lowercaseSeachedString = [searchedString lowercaseString]; NSString *lowercaseRoomName = [roomName lowercaseString]; NSMutableDictionary *roomNameAttributesDictionary = [NSMutableDictionary dictionary]; CGFloat roomNameLetterSpacing = -0.2f; [roomNameAttributesDictionary setObject:@(roomNameLetterSpacing) forKey:NSKernAttributeName]; NSMutableParagraphStyle *roomNameStyle = [[NSMutableParagraphStyle alloc] init]; roomNameStyle.lineBreakMode = NSLineBreakByTruncatingTail; [roomNameAttributesDictionary setObject:roomNameStyle forKey:NSParagraphStyleAttributeName]; NSMutableAttributedString *roomNameAttributedString = [[NSMutableAttributedString alloc] initWithString:self.roomNameLabel.text]; [roomNameAttributedString addAttributes:roomNameAttributesDictionary range:NSMakeRange(0, [self.roomNameLabel.text length])]; //CS NOTE - uncomment to use trimmed string // //WK Note - Create nonAlphaNumericCharacters // NSMutableCharacterSet *nonAlphaNumericCharacters = [[NSMutableCharacterSet alloc] init]; // [nonAlphaNumericCharacters formUnionWithCharacterSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]]; // [nonAlphaNumericCharacters removeCharactersInString:@" "]; //Remove space from nonAlphaNumericCharacters // // NSString *alphaNumericSearchedString = [[lowercaseSeachedString componentsSeparatedByCharactersInSet:nonAlphaNumericCharacters] componentsJoinedByString:@""]; //Remove all string that is nonAlphaNumericCharacters // //End Note UIColor *roomNameHighlightedColor = [[TAPStyleManager sharedManager] getTextColorForType:TAPTextColorRoomListNameHighlighted]; NSRange searchedRange = [lowercaseRoomName rangeOfString:lowercaseSeachedString]; [roomNameAttributedString addAttribute:NSForegroundColorAttributeName value:roomNameHighlightedColor range:searchedRange]; self.roomNameLabel.attributedText = roomNameAttributedString; self.roomNameLabel.frame = CGRectMake(CGRectGetMinX(self.roomNameLabel.frame), CGRectGetMinY(self.roomNameLabel.frame), CGRectGetMinX(self.muteImageView.frame) - 4.0f - (CGRectGetMaxX(self.profileImageView.frame) + 8.0f), CGRectGetHeight(self.roomNameLabel.frame)); } - (void)hideSeparatorView:(BOOL)isHide { if (isHide) { self.separatorView.alpha = 0.0f; } else { self.separatorView.alpha = 1.0f; } } @end