From 02dd49b9c9b97af992a4a728f0ed99cb7771b4c1 Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Wed, 26 Mar 2025 14:23:17 +1100 Subject: [PATCH 1/5] Updated a few accessibility ids for automated tests --- Session/Conversations/Settings/ThreadSettingsViewModel.swift | 4 ++-- Session/Settings/SettingsViewModel.swift | 2 +- .../Conversations/Settings/ThreadSettingsViewModelSpec.swift | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Session/Conversations/Settings/ThreadSettingsViewModel.swift b/Session/Conversations/Settings/ThreadSettingsViewModel.swift index 7d611f2ac..0dba52653 100644 --- a/Session/Conversations/Settings/ThreadSettingsViewModel.swift +++ b/Session/Conversations/Settings/ThreadSettingsViewModel.swift @@ -661,7 +661,7 @@ class ThreadSettingsViewModel: SessionTableViewModel, NavigatableStateHolder, Ob threadViewModel.threadIsBlocked == true, oldValue: (previous?.threadViewModel?.threadIsBlocked == true), accessibility: Accessibility( - identifier: "Block This User - Switch" + identifier: "Block - Switch" ) ), accessibility: Accessibility( @@ -1130,7 +1130,7 @@ class ThreadSettingsViewModel: SessionTableViewModel, NavigatableStateHolder, Ob placeholder: "nicknameEnter".localized(), initialValue: current, accessibility: Accessibility( - identifier: "Username" + identifier: "Username input" ) ), onChange: { [weak self] updatedName in self?.updatedName = updatedName } diff --git a/Session/Settings/SettingsViewModel.swift b/Session/Settings/SettingsViewModel.swift index b7fa48257..d1950c2e5 100644 --- a/Session/Settings/SettingsViewModel.swift +++ b/Session/Settings/SettingsViewModel.swift @@ -461,7 +461,7 @@ class SettingsViewModel: SessionTableViewModel, NavigationItemSource, Navigatabl placeholder: "displayNameEnter".localized(), initialValue: current, accessibility: Accessibility( - identifier: "Username" + identifier: "Username input" ) ), onChange: { [weak self] updatedName in self?.updatedName = updatedName } diff --git a/SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift b/SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift index e86d5da1d..6dbd26152 100644 --- a/SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift +++ b/SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift @@ -341,7 +341,7 @@ class ThreadSettingsViewModelSpec: QuickSpec { info: ConfirmationModal.Info.Body.InputInfo( placeholder: "nicknameEnter".localized(), initialValue: nil, - accessibility: Accessibility(identifier: "Username") + accessibility: Accessibility(identifier: "Username input") ), onChange: { _ in } ) From ef741ae58ff08d52b47bca8c1f2db30ff3d768cb Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Wed, 2 Apr 2025 11:56:22 +1100 Subject: [PATCH 2/5] Fixed a layout issue with the empty state text --- Session/Conversations/ConversationVC.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Session/Conversations/ConversationVC.swift b/Session/Conversations/ConversationVC.swift index b1bb3bf96..50b4bbcf0 100644 --- a/Session/Conversations/ConversationVC.swift +++ b/Session/Conversations/ConversationVC.swift @@ -290,15 +290,16 @@ final class ConversationVC: BaseVC, LibSessionRespondingViewController, Conversa private lazy var emptyStateLabelContainer: UIView = { let result: UIView = UIView() result.addSubview(emptyStateLabel) + emptyStateLabel.pin(.top, to: .top, of: result) emptyStateLabel.pin(.leading, to: .leading, of: result, withInset: Values.largeSpacing) emptyStateLabel.pin(.trailing, to: .trailing, of: result, withInset: -Values.largeSpacing) + emptyStateLabel.pin(.bottom, to: .bottom, of: result) return result }() private lazy var emptyStateLabel: UILabel = { let result: UILabel = UILabel() - result.isAccessibilityElement = true result.accessibilityIdentifier = "Control message" result.translatesAutoresizingMaskIntoConstraints = false result.font = .systemFont(ofSize: Values.verySmallFontSize) @@ -942,7 +943,7 @@ final class ConversationVC: BaseVC, LibSessionRespondingViewController, Conversa self.viewModel.updateInteractionData(updatedData) // Update the empty state - self.emptyStateLabel.isHidden = hasMessages + self.emptyStateLabelContainer.isHidden = hasMessages UIView.performWithoutAnimation { self.tableView.reloadData() @@ -954,7 +955,7 @@ final class ConversationVC: BaseVC, LibSessionRespondingViewController, Conversa } // Update the empty state - self.emptyStateLabel.isHidden = hasMessages + self.emptyStateLabelContainer.isHidden = hasMessages // Update the ReactionListSheet (if one exists) if let messageUpdates: [MessageViewModel] = updatedData.first(where: { $0.model == .messages })?.elements { From e7e289c3e769502b2cac18c00ed3a8d0a0699e94 Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Wed, 2 Apr 2025 14:14:37 +1100 Subject: [PATCH 3/5] Fixed up the conversation banner accessibility ids --- Session/Conversations/ConversationVC.swift | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Session/Conversations/ConversationVC.swift b/Session/Conversations/ConversationVC.swift index 50b4bbcf0..6ccfea3bd 100644 --- a/Session/Conversations/ConversationVC.swift +++ b/Session/Conversations/ConversationVC.swift @@ -227,8 +227,7 @@ final class ConversationVC: BaseVC, LibSessionRespondingViewController, Conversa icon: .close, tintColor: .messageBubble_outgoingText, backgroundColor: .primary, - accessibility: Accessibility(label: "Outdated client banner"), - labelAccessibility: Accessibility(label: "Outdated client banner text"), + labelAccessibility: Accessibility(identifier: "Outdated client banner"), height: 40, onTap: { [weak self] in self?.removeOutdatedClientBanner() } ) @@ -246,7 +245,7 @@ final class ConversationVC: BaseVC, LibSessionRespondingViewController, Conversa icon: .none, tintColor: .messageBubble_outgoingText, backgroundColor: .primary, - accessibility: Accessibility(label: "Legacy group banner"), + labelAccessibility: Accessibility(identifier: "Legacy group banner"), height: nil, onTap: { [weak self] in self?.openUrl(Features.legacyGroupDepricationUrl) } ) @@ -268,7 +267,7 @@ final class ConversationVC: BaseVC, LibSessionRespondingViewController, Conversa icon: .none, tintColor: .black, backgroundColor: .explicitPrimary(.orange), - accessibility: Accessibility(label: "Expired group banner"), + labelAccessibility: Accessibility(identifier: "Expired group banner"), height: nil ) ) From d2816eed14d424d90246ada0bb6b1672bb4339dd Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Wed, 2 Apr 2025 14:43:44 +1100 Subject: [PATCH 4/5] Updated "Leave Group" confirmation modal confirm button accessibility id --- .../Settings/ThreadSettingsViewModel.swift | 1 + SessionUIKit/Components/ConfirmationModal.swift | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Session/Conversations/Settings/ThreadSettingsViewModel.swift b/Session/Conversations/Settings/ThreadSettingsViewModel.swift index 0dba52653..08ab92ba7 100644 --- a/Session/Conversations/Settings/ThreadSettingsViewModel.swift +++ b/Session/Conversations/Settings/ThreadSettingsViewModel.swift @@ -538,6 +538,7 @@ class ThreadSettingsViewModel: SessionTableViewModel, NavigatableStateHolder, Ob ), confirmTitle: "leave".localized(), confirmStyle: .danger, + confirmAccessibility: Accessibility(identifier: "Confirm leave"), cancelStyle: .alert_text ), onTap: { [weak self, dependencies] in diff --git a/SessionUIKit/Components/ConfirmationModal.swift b/SessionUIKit/Components/ConfirmationModal.swift index b219a137b..4939fbba3 100644 --- a/SessionUIKit/Components/ConfirmationModal.swift +++ b/SessionUIKit/Components/ConfirmationModal.swift @@ -407,7 +407,7 @@ public class ConfirmationModal: Modal, UITextFieldDelegate, UITextViewDelegate { imageViewTapGestureRecognizer.isEnabled = true } - confirmButton.accessibilityIdentifier = info.confirmTitle + confirmButton.accessibilityIdentifier = (info.confirmAccessibility?.identifier ?? info.confirmTitle) confirmButton.isAccessibilityElement = true confirmButton.setTitle(info.confirmTitle, for: .normal) confirmButton.setThemeTitleColor(info.confirmStyle, for: .normal) @@ -415,7 +415,7 @@ public class ConfirmationModal: Modal, UITextFieldDelegate, UITextViewDelegate { confirmButton.isHidden = (info.confirmTitle == nil) confirmButton.isEnabled = info.confirmEnabled.isValid(with: info) - cancelButton.accessibilityIdentifier = info.cancelTitle + cancelButton.accessibilityIdentifier = (info.cancelAccessibility?.identifier ?? info.cancelTitle) cancelButton.isAccessibilityElement = true cancelButton.setTitle(info.cancelTitle, for: .normal) cancelButton.setThemeTitleColor(info.cancelStyle, for: .normal) @@ -579,9 +579,11 @@ public extension ConfirmationModal { internal let confirmTitle: String? let confirmStyle: ThemeValue let confirmEnabled: ButtonValidator + let confirmAccessibility: Accessibility? internal let cancelTitle: String let cancelStyle: ThemeValue let cancelEnabled: ButtonValidator + let cancelAccessibility: Accessibility? let hasCloseButton: Bool let dismissOnConfirm: Bool let dismissType: Modal.DismissType @@ -598,9 +600,11 @@ public extension ConfirmationModal { confirmTitle: String? = nil, confirmStyle: ThemeValue = .alert_text, confirmEnabled: ButtonValidator = true, + confirmAccessibility: Accessibility? = nil, cancelTitle: String = SNUIKit.localizedString(for: "cancel"), cancelStyle: ThemeValue = .danger, cancelEnabled: ButtonValidator = true, + cancelAccessibility: Accessibility? = nil, hasCloseButton: Bool = false, dismissOnConfirm: Bool = true, dismissType: Modal.DismissType = .recursive, @@ -614,9 +618,11 @@ public extension ConfirmationModal { self.confirmTitle = confirmTitle self.confirmStyle = confirmStyle self.confirmEnabled = confirmEnabled + self.confirmAccessibility = confirmAccessibility self.cancelTitle = cancelTitle self.cancelStyle = cancelStyle self.cancelEnabled = cancelEnabled + self.cancelAccessibility = cancelAccessibility self.hasCloseButton = hasCloseButton self.dismissOnConfirm = dismissOnConfirm self.dismissType = dismissType @@ -640,9 +646,11 @@ public extension ConfirmationModal { confirmTitle: self.confirmTitle, confirmStyle: self.confirmStyle, confirmEnabled: self.confirmEnabled, + confirmAccessibility: self.confirmAccessibility, cancelTitle: self.cancelTitle, cancelStyle: self.cancelStyle, cancelEnabled: self.cancelEnabled, + cancelAccessibility: self.cancelAccessibility, hasCloseButton: self.hasCloseButton, dismissOnConfirm: self.dismissOnConfirm, dismissType: self.dismissType, @@ -662,9 +670,11 @@ public extension ConfirmationModal { lhs.confirmTitle == rhs.confirmTitle && lhs.confirmStyle == rhs.confirmStyle && lhs.confirmEnabled.isValid(with: lhs) == rhs.confirmEnabled.isValid(with: rhs) && + lhs.confirmAccessibility == rhs.confirmAccessibility && lhs.cancelTitle == rhs.cancelTitle && lhs.cancelStyle == rhs.cancelStyle && lhs.cancelEnabled.isValid(with: lhs) == rhs.cancelEnabled.isValid(with: rhs) && + lhs.cancelAccessibility == rhs.cancelAccessibility && lhs.hasCloseButton == rhs.hasCloseButton && lhs.dismissOnConfirm == rhs.dismissOnConfirm && lhs.dismissType == rhs.dismissType @@ -678,9 +688,11 @@ public extension ConfirmationModal { confirmTitle.hash(into: &hasher) confirmStyle.hash(into: &hasher) confirmEnabled.isValid(with: self).hash(into: &hasher) + confirmAccessibility?.hash(into: &hasher) cancelTitle.hash(into: &hasher) cancelStyle.hash(into: &hasher) cancelEnabled.isValid(with: self).hash(into: &hasher) + cancelAccessibility?.hash(into: &hasher) hasCloseButton.hash(into: &hasher) dismissOnConfirm.hash(into: &hasher) dismissType.hash(into: &hasher) From 31e09a5b6d8c7475ab0688e817dacb52b78bf898 Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Wed, 2 Apr 2025 15:29:04 +1100 Subject: [PATCH 5/5] Revert "Updated "Leave Group" confirmation modal confirm button accessibility id" This reverts commit d2816eed14d424d90246ada0bb6b1672bb4339dd. --- .../Settings/ThreadSettingsViewModel.swift | 1 - SessionUIKit/Components/ConfirmationModal.swift | 16 ++-------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/Session/Conversations/Settings/ThreadSettingsViewModel.swift b/Session/Conversations/Settings/ThreadSettingsViewModel.swift index 08ab92ba7..0dba52653 100644 --- a/Session/Conversations/Settings/ThreadSettingsViewModel.swift +++ b/Session/Conversations/Settings/ThreadSettingsViewModel.swift @@ -538,7 +538,6 @@ class ThreadSettingsViewModel: SessionTableViewModel, NavigatableStateHolder, Ob ), confirmTitle: "leave".localized(), confirmStyle: .danger, - confirmAccessibility: Accessibility(identifier: "Confirm leave"), cancelStyle: .alert_text ), onTap: { [weak self, dependencies] in diff --git a/SessionUIKit/Components/ConfirmationModal.swift b/SessionUIKit/Components/ConfirmationModal.swift index 4939fbba3..b219a137b 100644 --- a/SessionUIKit/Components/ConfirmationModal.swift +++ b/SessionUIKit/Components/ConfirmationModal.swift @@ -407,7 +407,7 @@ public class ConfirmationModal: Modal, UITextFieldDelegate, UITextViewDelegate { imageViewTapGestureRecognizer.isEnabled = true } - confirmButton.accessibilityIdentifier = (info.confirmAccessibility?.identifier ?? info.confirmTitle) + confirmButton.accessibilityIdentifier = info.confirmTitle confirmButton.isAccessibilityElement = true confirmButton.setTitle(info.confirmTitle, for: .normal) confirmButton.setThemeTitleColor(info.confirmStyle, for: .normal) @@ -415,7 +415,7 @@ public class ConfirmationModal: Modal, UITextFieldDelegate, UITextViewDelegate { confirmButton.isHidden = (info.confirmTitle == nil) confirmButton.isEnabled = info.confirmEnabled.isValid(with: info) - cancelButton.accessibilityIdentifier = (info.cancelAccessibility?.identifier ?? info.cancelTitle) + cancelButton.accessibilityIdentifier = info.cancelTitle cancelButton.isAccessibilityElement = true cancelButton.setTitle(info.cancelTitle, for: .normal) cancelButton.setThemeTitleColor(info.cancelStyle, for: .normal) @@ -579,11 +579,9 @@ public extension ConfirmationModal { internal let confirmTitle: String? let confirmStyle: ThemeValue let confirmEnabled: ButtonValidator - let confirmAccessibility: Accessibility? internal let cancelTitle: String let cancelStyle: ThemeValue let cancelEnabled: ButtonValidator - let cancelAccessibility: Accessibility? let hasCloseButton: Bool let dismissOnConfirm: Bool let dismissType: Modal.DismissType @@ -600,11 +598,9 @@ public extension ConfirmationModal { confirmTitle: String? = nil, confirmStyle: ThemeValue = .alert_text, confirmEnabled: ButtonValidator = true, - confirmAccessibility: Accessibility? = nil, cancelTitle: String = SNUIKit.localizedString(for: "cancel"), cancelStyle: ThemeValue = .danger, cancelEnabled: ButtonValidator = true, - cancelAccessibility: Accessibility? = nil, hasCloseButton: Bool = false, dismissOnConfirm: Bool = true, dismissType: Modal.DismissType = .recursive, @@ -618,11 +614,9 @@ public extension ConfirmationModal { self.confirmTitle = confirmTitle self.confirmStyle = confirmStyle self.confirmEnabled = confirmEnabled - self.confirmAccessibility = confirmAccessibility self.cancelTitle = cancelTitle self.cancelStyle = cancelStyle self.cancelEnabled = cancelEnabled - self.cancelAccessibility = cancelAccessibility self.hasCloseButton = hasCloseButton self.dismissOnConfirm = dismissOnConfirm self.dismissType = dismissType @@ -646,11 +640,9 @@ public extension ConfirmationModal { confirmTitle: self.confirmTitle, confirmStyle: self.confirmStyle, confirmEnabled: self.confirmEnabled, - confirmAccessibility: self.confirmAccessibility, cancelTitle: self.cancelTitle, cancelStyle: self.cancelStyle, cancelEnabled: self.cancelEnabled, - cancelAccessibility: self.cancelAccessibility, hasCloseButton: self.hasCloseButton, dismissOnConfirm: self.dismissOnConfirm, dismissType: self.dismissType, @@ -670,11 +662,9 @@ public extension ConfirmationModal { lhs.confirmTitle == rhs.confirmTitle && lhs.confirmStyle == rhs.confirmStyle && lhs.confirmEnabled.isValid(with: lhs) == rhs.confirmEnabled.isValid(with: rhs) && - lhs.confirmAccessibility == rhs.confirmAccessibility && lhs.cancelTitle == rhs.cancelTitle && lhs.cancelStyle == rhs.cancelStyle && lhs.cancelEnabled.isValid(with: lhs) == rhs.cancelEnabled.isValid(with: rhs) && - lhs.cancelAccessibility == rhs.cancelAccessibility && lhs.hasCloseButton == rhs.hasCloseButton && lhs.dismissOnConfirm == rhs.dismissOnConfirm && lhs.dismissType == rhs.dismissType @@ -688,11 +678,9 @@ public extension ConfirmationModal { confirmTitle.hash(into: &hasher) confirmStyle.hash(into: &hasher) confirmEnabled.isValid(with: self).hash(into: &hasher) - confirmAccessibility?.hash(into: &hasher) cancelTitle.hash(into: &hasher) cancelStyle.hash(into: &hasher) cancelEnabled.isValid(with: self).hash(into: &hasher) - cancelAccessibility?.hash(into: &hasher) hasCloseButton.hash(into: &hasher) dismissOnConfirm.hash(into: &hasher) dismissType.hash(into: &hasher)