From 63f25d1bd5ccd50e8d0c0a4be99c4cba4fbd9223 Mon Sep 17 00:00:00 2001 From: alexenderwt <joshtech147@gmail.com> Date: Tue, 4 Feb 2025 16:13:09 -0500 Subject: [PATCH] accessibility: accounts list Change-Id: I6151c7cf3b795adc89855a008505cd7a35079e87 --- Ring/AccessibilityIdentifiers.swift | 2 ++ Ring/Ring/Constants/Generated/Strings.swift | 12 +++++++ .../SwiftUI/Views/AccountLists.swift | 32 +++++++++++++++++-- .../SwiftUI/Views/SmartListContainer.swift | 2 ++ .../Resources/en.lproj/Localizable.strings | 6 ++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Ring/AccessibilityIdentifiers.swift b/Ring/AccessibilityIdentifiers.swift index 4cc0f89ec..342ed209f 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 f362a886d..8c8cdc74a 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 df3e00141..6f1ec3c07 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 34e6810f3..ebb2fd2b2 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 a45673362..59eac7dd2 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"; -- GitLab