Merge pull request #1033 from RyanRory/standardize-modal-accessibility-id

Standardize modal & input error accessibility ids
pull/1044/head
Morgan Pretty 7 months ago committed by GitHub
commit f7c39c4c5d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -96,7 +96,6 @@ extension ConversationVC:
title: "callsPermissionsRequired".localized(), title: "callsPermissionsRequired".localized(),
body: .text("callsPermissionsRequiredDescription".localized()), body: .text("callsPermissionsRequiredDescription".localized()),
confirmTitle: "sessionSettings".localized(), confirmTitle: "sessionSettings".localized(),
confirmAccessibility: Accessibility(identifier: "Settings"),
dismissOnConfirm: false // Custom dismissal logic dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in ) { [weak self] _ in
self?.dismiss(animated: true) { self?.dismiss(animated: true) {
@ -160,9 +159,7 @@ extension ConversationVC:
.localizedFormatted(baseFont: .systemFont(ofSize: Values.smallFontSize)) .localizedFormatted(baseFont: .systemFont(ofSize: Values.smallFontSize))
), ),
confirmTitle: "blockUnblock".localized(), confirmTitle: "blockUnblock".localized(),
confirmAccessibility: Accessibility(identifier: "Confirm block"), confirmStyle: .danger,
confirmStyle: .danger,
cancelAccessibility: Accessibility(identifier: "Cancel block"),
cancelStyle: .alert_text, cancelStyle: .alert_text,
dismissOnConfirm: false // Custom dismissal logic dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in ) { [weak self] _ in
@ -921,9 +918,7 @@ extension ConversationVC:
info: ConfirmationModal.Info( info: ConfirmationModal.Info(
title: "disappearingMessagesFollowSetting".localized(), title: "disappearingMessagesFollowSetting".localized(),
body: .attributedText(modalBodyString.formatted(baseFont: .systemFont(ofSize: Values.smallFontSize))), body: .attributedText(modalBodyString.formatted(baseFont: .systemFont(ofSize: Values.smallFontSize))),
accessibility: Accessibility(identifier: "Follow setting dialog"),
confirmTitle: modalConfirmTitle, confirmTitle: modalConfirmTitle,
confirmAccessibility: Accessibility(identifier: "Set button"),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .textPrimary, cancelStyle: .textPrimary,
dismissOnConfirm: false // Custom dismissal logic dismissOnConfirm: false // Custom dismissal logic
@ -955,8 +950,6 @@ extension ConversationVC:
title: "attachmentsAutoDownloadModalTitle".localized(), title: "attachmentsAutoDownloadModalTitle".localized(),
body: .attributedText(message), body: .attributedText(message),
confirmTitle: "download".localized(), confirmTitle: "download".localized(),
confirmAccessibility: Accessibility(identifier: "Download media"),
cancelAccessibility: Accessibility(identifier: "Don't download media"),
dismissOnConfirm: false // Custom dismissal logic dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in ) { [weak self] _ in
self?.viewModel.trustContact() self?.viewModel.trustContact()

@ -707,7 +707,6 @@ class ThreadSettingsViewModel: SessionTableViewModel, NavigationItemSource, Navi
"blockUnblock".localized() : "blockUnblock".localized() :
"block".localized() "block".localized()
), ),
confirmAccessibility: Accessibility(identifier: "Confirm block"),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text cancelStyle: .alert_text
), ),

