diff --git a/Riot/Modules/Contacts/DataSources/ContactsDataSource.m b/Riot/Modules/Contacts/DataSources/ContactsDataSource.m index cae9cc66c..2fdb98e44 100644 --- a/Riot/Modules/Contacts/DataSources/ContactsDataSource.m +++ b/Riot/Modules/Contacts/DataSources/ContactsDataSource.m @@ -580,6 +580,16 @@ contactCell = [[ContactTableViewCell alloc] init]; } + // BWI: 5208 + if (BWIBuildSettings.shared.isFederationEnabled && self.mxSession && self.mxSession.myUser) + { + NSArray *myUserIdComponents = [self.mxSession.myUserId componentsSeparatedByString:@":"]; + if (myUserIdComponents.count == 2) + { + [contact checkFederation:[myUserIdComponents objectAtIndex:1]]; + } + } + // Make the cell display the contact [contactCell render:contact]; diff --git a/Riot/Modules/Contacts/Views/ContactTableViewCell.h b/Riot/Modules/Contacts/Views/ContactTableViewCell.h index acb9e0097..cd07b1eaf 100644 --- a/Riot/Modules/Contacts/Views/ContactTableViewCell.h +++ b/Riot/Modules/Contacts/Views/ContactTableViewCell.h @@ -50,5 +50,9 @@ // This property is OPTIONAL. @property (nonatomic) MXRoom* mxRoom; +// bwi: 5203 add federation icon +@property (nonatomic) UIImage *federationImage; +@property (nonatomic) UIImageView *federationImageView; + @end diff --git a/Riot/Modules/Contacts/Views/ContactTableViewCell.m b/Riot/Modules/Contacts/Views/ContactTableViewCell.m index acb25c4c9..c4be1d205 100644 --- a/Riot/Modules/Contacts/Views/ContactTableViewCell.m +++ b/Riot/Modules/Contacts/Views/ContactTableViewCell.m @@ -46,6 +46,32 @@ // Disable by default interactions defined in the cell // because we want [tableView didSelectRowAtIndexPath:] to be called self.thumbnailView.userInteractionEnabled = NO; + + // BWI: 5208 add federation icon + if ([ThemeService.shared isCurrentThemeDark]) + { + self.federationImage = AssetImages.roomFederatedBumIconDark.image; + } + else + { + self.federationImage = AssetImages.roomFederatedBumIconLight.image; + } + self.federationImageView = [[UIImageView alloc] initWithImage:self.federationImage]; + self.federationImageView.translatesAutoresizingMaskIntoConstraints = NO; + self.federationImageView.contentMode = UIViewContentModeScaleAspectFit; + [self.contentView addSubview:self.federationImageView]; + + // scale and new with federation icon + float scaleFactor = ((self.thumbnailView.frame.size.height * 0.34) / self.federationImage.size.height); + float imageWidth = scaleFactor * self.federationImage.size.width; + // offset federation icon + float offsetTrailing = 3 * scaleFactor; + float offsetBotom = 1; + + [self.federationImageView.bottomAnchor constraintEqualToAnchor:self.thumbnailView.bottomAnchor constant:offsetBotom].active = YES; + [self.federationImageView.trailingAnchor constraintEqualToAnchor:self.thumbnailView.trailingAnchor constant:offsetTrailing].active = YES; + [self.federationImageView.heightAnchor constraintEqualToConstant:(self.thumbnailView.frame.size.height * 0.34)].active = YES; + [self.federationImageView.widthAnchor constraintEqualToConstant:imageWidth].active = YES; } - (void)customizeTableViewCellRendering @@ -69,6 +95,17 @@ // Round image view self.thumbnailView.layer.cornerRadius = self.thumbnailView.frame.size.width / 2; self.thumbnailView.clipsToBounds = YES; + + // BWI: 5208 add federation icon + if ([ThemeService.shared isCurrentThemeDark]) + { + self.federationImage = AssetImages.roomFederatedBumIconDark.image; + } + else + { + self.federationImage = AssetImages.roomFederatedBumIconLight.image; + } + self.federationImageView.image = self.federationImage; } - (void)prepareForReuse @@ -142,6 +179,16 @@ return; } + // BWI: 5208 add federation icon + if (BWIBuildSettings.shared.isFederationEnabled) + { + self.federationImageView.hidden = !contact.bwiIsFederated; + } + else + { + self.federationImageView.hidden = YES; + } + // Be warned when the thumbnail is updated [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onThumbnailUpdate:) name:kMXKContactThumbnailUpdateNotification object:nil]; diff --git a/Riot/Modules/MatrixKit/Models/Contact/MXKContact.h b/Riot/Modules/MatrixKit/Models/Contact/MXKContact.h index fdf591daa..5766fc33e 100644 --- a/Riot/Modules/MatrixKit/Models/Contact/MXKContact.h +++ b/Riot/Modules/MatrixKit/Models/Contact/MXKContact.h @@ -92,6 +92,11 @@ extern NSString *const kMXKContactDefaultContactPrefixId; */ @property (nonatomic) NSString* bwiUserLabel; +/** + BWI: 5208 Federation + */ +@property (nonatomic) BOOL bwiIsFederated; + /** Reset the current thumbnail if it is retrieved from a matrix url. May be used in case of the matrix avatar url change. A new thumbnail will be automatically restored from the contact data. @@ -175,4 +180,9 @@ extern NSString *const kMXKContactDefaultContactPrefixId; */ @property (nonatomic) NSString *defaultCountryCode; +/** + BWI: 5208 Check if the contact comes from a federated server + */ +- (void)checkFederation:(NSString *)homeServerId; + @end diff --git a/Riot/Modules/MatrixKit/Models/Contact/MXKContact.m b/Riot/Modules/MatrixKit/Models/Contact/MXKContact.m index f949b3a9b..8fbd5c788 100644 --- a/Riot/Modules/MatrixKit/Models/Contact/MXKContact.m +++ b/Riot/Modules/MatrixKit/Models/Contact/MXKContact.m @@ -55,6 +55,7 @@ NSString *const kMXKContactDefaultContactPrefixId = @"Default_"; matrixIdField = nil; isMatrixContact = NO; _matrixAvatarURL = nil; + _bwiIsFederated = NO; isThirdPartyInvite = NO; } @@ -659,4 +660,26 @@ NSString *const kMXKContactDefaultContactPrefixId = @"Default_"; } } + +// BWI: 5208 +- (void)checkFederation:(NSString *)homeServerId +{ + NSArray *contactIdComponents = [self.matrixIdentifiers.firstObject componentsSeparatedByString:@":"]; + if (contactIdComponents.count == 2 && homeServerId) + { + if ([[contactIdComponents objectAtIndex: 1] isEqualToString: homeServerId]) + { + self.bwiIsFederated = NO; + } + else + { + self.bwiIsFederated = YES; + } + } + else + { + self.bwiIsFederated = NO; + } +} + @end diff --git a/Riot/Modules/Room/Members/RoomParticipantsViewController.m b/Riot/Modules/Room/Members/RoomParticipantsViewController.m index 45df17607..404891d53 100644 --- a/Riot/Modules/Room/Members/RoomParticipantsViewController.m +++ b/Riot/Modules/Room/Members/RoomParticipantsViewController.m @@ -1083,6 +1083,15 @@ if (contact) { + // BWI: 5208 + if (BWIBuildSettings.shared.isFederationEnabled && self.mxRoom.mxSession && self.mxRoom.mxSession.myUserId) + { + NSArray *myUserIdComponents = [self.mxRoom.mxSession.myUserId componentsSeparatedByString:@":"]; + if (myUserIdComponents.count == 2) + { + [contact checkFederation:[myUserIdComponents objectAtIndex:1]]; + } + } [participantCell render:contact]; if (contact.mxMember)