Fixed an accessibility regression

This commit is contained in:
Morgan Pretty 2023-04-26 15:13:39 +10:00
parent 56164ab7f4
commit 2983086837
13 changed files with 107 additions and 96 deletions

View File

@ -688,7 +688,6 @@
FD71164628E2CC1300B47552 /* SessionHighlightingBackgroundLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71164528E2CC1300B47552 /* SessionHighlightingBackgroundLabel.swift */; };
FD71164828E2CE8700B47552 /* SessionCell+AccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71164728E2CE8700B47552 /* SessionCell+AccessoryView.swift */; };
FD71164A28E3EA5B00B47552 /* DismissType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71164928E3EA5B00B47552 /* DismissType.swift */; };
FD71164C28E3F5AA00B47552 /* SessionCell+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71164B28E3F5AA00B47552 /* SessionCell+Accessibility.swift */; };
FD71164E28E3F8CC00B47552 /* SessionCell+Info.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71164D28E3F8CC00B47552 /* SessionCell+Info.swift */; };
FD71165028E3F9FA00B47552 /* SessionTableViewModel+NavItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71164F28E3F9FA00B47552 /* SessionTableViewModel+NavItem.swift */; };
FD71165228E410BE00B47552 /* SessionTableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD71165128E410BE00B47552 /* SessionTableSection.swift */; };
@ -822,6 +821,7 @@
FDDF074429C3E3D000E5E8B5 /* FetchRequest+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDDF074329C3E3D000E5E8B5 /* FetchRequest+Utilities.swift */; };
FDE658A129418C7900A33BC1 /* CryptoKit+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE658A029418C7900A33BC1 /* CryptoKit+Utilities.swift */; };
FDE658A329418E2F00A33BC1 /* KeyPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE658A229418E2F00A33BC1 /* KeyPair.swift */; };
FDE6E99829F8E63A00F93C5D /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE6E99729F8E63A00F93C5D /* Accessibility.swift */; };
FDE77F6B280FEB28002CFC5D /* ControlMessageProcessRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE77F6A280FEB28002CFC5D /* ControlMessageProcessRecord.swift */; };
FDED2E3C282E1B5D00B2CD2A /* UICollectionView+ReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDED2E3B282E1B5D00B2CD2A /* UICollectionView+ReusableView.swift */; };
FDF0B73C27FFD3D6004C14C5 /* LinkPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDF0B73B27FFD3D6004C14C5 /* LinkPreview.swift */; };
@ -1824,7 +1824,6 @@
FD71164528E2CC1300B47552 /* SessionHighlightingBackgroundLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionHighlightingBackgroundLabel.swift; sourceTree = "<group>"; };
FD71164728E2CE8700B47552 /* SessionCell+AccessoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionCell+AccessoryView.swift"; sourceTree = "<group>"; };
FD71164928E3EA5B00B47552 /* DismissType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DismissType.swift; sourceTree = "<group>"; };
FD71164B28E3F5AA00B47552 /* SessionCell+Accessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionCell+Accessibility.swift"; sourceTree = "<group>"; };
FD71164D28E3F8CC00B47552 /* SessionCell+Info.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionCell+Info.swift"; sourceTree = "<group>"; };
FD71164F28E3F9FA00B47552 /* SessionTableViewModel+NavItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionTableViewModel+NavItem.swift"; sourceTree = "<group>"; };
FD71165128E410BE00B47552 /* SessionTableSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionTableSection.swift; sourceTree = "<group>"; };
@ -1954,6 +1953,7 @@
FDDF074329C3E3D000E5E8B5 /* FetchRequest+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FetchRequest+Utilities.swift"; sourceTree = "<group>"; };
FDE658A029418C7900A33BC1 /* CryptoKit+Utilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CryptoKit+Utilities.swift"; sourceTree = "<group>"; };
FDE658A229418E2F00A33BC1 /* KeyPair.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyPair.swift; sourceTree = "<group>"; };
FDE6E99729F8E63A00F93C5D /* Accessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Accessibility.swift; sourceTree = "<group>"; };
FDE7214F287E50D50093DF33 /* ProtoWrappers.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = ProtoWrappers.py; sourceTree = "<group>"; };
FDE72150287E50D50093DF33 /* LintLocalizableStrings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LintLocalizableStrings.swift; sourceTree = "<group>"; };
FDE77F68280F9EDA002CFC5D /* JobRunnerError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JobRunnerError.swift; sourceTree = "<group>"; };
@ -3967,6 +3967,7 @@
children = (
FD71162B28E1451400B47552 /* Position.swift */,
FD71163128E2C42A00B47552 /* IconSize.swift */,
FDE6E99729F8E63A00F93C5D /* Accessibility.swift */,
);
path = Types;
sourceTree = "<group>";
@ -3989,7 +3990,6 @@
FD71163328E2C48400B47552 /* TransitionType.swift */,
FD71164D28E3F8CC00B47552 /* SessionCell+Info.swift */,
FD71164328E2CB8A00B47552 /* SessionCell+Accessory.swift */,
FD71164B28E3F5AA00B47552 /* SessionCell+Accessibility.swift */,
FDF848F429413EEC007DCAE5 /* SessionCell+Styling.swift */,
FD71165128E410BE00B47552 /* SessionTableSection.swift */,
FD71164F28E3F9FA00B47552 /* SessionTableViewModel+NavItem.swift */,
@ -5426,6 +5426,7 @@
C331FFE92558FB0000070591 /* Separator.swift in Sources */,
FD71163228E2C42A00B47552 /* IconSize.swift in Sources */,
C33100282559000A00070591 /* UIView+Utilities.swift in Sources */,
FDE6E99829F8E63A00F93C5D /* Accessibility.swift in Sources */,
FD37E9CA28A1E4BD003AE748 /* Theme+ClassicLight.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -5899,7 +5900,6 @@
B8CCF63723961D6D0091D419 /* NewDMVC.swift in Sources */,
FDFDE12A282D056B0098B17F /* MediaZoomAnimationController.swift in Sources */,
4C1885D2218F8E1C00B67051 /* PhotoGridViewCell.swift in Sources */,
FD71164C28E3F5AA00B47552 /* SessionCell+Accessibility.swift in Sources */,
34D1F0501F7D45A60066283D /* GifPickerCell.swift in Sources */,
7BFA8AE32831D0D4001876F3 /* ContextMenuVC+EmojiReactsView.swift in Sources */,
C3E5C2FA251DBABB0040DFFC /* EditClosedGroupVC.swift in Sources */,

