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