Added federation indicator to room info screen

This commit is contained in:
Arnfried Griesert
2023-11-13 12:39:33 +01:00
parent 475a9b067c
commit 55084fd91a
13 changed files with 177 additions and 15 deletions
@@ -105,9 +105,17 @@ class RoomInfoBasicView: UIView {
}
}
}
badgeImageView.image = viewData.encryptionImage
roomNameLabel.text = viewData.roomDisplayName
// bwi: 5216 - federation
if BWIBuildSettings.shared.isFederationEnabled && viewData.isFederated {
badgeImageView.image = federationBadgeImage()
roomNameLabel.numberOfLines = 2
roomNameLabel.attributedText = roomNameWithFederationPill(roomDisplayName: viewData.roomDisplayName, font: roomNameLabel.font)
} else {
badgeImageView.image = viewData.encryptionImage
roomNameLabel.text = viewData.roomDisplayName
}
roomAddressLabel.text = viewData.mainRoomAlias
roomAddressLabel.isHidden = roomAddressLabel.text?.isEmpty ?? true
roomTopicTextView.text = viewData.roomTopic
@@ -125,6 +133,46 @@ class RoomInfoBasicView: UIView {
updateBadgeImageViewPosition(isPresenceDisplayed: viewData.directUserPresence != .unknown)
}
// bwi: 5216 - federation
private func federationBadgeImage() -> UIImage {
if ThemeService.shared().isCurrentThemeDark() {
return Asset.Images.roomFederatedBumIconDark.image
} else {
return Asset.Images.roomFederatedBumIconLight.image
}
}
// bwi: 5216 - federation
private func roomNameWithFederationPill(roomDisplayName: String?, font: UIFont) -> NSAttributedString? {
guard let roomDisplayName = roomDisplayName else {
return nil
}
let attributedString = NSMutableAttributedString(string: roomDisplayName + " ")
// get the correct asset for the current theme and language
let image: UIImage
if Locale.current.languageCode == "de" {
image = ThemeService.shared().isCurrentThemeDark() ? Asset.Images.federationPillDeBumDark.image : Asset.Images.federationPillDeBumLight.image
} else {
image = ThemeService.shared().isCurrentThemeDark() ? Asset.Images.federationPillEnBumDark.image : Asset.Images.federationPillEnBumLight.image
}
// append the pill to the room name
if image.size.width > 0.0 && image.size.height > 0.0 {
let aspectRatio = image.size.width / image.size.height
let pillHeight = 20.0
let offset = 0.5 * (font.capHeight - pillHeight)
let attachment = NSTextAttachment()
attachment.image = image
attachment.bounds = CGRect(x: 0, y: offset, width: pillHeight * aspectRatio, height: pillHeight)
attributedString.append(NSAttributedString(attachment: attachment))
}
return attributedString
}
private func updateBadgeImageViewPosition(isPresenceDisplayed: Bool) {
guard badgeImageView.image != nil else {
badgeImageView.isHidden = true