View File

@ -214,7 +214,7 @@ final class NewClosedGroupVC: BaseVC, UITableViewDataSource, UITableViewDelegate
self?.selectedContacts.contains(profile.id) == true
}),
styling: SessionCell.StyleInfo(backgroundStyle: .edgeToEdge),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Contact"
)
)

View File

@ -71,8 +71,7 @@ extension ConversationVC:
title: "modal_call_permission_request_title".localized(),
explanation: "modal_call_permission_request_explanation".localized(),
confirmTitle: "vc_settings_title".localized(),
confirmAccessibilityLabel: "Settings",
cancelAccessibilityLabel: "Cancel",
confirmAccessibility: Accessibility(identifier: "Settings"),
dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in
self?.dismiss(animated: true) {
@ -139,8 +138,8 @@ extension ConversationVC:
range: (message as NSString).range(of: self.viewModel.threadData.displayName)
),
confirmTitle: "modal_blocked_button_title".localized(),
confirmAccessibilityLabel: "Confirm block",
cancelAccessibilityLabel: "Cancel block",
confirmAccessibility: Accessibility(identifier: "Confirm block"),
cancelAccessibility: Accessibility(identifier: "Cancel block"),
dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in
self?.viewModel.unblockContact()
@ -912,8 +911,8 @@ extension ConversationVC:
range: (message as NSString).range(of: cellViewModel.authorName)
),
confirmTitle: "modal_download_button_title".localized(),
confirmAccessibilityLabel: "Download media",
cancelAccessibilityLabel: "Don't download media",
confirmAccessibility: Accessibility(identifier: "Download media"),
cancelAccessibility: Accessibility(identifier: "Don't download media"),
dismissOnConfirm: false // Custom dismissal logic
) { [weak self] _ in
self?.viewModel.trustContact()

View File

@ -285,7 +285,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
),
backgroundStyle: .noBackground
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Username",
label: threadViewModel.displayName
),
@ -311,7 +311,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
),
backgroundStyle: .noBackground
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Session ID",
label: threadViewModel.id
)
@ -333,7 +333,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
"COPY_GROUP_URL".localized() :
"vc_conversation_settings_copy_session_id_button_title".localized()
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).copy_thread_id",
label: "Copy Session ID"
),
@ -371,7 +371,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
.withRenderingMode(.alwaysTemplate)
),
title: MediaStrings.allMedia,
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).all_media",
label: "All media"
),
@ -393,7 +393,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
.withRenderingMode(.alwaysTemplate)
),
title: "CONVERSATION_SETTINGS_SEARCH".localized(),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).search",
label: "Search"
),
@ -410,7 +410,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
.withRenderingMode(.alwaysTemplate)
),
title: "vc_conversation_settings_invite_button_title".localized(),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).add_to_open_group"
),
onTap: { [weak self] in
@ -439,7 +439,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
"ic_timer_disabled"
)
)?.withRenderingMode(.alwaysTemplate),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
label: "Timer icon"
)
),
@ -451,7 +451,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
) :
"DISAPPEARING_MESSAGES_SUBTITLE_OFF".localized()
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).disappearing_messages",
label: "Disappearing messages"
),
@ -477,7 +477,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
.withRenderingMode(.alwaysTemplate)
),
title: "EDIT_GROUP_ACTION".localized(),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Edit group",
label: "Edit group"
),
@ -497,7 +497,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
.withRenderingMode(.alwaysTemplate)
),
title: "LEAVE_GROUP_ACTION".localized(),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Leave group",
label: "Leave group"
),
@ -579,7 +579,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
) ||
currentUserIsClosedGroupMember
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Mentions only notification setting",
label: "Mentions only"
),
@ -617,7 +617,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
) ||
currentUserIsClosedGroupMember
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).mute",
label: "Mute notifications"
),
@ -656,7 +656,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
rightAccessory: .toggle(
.boolValue(threadViewModel.threadIsBlocked == true)
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "\(ThreadSettingsViewModel.self).block",
label: "Block"
),
@ -682,7 +682,7 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
"BLOCK_LIST_UNBLOCK_BUTTON".localized() :
"BLOCK_LIST_BLOCK_BUTTON".localized()
),
confirmAccessibilityLabel: "Confirm block",
confirmAccessibility: Accessibility(identifier: "Confirm block"),
confirmStyle: .danger,
cancelStyle: .alert_text
),
@ -820,10 +820,12 @@ class ThreadSettingsViewModel: SessionTableViewModel<ThreadSettingsViewModel.Nav
) :
nil
),
accessibilityLabel: oldBlockedState == false ? "User blocked" : "Confirm unblock",
accessibilityId: "Test_name",
accessibility: Accessibility(
identifier: "Test_name",
label: (oldBlockedState == false ? "User blocked" : "Confirm unblock")
),
cancelTitle: "BUTTON_OK".localized(),
cancelAccessibilityLabel: "OK_BUTTON",
cancelAccessibility: Accessibility(identifier: "OK_BUTTON"),
cancelStyle: .alert_text
)
)

