add view avatar a11y label

This commit is contained in:
Mauro Romito
2025-06-26 11:45:34 +02:00
committed by Mauro
parent e3f99d7aaf
commit 6272576929
4 changed files with 28 additions and 2 deletions

View File

@@ -25,6 +25,7 @@
"a11y_show_password" = "Show password";
"a11y_start_call" = "Start a call";
"a11y_user_menu" = "User menu";
"a11y_view_avatar" = "View avatar";
"a11y_view_details" = "View details";
"a11y_voice_message" = "Voice message, duration: %1$@";
"a11y_voice_message_record" = "Record voice message.";

View File

@@ -92,6 +92,8 @@ internal enum L10n {
internal static var a11yStartCall: String { return L10n.tr("Localizable", "a11y_start_call") }
/// User menu
internal static var a11yUserMenu: String { return L10n.tr("Localizable", "a11y_user_menu") }
/// View avatar
internal static var a11yViewAvatar: String { return L10n.tr("Localizable", "a11y_view_avatar") }
/// View details
internal static var a11yViewDetails: String { return L10n.tr("Localizable", "a11y_view_details") }
/// Voice message, duration: %1$@

View File

@@ -152,6 +152,18 @@ struct AvatarHeaderView<Footer: View>: View {
}
}
private var avatarAccessibilityLabel: String {
guard onAvatarTap != nil else {
return L10n.a11yAvatar
}
switch avatarInfo {
case .room(let roomAvatar):
return roomAvatar.hasURL ? L10n.a11yViewAvatar : L10n.a11yAvatar
case .user(let userProfileProxy):
return userProfileProxy.avatarURL != nil ? L10n.a11yViewAvatar : L10n.a11yAvatar
}
}
@ViewBuilder
private var avatar: some View {
switch avatarInfo {
@@ -160,7 +172,7 @@ struct AvatarHeaderView<Footer: View>: View {
avatarSize: avatarSize,
mediaProvider: mediaProvider,
onAvatarTap: onAvatarTap)
.accessibilityLabel(L10n.a11yAvatar)
.accessibilityLabel(avatarAccessibilityLabel)
case .user(let userProfile):
LoadableAvatarImage(url: userProfile.avatarURL,
@@ -169,7 +181,7 @@ struct AvatarHeaderView<Footer: View>: View {
avatarSize: avatarSize,
mediaProvider: mediaProvider,
onTap: onAvatarTap)
.accessibilityLabel(L10n.a11yAvatar)
.accessibilityLabel(avatarAccessibilityLabel)
}
}

View File

@@ -26,6 +26,17 @@ enum RoomAvatar: Equatable {
.tombstoned
}
}
var hasURL: Bool {
switch self {
case let .room(_, _, url):
return url != nil
case let .heroes(heroes):
return heroes.first?.avatarURL != nil
case .tombstoned:
return false
}
}
}
/// A view that shows the avatar for a room, or a cluster of heroes if provided.