From 30e875366331438fee8d44b3f047beb4461605a0 Mon Sep 17 00:00:00 2001 From: Alfonso Grillo Date: Mon, 6 Nov 2023 16:56:14 +0100 Subject: [PATCH] Improve TimelineAccessibilityModifier --- .../View/Style/TimelineAccessibilityModifier.swift | 12 +++++++++++- .../View/Style/TimelineItemBubbledStylerView.swift | 9 +-------- .../View/Style/TimelineItemPlainStylerView.swift | 2 ++ .../View/Timeline/PollRoomTimelineView.swift | 1 + 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineAccessibilityModifier.swift b/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineAccessibilityModifier.swift index 05fe67878..6a038bae5 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineAccessibilityModifier.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineAccessibilityModifier.swift @@ -24,8 +24,18 @@ private struct TimelineAccessibilityModifier: ViewModifier { switch timelineItem { case is PollRoomTimelineItem, is VoiceMessageRoomTimelineItem: content + case let timelineItem as EventBasedTimelineItemProtocol: + content + .accessibilityRepresentation { + VStack { + Text(timelineItem.sender.displayName ?? timelineItem.sender.id) + content + } + } + .accessibilityElement(children: .combine) default: - content.accessibilityElement(children: .combine) + content + .accessibilityElement(children: .combine) } } } diff --git a/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemBubbledStylerView.swift b/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemBubbledStylerView.swift index 380fa7b73..e19d5ec09 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemBubbledStylerView.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemBubbledStylerView.swift @@ -87,6 +87,7 @@ struct TimelineItemBubbledStylerView: View { .lineLimit(1) .padding(.vertical, senderNameVerticalPadding) } + // sender info are read inside the `TimelineAccessibilityModifier` .accessibilityHidden(true) .onTapGesture { context.send(viewAction: .tappedOnUser(userID: timelineItem.sender.id)) @@ -99,14 +100,6 @@ struct TimelineItemBubbledStylerView: View { // Figma overlaps reactions by 3 VStack(alignment: alignment, spacing: -3) { messageBubble - .accessibilityRepresentation { - VStack(spacing: 0) { - Text(timelineItem.sender.displayName ?? timelineItem.sender.id) - // Workaround: fixes VoiceOver frames offset when children accessibility element aren't combined - .frame(height: 0) - messageBubble - } - } .timelineAccessibility(timelineItem) if !timelineItem.properties.reactions.isEmpty { diff --git a/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemPlainStylerView.swift b/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemPlainStylerView.swift index 241543476..cb08f8ef3 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemPlainStylerView.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/Style/TimelineItemPlainStylerView.swift @@ -114,6 +114,8 @@ struct TimelineItemPlainStylerView: View { .font(.compound.bodyXS) } .padding(.top, 16) + // sender info are read inside the `TimelineAccessibilityModifier` + .accessibilityHidden(true) } } diff --git a/ElementX/Sources/Screens/RoomScreen/View/Timeline/PollRoomTimelineView.swift b/ElementX/Sources/Screens/RoomScreen/View/Timeline/PollRoomTimelineView.swift index 45c9a2817..98985a777 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/Timeline/PollRoomTimelineView.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/Timeline/PollRoomTimelineView.swift @@ -54,6 +54,7 @@ struct PollRoomTimelineView: View { Image(asset.name) .resizable() .frame(width: iconSize, height: iconSize) + .accessibilityHidden(true) Text(poll.question) .multilineTextAlignment(.leading)