View File

@ -209,7 +209,7 @@ class PrivacySettingsViewModel: SessionTableViewModel<PrivacySettingsViewModel.N
title: "PRIVACY_CALLS_TITLE".localized(),
subtitle: "PRIVACY_CALLS_DESCRIPTION".localized(),
rightAccessory: .toggle(.settingBool(key: .areCallsEnabled)),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
label: "Allow voice and video calls"
),
confirmationInfo: ConfirmationModal.Info(
@ -217,7 +217,7 @@ class PrivacySettingsViewModel: SessionTableViewModel<PrivacySettingsViewModel.N
explanation: "PRIVACY_CALLS_WARNING_DESCRIPTION".localized(),
stateToShow: .whenDisabled,
confirmTitle: "continue_2".localized(),
confirmAccessibilityLabel: "Enable",
confirmAccessibility: Accessibility(identifier: "Enable"),
confirmStyle: .textPrimary,
onConfirm: { _ in Permissions.requestMicrophonePermissionIfNeeded() }
),

View File

@ -254,7 +254,7 @@ class SettingsViewModel: SessionTableViewModel<SettingsViewModel.NavButton, Sett
customPadding: SessionCell.Padding(bottom: Values.smallSpacing),
backgroundStyle: .noBackground
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
label: "Profile picture"
),
onTap: {
@ -278,7 +278,7 @@ class SettingsViewModel: SessionTableViewModel<SettingsViewModel.NavButton, Sett
customPadding: SessionCell.Padding(top: Values.smallSpacing),
backgroundStyle: .noBackground
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Username",
label: profile.displayName()
),
@ -301,7 +301,7 @@ class SettingsViewModel: SessionTableViewModel<SettingsViewModel.NavButton, Sett
customPadding: SessionCell.Padding(bottom: Values.smallSpacing),
backgroundStyle: .noBackground
),
accessibility: SessionCell.Accessibility(
accessibility: Accessibility(
identifier: "Session ID",
label: profile.id
)

View File

@ -1,18 +0,0 @@
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
public extension SessionCell {
struct Accessibility: Hashable, Equatable {
let identifier: String?
let label: String?
public init(
identifier: String? = nil,
label: String? = nil
) {
self.identifier = identifier
self.label = label
}
}
}

View File

@ -13,33 +13,33 @@ extension SessionCell {
size: IconSize,
customTint: ThemeValue?,
shouldFill: Bool,
accessibility: SessionCell.Accessibility?
accessibility: Accessibility?
)
case iconAsync(
size: IconSize,
customTint: ThemeValue?,
shouldFill: Bool,
accessibility: SessionCell.Accessibility?,
accessibility: Accessibility?,
setter: (UIImageView) -> Void
)
case toggle(
DataSource,
accessibility: SessionCell.Accessibility?
accessibility: Accessibility?
)
case dropDown(
DataSource,
accessibility: SessionCell.Accessibility?
accessibility: Accessibility?
)
case radio(
size: RadioSize,
isSelected: () -> Bool,
storedSelection: Bool,
accessibility: SessionCell.Accessibility?
accessibility: Accessibility?
)
case highlightingBackgroundLabel(
title: String,
accessibility: SessionCell.Accessibility?
accessibility: Accessibility?
)
case profile(
id: String,
@ -49,18 +49,18 @@ extension SessionCell {
profile: Profile?,
additionalProfile: Profile?,
cornerIcon: UIImage?,
accessibility: SessionCell.Accessibility?
accessibility: Accessibility?
)
case search(
placeholder: String,
accessibility: SessionCell.Accessibility?,
accessibility: Accessibility?,
searchTermChanged: (String?) -> Void
)
case button(
style: SessionButton.Style,
title: String,
accessibility: SessionCell.Accessibility?,
accessibility: Accessibility?,
run: (SessionButton?) -> Void
)
case customView(
@ -283,7 +283,7 @@ extension SessionCell.Accessory {
return .icon(image, size: .medium, customTint: nil, shouldFill: shouldFill, accessibility: nil)
}
public static func icon(_ image: UIImage?, accessibility: SessionCell.Accessibility) -> SessionCell.Accessory {
public static func icon(_ image: UIImage?, accessibility: Accessibility) -> SessionCell.Accessory {
return .icon(image, size: .medium, customTint: nil, shouldFill: false, accessibility: accessibility)
}

View File

@ -14,7 +14,7 @@ extension SessionCell {
let rightAccessory: SessionCell.Accessory?
let styling: StyleInfo
let isEnabled: Bool
let accessibility: SessionCell.Accessibility?
let accessibility: Accessibility?
let confirmationInfo: ConfirmationModal.Info?
let onTap: (() -> Void)?
let onTapView: ((UIView?) -> Void)?
@ -37,7 +37,7 @@ extension SessionCell {
rightAccessory: SessionCell.Accessory? = nil,
styling: StyleInfo = StyleInfo(),
isEnabled: Bool = true,
accessibility: SessionCell.Accessibility? = nil,
accessibility: Accessibility? = nil,
confirmationInfo: ConfirmationModal.Info? = nil,
onTap: (() -> Void)? = nil,
onTapView: ((UIView?) -> Void)? = nil
@ -119,7 +119,7 @@ public extension SessionCell.Info {
accessory: SessionCell.Accessory,
styling: SessionCell.StyleInfo = SessionCell.StyleInfo(),
isEnabled: Bool = true,
accessibility: SessionCell.Accessibility? = nil,
accessibility: Accessibility? = nil,
confirmationInfo: ConfirmationModal.Info? = nil,
onTap: (() -> Void)? = nil
) {
@ -146,7 +146,7 @@ public extension SessionCell.Info {
rightAccessory: SessionCell.Accessory,
styling: SessionCell.StyleInfo = SessionCell.StyleInfo(),
isEnabled: Bool = true,
accessibility: SessionCell.Accessibility? = nil,
accessibility: Accessibility? = nil,
confirmationInfo: ConfirmationModal.Info? = nil
) {
self.id = id
@ -173,7 +173,7 @@ public extension SessionCell.Info {
rightAccessory: SessionCell.Accessory? = nil,
styling: SessionCell.StyleInfo = SessionCell.StyleInfo(),
isEnabled: Bool = true,
accessibility: SessionCell.Accessibility? = nil,
accessibility: Accessibility? = nil,
confirmationInfo: ConfirmationModal.Info? = nil,
onTap: (() -> Void)? = nil
) {
@ -201,7 +201,7 @@ public extension SessionCell.Info {
rightAccessory: SessionCell.Accessory? = nil,
styling: SessionCell.StyleInfo = SessionCell.StyleInfo(),
isEnabled: Bool = true,
accessibility: SessionCell.Accessibility? = nil,
accessibility: Accessibility? = nil,
confirmationInfo: ConfirmationModal.Info? = nil,
onTap: (() -> Void)? = nil
) {
@ -230,7 +230,7 @@ public extension SessionCell.Info {
rightAccessory: SessionCell.Accessory? = nil,
styling: SessionCell.StyleInfo = SessionCell.StyleInfo(),
isEnabled: Bool = true,
accessibility: SessionCell.Accessibility? = nil,
accessibility: Accessibility? = nil,
confirmationInfo: ConfirmationModal.Info? = nil,
onTap: (() -> Void)? = nil,
onTapView: ((UIView?) -> Void)? = nil

View File

@ -75,7 +75,7 @@ final class UserSelectionVC: BaseVC, UITableViewDataSource, UITableViewDelegate
self?.selectedUsers.contains(profile.id) == true
}),
styling: SessionCell.StyleInfo(backgroundStyle: .edgeToEdge),
accessibility: SessionCell.Accessibility(identifier: "Contact")
accessibility: Accessibility(identifier: "Contact")
)
)

View File

@ -151,6 +151,9 @@ public extension UIContextualAction {
title: "hide_note_to_self_confirmation_alert_title".localized(),
attributedExplanation: confirmationModalExplanation,
confirmTitle: "TXT_HIDE_TITLE".localized(),
confirmAccessibility: Accessibility(
identifier: "Hide"
),
confirmStyle: .danger,
cancelStyle: .alert_text,
dismissOnConfirm: true,
@ -337,6 +340,9 @@ public extension UIContextualAction {
info: ConfirmationModal.Info(
title: "MESSAGE_REQUESTS_BLOCK_CONFIRMATION_ACTON".localized(),
confirmTitle: "BLOCK_LIST_BLOCK_BUTTON".localized(),
confirmAccessibility: Accessibility(
identifier: "Block"
),
confirmStyle: .danger,
cancelStyle: .alert_text,
dismissOnConfirm: true,
@ -398,6 +404,9 @@ public extension UIContextualAction {
title: confirmationModalTitle,
attributedExplanation: confirmationModalExplanation,
confirmTitle: "LEAVE_BUTTON_TITLE".localized(),
confirmAccessibility: Accessibility(
identifier: "Leave"
),
confirmStyle: .danger,
cancelStyle: .alert_text,
dismissOnConfirm: true,
@ -493,6 +502,9 @@ public extension UIContextualAction {
title: confirmationModalTitle,
attributedExplanation: confirmationModalExplanation,
confirmTitle: "TXT_DELETE_TITLE".localized(),
confirmAccessibility: Accessibility(
identifier: "Delete"
),
confirmStyle: .danger,
cancelStyle: .alert_text,
dismissOnConfirm: true,

View File

@ -1,6 +1,7 @@
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import UIKit
import SessionUtilitiesKit
public class ConfirmationModal: Modal {
public struct Info: Equatable, Hashable {
@ -21,14 +22,13 @@ public class ConfirmationModal: Modal {
let title: String
let explanation: String?
let attributedExplanation: NSAttributedString?
let accessibilityLabel: String?
let accessibilityIdentifier: String?
let accessibility: Accessibility?
public let stateToShow: State
let confirmTitle: String?
let confirmAccessibilityLabel: String?
let confirmAccessibility: Accessibility?
let confirmStyle: ThemeValue
let cancelTitle: String
let cancelAccessibilityLabel: String?
let cancelAccessibility: Accessibility?
let cancelStyle: ThemeValue
let dismissOnConfirm: Bool
let onConfirm: ((UIViewController) -> ())?
@ -40,14 +40,15 @@ public class ConfirmationModal: Modal {
title: String,
explanation: String? = nil,
attributedExplanation: NSAttributedString? = nil,
accessibilityLabel: String? = nil,
accessibilityId: String? = nil,
accessibility: Accessibility? = nil,
stateToShow: State = .always,
confirmTitle: String? = nil,
confirmAccessibilityLabel: String? = nil,
confirmAccessibility: Accessibility? = nil,
confirmStyle: ThemeValue = .alert_text,
cancelTitle: String = "TXT_CANCEL_TITLE".localized(),
cancelAccessibilityLabel: String? = nil,
cancelAccessibility: Accessibility? = Accessibility(
identifier: "Cancel"
),
cancelStyle: ThemeValue = .danger,
dismissOnConfirm: Bool = true,
onConfirm: ((UIViewController) -> ())? = nil,
@ -56,14 +57,13 @@ public class ConfirmationModal: Modal {
self.title = title
self.explanation = explanation
self.attributedExplanation = attributedExplanation
self.accessibilityLabel = accessibilityLabel
self.accessibilityIdentifier = accessibilityId
self.accessibility = accessibility
self.stateToShow = stateToShow
self.confirmTitle = confirmTitle
self.confirmAccessibilityLabel = confirmAccessibilityLabel
self.confirmAccessibility = confirmAccessibility
self.confirmStyle = confirmStyle
self.cancelTitle = cancelTitle
self.cancelAccessibilityLabel = cancelAccessibilityLabel
self.cancelAccessibility = cancelAccessibility
self.cancelStyle = cancelStyle
self.dismissOnConfirm = dismissOnConfirm
self.onConfirm = onConfirm
@ -80,13 +80,13 @@ public class ConfirmationModal: Modal {
title: self.title,
explanation: self.explanation,
attributedExplanation: self.attributedExplanation,
accessibilityLabel: self.accessibilityLabel,
accessibility: self.accessibility,
stateToShow: self.stateToShow,
confirmTitle: self.confirmTitle,
confirmAccessibilityLabel: self.confirmAccessibilityLabel,
confirmAccessibility: self.confirmAccessibility,
confirmStyle: self.confirmStyle,
cancelTitle: self.cancelTitle,
cancelAccessibilityLabel: self.cancelAccessibilityLabel,
cancelAccessibility: self.cancelAccessibility,
cancelStyle: self.cancelStyle,
dismissOnConfirm: self.dismissOnConfirm,
onConfirm: (onConfirm ?? self.onConfirm),
@ -101,13 +101,13 @@ public class ConfirmationModal: Modal {
lhs.title == rhs.title &&
lhs.explanation == rhs.explanation &&
lhs.attributedExplanation == rhs.attributedExplanation &&
lhs.accessibilityLabel == rhs.accessibilityLabel &&
lhs.accessibility == rhs.accessibility &&
lhs.stateToShow == rhs.stateToShow &&
lhs.confirmTitle == rhs.confirmTitle &&
lhs.confirmAccessibilityLabel == rhs.confirmAccessibilityLabel &&
lhs.confirmAccessibility == rhs.confirmAccessibility &&
lhs.confirmStyle == rhs.confirmStyle &&
lhs.cancelTitle == rhs.cancelTitle &&
lhs.cancelAccessibilityLabel == rhs.cancelAccessibilityLabel &&
lhs.cancelAccessibility == rhs.cancelAccessibility &&
lhs.cancelStyle == rhs.cancelStyle &&
lhs.dismissOnConfirm == rhs.dismissOnConfirm
)
@ -117,13 +117,13 @@ public class ConfirmationModal: Modal {
title.hash(into: &hasher)
explanation.hash(into: &hasher)
attributedExplanation.hash(into: &hasher)
accessibilityLabel.hash(into: &hasher)
accessibility.hash(into: &hasher)
stateToShow.hash(into: &hasher)
confirmTitle.hash(into: &hasher)
confirmAccessibilityLabel.hash(into: &hasher)
confirmAccessibility.hash(into: &hasher)
confirmStyle.hash(into: &hasher)
cancelTitle.hash(into: &hasher)
cancelAccessibilityLabel.hash(into: &hasher)
cancelAccessibility.hash(into: &hasher)
cancelStyle.hash(into: &hasher)
dismissOnConfirm.hash(into: &hasher)
}
@ -229,20 +229,20 @@ public class ConfirmationModal: Modal {
info.explanation == nil &&
info.attributedExplanation == nil
)
confirmButton.accessibilityLabel = info.confirmAccessibilityLabel
confirmButton.accessibilityIdentifier = info.confirmAccessibilityLabel
confirmButton.accessibilityLabel = info.confirmAccessibility?.label
confirmButton.accessibilityIdentifier = info.confirmAccessibility?.identifier
confirmButton.isAccessibilityElement = true
confirmButton.setTitle(info.confirmTitle, for: .normal)
confirmButton.setThemeTitleColor(info.confirmStyle, for: .normal)
confirmButton.isHidden = (info.confirmTitle == nil)
cancelButton.accessibilityLabel = info.cancelAccessibilityLabel
cancelButton.accessibilityIdentifier = info.cancelAccessibilityLabel
cancelButton.accessibilityLabel = info.cancelAccessibility?.label
cancelButton.accessibilityIdentifier = info.cancelAccessibility?.identifier
cancelButton.isAccessibilityElement = true
cancelButton.setTitle(info.cancelTitle, for: .normal)
cancelButton.setThemeTitleColor(info.cancelStyle, for: .normal)
self.contentView.accessibilityLabel = info.accessibilityLabel
self.contentView.accessibilityIdentifier = info.accessibilityIdentifier
contentView.accessibilityLabel = info.accessibility?.label
contentView.accessibilityIdentifier = info.accessibility?.identifier
}
required init?(coder: NSCoder) {

View File

@ -0,0 +1,16 @@
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import Foundation
public struct Accessibility: Hashable, Equatable {
public let identifier: String?
public let label: String?
public init(
identifier: String? = nil,
label: String? = nil
) {
self.identifier = identifier
self.label = label
}
}