mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:11:45 +00:00
Aadded sender name when voiceover focuses a poll title (#4306)
* added sender name in poll voiceover * improved the code * code improvement
This commit is contained in:
@@ -15,5 +15,6 @@ extension Section where Parent == Color, Content == EmptyView, Footer == EmptyVi
|
|||||||
} header: {
|
} header: {
|
||||||
Color.clear
|
Color.clear
|
||||||
}
|
}
|
||||||
|
.accessibilityHidden(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ struct RoomPollsHistoryScreen: View {
|
|||||||
.font(.compound.bodySM)
|
.font(.compound.bodySM)
|
||||||
.foregroundColor(.compound.textSecondary)
|
.foregroundColor(.compound.textSecondary)
|
||||||
PollView(poll: pollTimelineItem.item.poll,
|
PollView(poll: pollTimelineItem.item.poll,
|
||||||
state: .full(isEditable: pollTimelineItem.item.isEditable)) { action in
|
state: .full(isEditable: pollTimelineItem.item.isEditable), sender: pollTimelineItem.item.sender) { action in
|
||||||
switch action {
|
switch action {
|
||||||
case .selectOption(let optionID):
|
case .selectOption(let optionID):
|
||||||
guard let pollStartID = pollTimelineItem.item.id.eventID else { return }
|
guard let pollStartID = pollTimelineItem.item.id.eventID else { return }
|
||||||
|
|||||||
@@ -128,7 +128,6 @@ struct StartChatScreen: View {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Section.empty
|
Section.empty
|
||||||
.accessibilityHidden(true)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,14 +42,15 @@ struct PollView: View {
|
|||||||
|
|
||||||
let poll: Poll
|
let poll: Poll
|
||||||
let state: PollViewState
|
let state: PollViewState
|
||||||
|
let sender: TimelineItemSender
|
||||||
let actionHandler: (PollViewAction) -> Void
|
let actionHandler: (PollViewAction) -> Void
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if state.isPreview {
|
if state.isPreview {
|
||||||
questionView
|
accessibleQuestionView
|
||||||
} else {
|
} else {
|
||||||
VStack(alignment: .leading, spacing: 16) {
|
VStack(alignment: .leading, spacing: 16) {
|
||||||
questionView
|
accessibleQuestionView
|
||||||
optionsView
|
optionsView
|
||||||
summaryView
|
summaryView
|
||||||
toolbarView
|
toolbarView
|
||||||
@@ -59,6 +60,20 @@ struct PollView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
|
private var senderString: String { poll.createdByAccountOwner ? L10n.commonYou : sender.disambiguatedDisplayName ?? sender.id }
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
private var accessibleQuestionView: some View {
|
||||||
|
questionView
|
||||||
|
.accessibilityRepresentation {
|
||||||
|
HStack(spacing: 0) {
|
||||||
|
Text(senderString)
|
||||||
|
questionView
|
||||||
|
}
|
||||||
|
.accessibilityElement(children: .combine)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var questionView: some View {
|
private var questionView: some View {
|
||||||
HStack(alignment: .top, spacing: 12) {
|
HStack(alignment: .top, spacing: 12) {
|
||||||
@@ -166,31 +181,31 @@ private extension Poll {
|
|||||||
|
|
||||||
struct PollView_Previews: PreviewProvider, TestablePreview {
|
struct PollView_Previews: PreviewProvider, TestablePreview {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
PollView(poll: .disclosed(), state: .full(isEditable: false)) { _ in }
|
PollView(poll: .disclosed(), state: .full(isEditable: false), sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Disclosed")
|
.previewDisplayName("Disclosed")
|
||||||
|
|
||||||
PollView(poll: .undisclosed(), state: .full(isEditable: false)) { _ in }
|
PollView(poll: .undisclosed(), state: .full(isEditable: false), sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Undisclosed")
|
.previewDisplayName("Undisclosed")
|
||||||
|
|
||||||
PollView(poll: .endedDisclosed, state: .full(isEditable: false)) { _ in }
|
PollView(poll: .endedDisclosed, state: .full(isEditable: false), sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Ended, Disclosed")
|
.previewDisplayName("Ended, Disclosed")
|
||||||
|
|
||||||
PollView(poll: .endedUndisclosed, state: .full(isEditable: false)) { _ in }
|
PollView(poll: .endedUndisclosed, state: .full(isEditable: false), sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Ended, Undisclosed")
|
.previewDisplayName("Ended, Undisclosed")
|
||||||
|
|
||||||
PollView(poll: .disclosed(createdByAccountOwner: true), state: .full(isEditable: true)) { _ in }
|
PollView(poll: .disclosed(createdByAccountOwner: true), state: .full(isEditable: true), sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Creator, disclosed")
|
.previewDisplayName("Creator, disclosed")
|
||||||
|
|
||||||
PollView(poll: .emptyDisclosed, state: .full(isEditable: true)) { _ in }
|
PollView(poll: .emptyDisclosed, state: .full(isEditable: true), sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Creator, no votes")
|
.previewDisplayName("Creator, no votes")
|
||||||
|
|
||||||
PollView(poll: .emptyDisclosed, state: .preview) { _ in }
|
PollView(poll: .emptyDisclosed, state: .preview, sender: .test) { _ in }
|
||||||
.padding()
|
.padding()
|
||||||
.previewDisplayName("Preview")
|
.previewDisplayName("Preview")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ struct PollRoomTimelineView: View {
|
|||||||
var body: some View {
|
var body: some View {
|
||||||
TimelineStyler(timelineItem: timelineItem) {
|
TimelineStyler(timelineItem: timelineItem) {
|
||||||
PollView(poll: poll,
|
PollView(poll: poll,
|
||||||
state: state) { action in
|
state: state,
|
||||||
|
sender: timelineItem.sender) { action in
|
||||||
switch action {
|
switch action {
|
||||||
case .selectOption(let optionID):
|
case .selectOption(let optionID):
|
||||||
guard let eventID, let option = poll.options.first(where: { $0.id == optionID }), !option.isSelected else { return }
|
guard let eventID, let option = poll.options.first(where: { $0.id == optionID }), !option.isSelected else { return }
|
||||||
|
|||||||
Reference in New Issue
Block a user