@ -207,13 +207,7 @@ class MessageRequestsViewModel: SessionTableViewModel, NavigatableStateHolder, O
info: ConfirmationModal.Info( info: ConfirmationModal.Info(
title: "clearAll".localized(), title: "clearAll".localized(),
body: .text("messageRequestsClearAllExplanation".localized()), body: .text("messageRequestsClearAllExplanation".localized()),
accessibility: Accessibility(
identifier: "Clear all"
),
confirmTitle: "clear".localized(), confirmTitle: "clear".localized(),
confirmAccessibility: Accessibility(
identifier: "Clear"
),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
onConfirm: { _ in onConfirm: { _ in

@ -150,16 +150,8 @@ struct LandingScreen: View {
title: "urlOpen".localized(), title: "urlOpen".localized(),
body: .text("urlOpenBrowser".localized()), body: .text("urlOpenBrowser".localized()),
confirmTitle: "onboardingTos".localized(), confirmTitle: "onboardingTos".localized(),
confirmAccessibility: Accessibility(
identifier: "Terms of service button",
label: "Terms of service button"
),
confirmStyle: .textPrimary, confirmStyle: .textPrimary,
cancelTitle: "onboardingPrivacy".localized(), cancelTitle: "onboardingPrivacy".localized(),
cancelAccessibility: Accessibility(
identifier: "Privacy policy button",
label: "Privacy policy button"
),
cancelStyle: .textPrimary, cancelStyle: .textPrimary,
hasCloseButton: true, hasCloseButton: true,
onConfirm: { _ in onConfirm: { _ in

@ -308,7 +308,6 @@ class PrivacySettingsViewModel: SessionTableViewModel, NavigationItemSource, Nav
body: .text("callsVoiceAndVideoModalDescription".localized()), body: .text("callsVoiceAndVideoModalDescription".localized()),
showCondition: .disabled, showCondition: .disabled,
confirmTitle: "theContinue".localized(), confirmTitle: "theContinue".localized(),
confirmAccessibility: Accessibility(identifier: "Enable"),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
onConfirm: { _ in Permissions.requestMicrophonePermissionIfNeeded() } onConfirm: { _ in Permissions.requestMicrophonePermissionIfNeeded() }

@ -254,15 +254,7 @@ struct RecoveryPasswordScreen: View {
title: "recoveryPasswordHidePermanently".localized(), title: "recoveryPasswordHidePermanently".localized(),
body: .text("recoveryPasswordHidePermanentlyDescription1".localized()), body: .text("recoveryPasswordHidePermanentlyDescription1".localized()),
confirmTitle: "theContinue".localized(), confirmTitle: "theContinue".localized(),
confirmAccessibility: Accessibility(
identifier: "Continue",
label: "Continue"
),
confirmStyle: .danger, confirmStyle: .danger,
cancelAccessibility: Accessibility(
identifier: "Cancel",
label: "Cancel"
),
cancelStyle: .textPrimary, cancelStyle: .textPrimary,
onConfirm: { modal in onConfirm: { modal in
guard let presentingViewController: UIViewController = modal.presentingViewController else { guard let presentingViewController: UIViewController = modal.presentingViewController else {
@ -274,16 +266,8 @@ struct RecoveryPasswordScreen: View {
title: "recoveryPasswordHidePermanently".localized(), title: "recoveryPasswordHidePermanently".localized(),
body: .text("recoveryPasswordHidePermanentlyDescription2".localized()), body: .text("recoveryPasswordHidePermanentlyDescription2".localized()),
confirmTitle: "cancel".localized(), confirmTitle: "cancel".localized(),
confirmAccessibility: Accessibility(
identifier: "Cancel",
label: "Cancel"
),
confirmStyle: .textPrimary, confirmStyle: .textPrimary,
cancelTitle: "yes".localized(), cancelTitle: "yes".localized(),
cancelAccessibility: Accessibility(
identifier: "Confirm button",
label: "Confirm button"
),
cancelStyle: .danger, cancelStyle: .danger,
onCancel: { modal in onCancel: { modal in
modal.dismiss(animated: true) { modal.dismiss(animated: true) {

@ -166,7 +166,6 @@ public class SessionHostingViewController<Content>: UIHostingController<Modified
.localized() .localized()
), ),
confirmTitle: "quitButton".localized(), confirmTitle: "quitButton".localized(),
confirmAccessibility: Accessibility(identifier: "Quit"),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .textPrimary, cancelStyle: .textPrimary,
onConfirm: { [weak self] confirmationModal in onConfirm: { [weak self] confirmationModal in

@ -133,9 +133,6 @@ public extension UIContextualAction {
title: "clearMessages".localized(), title: "clearMessages".localized(),
body: .text("clearMessagesNoteToSelfDescription".localized()), body: .text("clearMessagesNoteToSelfDescription".localized()),
confirmTitle: "clear".localized(), confirmTitle: "clear".localized(),
confirmAccessibility: Accessibility(
identifier: "Clear"
),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
dismissOnConfirm: true, dismissOnConfirm: true,
@ -183,9 +180,6 @@ public extension UIContextualAction {
title: "noteToSelfHide".localized(), title: "noteToSelfHide".localized(),
body: .text("noteToSelfHideDescription".localized()), body: .text("noteToSelfHideDescription".localized()),
confirmTitle: "hide".localized(), confirmTitle: "hide".localized(),
confirmAccessibility: Accessibility(
identifier: "Hide"
),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
dismissOnConfirm: true, dismissOnConfirm: true,
@ -375,7 +369,6 @@ public extension UIContextualAction {
.localizedFormatted(baseFont: .systemFont(ofSize: Values.smallFontSize)) .localizedFormatted(baseFont: .systemFont(ofSize: Values.smallFontSize))
), ),
confirmTitle: "block".localized(), confirmTitle: "block".localized(),
confirmAccessibility: Accessibility(identifier: "Confirm block"),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
dismissOnConfirm: true, dismissOnConfirm: true,
@ -432,9 +425,6 @@ public extension UIContextualAction {
title: confirmationModalTitle, title: confirmationModalTitle,
body: .attributedText(confirmationModalExplanation), body: .attributedText(confirmationModalExplanation),
confirmTitle: "leave".localized(), confirmTitle: "leave".localized(),
confirmAccessibility: Accessibility(
identifier: "Leave"
),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
dismissOnConfirm: true, dismissOnConfirm: true,
@ -538,9 +528,6 @@ public extension UIContextualAction {
title: confirmationModalTitle, title: confirmationModalTitle,
body: .attributedText(confirmationModalExplanation), body: .attributedText(confirmationModalExplanation),
confirmTitle: "delete".localized(), confirmTitle: "delete".localized(),
confirmAccessibility: Accessibility(
identifier: "Confirm delete"
),
confirmStyle: .danger, confirmStyle: .danger,
cancelStyle: .alert_text, cancelStyle: .alert_text,
dismissOnConfirm: true, dismissOnConfirm: true,

@ -257,16 +257,15 @@ public class ConfirmationModal: Modal, UITextFieldDelegate {
imageViewTapGestureRecognizer.isEnabled = true imageViewTapGestureRecognizer.isEnabled = true
} }
confirmButton.accessibilityLabel = info.confirmAccessibility?.label confirmButton.accessibilityIdentifier = info.confirmTitle
confirmButton.accessibilityIdentifier = info.confirmAccessibility?.identifier
confirmButton.isAccessibilityElement = true confirmButton.isAccessibilityElement = true
confirmButton.setTitle(info.confirmTitle, for: .normal) confirmButton.setTitle(info.confirmTitle, for: .normal)
confirmButton.setThemeTitleColor(info.confirmStyle, for: .normal) confirmButton.setThemeTitleColor(info.confirmStyle, for: .normal)
confirmButton.setThemeTitleColor(.disabled, for: .disabled) confirmButton.setThemeTitleColor(.disabled, for: .disabled)
confirmButton.isHidden = (info.confirmTitle == nil) confirmButton.isHidden = (info.confirmTitle == nil)
confirmButton.isEnabled = info.confirmEnabled confirmButton.isEnabled = info.confirmEnabled
cancelButton.accessibilityLabel = info.cancelAccessibility?.label
cancelButton.accessibilityIdentifier = info.cancelAccessibility?.identifier cancelButton.accessibilityIdentifier = info.cancelTitle
cancelButton.isAccessibilityElement = true cancelButton.isAccessibilityElement = true
cancelButton.setTitle(info.cancelTitle, for: .normal) cancelButton.setTitle(info.cancelTitle, for: .normal)
cancelButton.setThemeTitleColor(info.cancelStyle, for: .normal) cancelButton.setThemeTitleColor(info.cancelStyle, for: .normal)
@ -274,8 +273,13 @@ public class ConfirmationModal: Modal, UITextFieldDelegate {
cancelButton.isEnabled = info.cancelEnabled cancelButton.isEnabled = info.cancelEnabled
closeButton.isHidden = !info.hasCloseButton closeButton.isHidden = !info.hasCloseButton
contentView.accessibilityLabel = info.accessibility?.label titleLabel.isAccessibilityElement = true
contentView.accessibilityIdentifier = info.accessibility?.identifier titleLabel.accessibilityIdentifier = "Modal heading" // stringlint:disable
titleLabel.accessibilityLabel = titleLabel.text
explanationLabel.isAccessibilityElement = true
explanationLabel.accessibilityIdentifier = "Modal description" // stringlint:disable
explanationLabel.accessibilityLabel = explanationLabel.text
} }
// MARK: - UITextFieldDelegate // MARK: - UITextFieldDelegate
@ -329,14 +333,11 @@ public extension ConfirmationModal {
struct Info: Equatable, Hashable { struct Info: Equatable, Hashable {
let title: String let title: String
let body: Body let body: Body
let accessibility: Accessibility?
public let showCondition: ShowCondition public let showCondition: ShowCondition
let confirmTitle: String? let confirmTitle: String?
let confirmAccessibility: Accessibility?
let confirmStyle: ThemeValue let confirmStyle: ThemeValue
let confirmEnabled: Bool let confirmEnabled: Bool
let cancelTitle: String let cancelTitle: String
let cancelAccessibility: Accessibility?
let cancelStyle: ThemeValue let cancelStyle: ThemeValue
let cancelEnabled: Bool let cancelEnabled: Bool
let hasCloseButton: Bool let hasCloseButton: Bool
@ -351,16 +352,11 @@ public extension ConfirmationModal {
public init( public init(
title: String, title: String,
body: Body = .none, body: Body = .none,
accessibility: Accessibility? = nil,
showCondition: ShowCondition = .none, showCondition: ShowCondition = .none,
confirmTitle: String? = nil, confirmTitle: String? = nil,
confirmAccessibility: Accessibility? = nil,
confirmStyle: ThemeValue = .alert_text, confirmStyle: ThemeValue = .alert_text,
confirmEnabled: Bool = true, confirmEnabled: Bool = true,
cancelTitle: String = "cancel".localized(), cancelTitle: String = "cancel".localized(),
cancelAccessibility: Accessibility? = Accessibility(
identifier: "Cancel"
),
cancelStyle: ThemeValue = .danger, cancelStyle: ThemeValue = .danger,
cancelEnabled: Bool = true, cancelEnabled: Bool = true,
hasCloseButton: Bool = false, hasCloseButton: Bool = false,
@ -372,14 +368,11 @@ public extension ConfirmationModal {
) { ) {
self.title = title self.title = title
self.body = body self.body = body
self.accessibility = accessibility
self.showCondition = showCondition self.showCondition = showCondition
self.confirmTitle = confirmTitle self.confirmTitle = confirmTitle
self.confirmAccessibility = confirmAccessibility
self.confirmStyle = confirmStyle self.confirmStyle = confirmStyle
self.confirmEnabled = confirmEnabled self.confirmEnabled = confirmEnabled
self.cancelTitle = cancelTitle self.cancelTitle = cancelTitle
self.cancelAccessibility = cancelAccessibility
self.cancelStyle = cancelStyle self.cancelStyle = cancelStyle
self.cancelEnabled = cancelEnabled self.cancelEnabled = cancelEnabled
self.hasCloseButton = hasCloseButton self.hasCloseButton = hasCloseButton
@ -403,14 +396,11 @@ public extension ConfirmationModal {
return Info( return Info(
title: self.title, title: self.title,
body: (body ?? self.body), body: (body ?? self.body),
accessibility: self.accessibility,
showCondition: self.showCondition, showCondition: self.showCondition,
confirmTitle: self.confirmTitle, confirmTitle: self.confirmTitle,
confirmAccessibility: self.confirmAccessibility,
confirmStyle: self.confirmStyle, confirmStyle: self.confirmStyle,
confirmEnabled: (confirmEnabled ?? self.confirmEnabled), confirmEnabled: (confirmEnabled ?? self.confirmEnabled),
cancelTitle: self.cancelTitle, cancelTitle: self.cancelTitle,
cancelAccessibility: self.cancelAccessibility,
cancelStyle: self.cancelStyle, cancelStyle: self.cancelStyle,
cancelEnabled: (cancelEnabled ?? self.cancelEnabled), cancelEnabled: (cancelEnabled ?? self.cancelEnabled),
hasCloseButton: self.hasCloseButton, hasCloseButton: self.hasCloseButton,
@ -428,14 +418,11 @@ public extension ConfirmationModal {
return ( return (
lhs.title == rhs.title && lhs.title == rhs.title &&
lhs.body == rhs.body && lhs.body == rhs.body &&
lhs.accessibility == rhs.accessibility &&
lhs.showCondition == rhs.showCondition && lhs.showCondition == rhs.showCondition &&
lhs.confirmTitle == rhs.confirmTitle && lhs.confirmTitle == rhs.confirmTitle &&
lhs.confirmAccessibility == rhs.confirmAccessibility &&
lhs.confirmStyle == rhs.confirmStyle && lhs.confirmStyle == rhs.confirmStyle &&
lhs.confirmEnabled == rhs.confirmEnabled && lhs.confirmEnabled == rhs.confirmEnabled &&
lhs.cancelTitle == rhs.cancelTitle && lhs.cancelTitle == rhs.cancelTitle &&
lhs.cancelAccessibility == rhs.cancelAccessibility &&
lhs.cancelStyle == rhs.cancelStyle && lhs.cancelStyle == rhs.cancelStyle &&
lhs.cancelEnabled == rhs.cancelEnabled && lhs.cancelEnabled == rhs.cancelEnabled &&
lhs.hasCloseButton == rhs.hasCloseButton && lhs.hasCloseButton == rhs.hasCloseButton &&
@ -447,14 +434,11 @@ public extension ConfirmationModal {
public func hash(into hasher: inout Hasher) { public func hash(into hasher: inout Hasher) {
title.hash(into: &hasher) title.hash(into: &hasher)
body.hash(into: &hasher) body.hash(into: &hasher)
accessibility.hash(into: &hasher)
showCondition.hash(into: &hasher) showCondition.hash(into: &hasher)
confirmTitle.hash(into: &hasher) confirmTitle.hash(into: &hasher)
confirmAccessibility.hash(into: &hasher)
confirmStyle.hash(into: &hasher) confirmStyle.hash(into: &hasher)
confirmEnabled.hash(into: &hasher) confirmEnabled.hash(into: &hasher)
cancelTitle.hash(into: &hasher) cancelTitle.hash(into: &hasher)
cancelAccessibility.hash(into: &hasher)
cancelStyle.hash(into: &hasher) cancelStyle.hash(into: &hasher)
cancelEnabled.hash(into: &hasher) cancelEnabled.hash(into: &hasher)
hasCloseButton.hash(into: &hasher) hasCloseButton.hash(into: &hasher)

@ -123,7 +123,7 @@ public struct SessionTextField<ExplanationView>: View where ExplanationView: Vie
.accessibility( .accessibility(
Accessibility( Accessibility(
identifier: "Error message", identifier: "Error message",
label: "Error message" label: error ?? previousError
) )
) )
} else { } else {

Loading…
Cancel
Save