diff --git a/Ring/AccessibilityIdentifiers.swift b/Ring/AccessibilityIdentifiers.swift index 4cc0f89ec9ade115f9c35793577b90dae463ec54..342ed209f8b2d3932a69689cd467f32045431fd1 100644 --- a/Ring/AccessibilityIdentifiers.swift +++ b/Ring/AccessibilityIdentifiers.swift @@ -45,4 +45,6 @@ struct SmartListAccessibilityIdentifiers { static let bookButton = "bookButtonIdentifier" static let searchBarTextField = "searchBarTextField" static let contactPicker = "contactPicker" + static let accountsListTitle = "accountsListTitle" + static let closeAccountsList = "closeAccountsList" } diff --git a/Ring/Ring/Constants/Generated/Strings.swift b/Ring/Ring/Constants/Generated/Strings.swift index f362a886d07595efa6c6bfbab40a728f0103169c..8c8cdc74af804ce708175207bb71bdc27ea6a6a0 100644 --- a/Ring/Ring/Constants/Generated/Strings.swift +++ b/Ring/Ring/Constants/Generated/Strings.swift @@ -28,6 +28,18 @@ internal enum L10n { /// version 3 or later for details. internal static let noWarranty2 = L10n.tr("Localizable", "aboutJami.noWarranty2", fallback: "version 3 or later for details.") } + internal enum Accessibility { + /// Close + internal static let close = L10n.tr("Localizable", "accessibility.close", fallback: "Close") + /// Add account + internal static let smartListAddAccount = L10n.tr("Localizable", "accessibility.smartListAddAccount", fallback: "Add account") + /// Your current account is %@ + internal static func smartListConnectedAs(_ p1: Any) -> String { + return L10n.tr("Localizable", "accessibility.smartListConnectedAs", String(describing: p1), fallback: "Your current account is %@") + } + /// Switch account + internal static let smartListSwitchAccounts = L10n.tr("Localizable", "accessibility.smartListSwitchAccounts", fallback: "Switch account") + } internal enum Account { /// Account Status internal static let accountStatus = L10n.tr("Localizable", "account.accountStatus", fallback: "Account Status") diff --git a/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/AccountLists.swift b/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/AccountLists.swift index df3e00141b3406ee6f698ea327e9fcbfae581e20..6f1ec3c0797c649c0beb2f6f03d46bafbdd7b49b 100644 --- a/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/AccountLists.swift +++ b/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/AccountLists.swift @@ -33,7 +33,6 @@ struct AccountLists: View { accountsView() newAccountButton() } - .accessibilityElement(children: .contain) .accessibility(identifier: SmartListAccessibilityIdentifiers.accountListView) .padding(.horizontal, 5) } @@ -43,11 +42,35 @@ struct AccountLists: View { VStack { Spacer() .frame(height: verticalSpacing) - Text(model.headerTitle) - .fontWeight(.semibold) + + ZStack { + Text(model.headerTitle) + .fontWeight(.semibold) + .accessibilityIdentifier(SmartListAccessibilityIdentifiers.accountsListTitle) + + HStack { + Spacer() // Pushes the button to the right + + Button(action: { + accountSelectedCallback() + }, label: { + Image(systemName: "xmark") + .font(.system(size: 12, weight: .bold)) + .foregroundColor(.black) + .padding(10) // Increases tap area + .background(Circle().fill(Color.gray.opacity(0.4))) + .accessibilityIdentifier(SmartListAccessibilityIdentifiers.closeAccountsList) + .accessibilityLabel(L10n.Accessibility.close) + .padding() + }) + } + } + Spacer() .frame(height: verticalSpacing) + accountsList() + Spacer() .frame(height: verticalSpacing) } @@ -73,6 +96,7 @@ struct AccountLists: View { .cornerRadius(cornerRadius) .shadow(radius: shadowRadius) .accessibility(identifier: SmartListAccessibilityIdentifiers.addAccountButton) + .accessibilityLabel(L10n.Accessibility.smartListAddAccount) } @ViewBuilder @@ -118,6 +142,8 @@ struct AccountRowView: View { guard let model = model else { return } model.changeCurrentAccount(accountId: accountRow.id) } + .accessibilityElement() + .accessibilityLabel(accountRow.bestName) } private var isSelectedAccount: Bool { diff --git a/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/SmartListContainer.swift b/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/SmartListContainer.swift index 34e6810f333414c50281fa7c1253dad7df3cb42a..ebb2fd2b27a6c5717649852fdda154d014449fe5 100644 --- a/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/SmartListContainer.swift +++ b/Ring/Ring/Features/Conversations/SmartList/SwiftUI/Views/SmartListContainer.swift @@ -362,6 +362,8 @@ struct CurrentAccountButton: View { } Spacer() } + .accessibilityLabel(L10n.Accessibility.smartListSwitchAccounts) + .accessibilityHint(L10n.Accessibility.smartListConnectedAs(model.bestName)) .transaction { transaction in transaction.animation = nil } diff --git a/Ring/Ring/Resources/en.lproj/Localizable.strings b/Ring/Ring/Resources/en.lproj/Localizable.strings index a45673362a0a32990e9430ef695e4a52f507458d..59eac7dd222c20cb5dc44cb2670e8994c7701fb1 100644 --- a/Ring/Ring/Resources/en.lproj/Localizable.strings +++ b/Ring/Ring/Resources/en.lproj/Localizable.strings @@ -504,3 +504,9 @@ "aboutJami.feedback" = "Feedback"; "aboutJami.createdBy" = "Created by"; "aboutJami.artworkBy" = "Artwork by"; + +// Accessibility +"accessibility.close" = "Close"; +"accessibility.smartListSwitchAccounts" = "Switch account"; +"accessibility.smartListConnectedAs" = "Your current account is %@"; +"accessibility.smartListAddAccount" = "Add account";