From 2eb82e0340b0b3b3e5317d4df68f64b056c31de8 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Sun, 8 Mar 2026 19:16:46 -0400 Subject: [PATCH 1/3] chore: add accessibility labels and hints to Settings views --- App/Features/Settings/DiagnosticsView.swift | 3 +++ App/Features/Settings/NotificationTimePickerView.swift | 3 +++ App/Features/Settings/SettingsSheetView.swift | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/App/Features/Settings/DiagnosticsView.swift b/App/Features/Settings/DiagnosticsView.swift index 38d96ee..57c0de2 100644 --- a/App/Features/Settings/DiagnosticsView.swift +++ b/App/Features/Settings/DiagnosticsView.swift @@ -37,17 +37,20 @@ struct DiagnosticsView: View { Button("Copy diagnostics") { copyDiagnostics() } + .accessibilityHint("Copies diagnostic information to clipboard") .listRowBackground(AppColors.surface) Button("Force widget refresh") { let store = TenXStore(context: modelContext) WidgetSnapshotService(store: store).refreshSnapshot(todayKey: DayKey.make()) } + .accessibilityHint("Regenerates the widget snapshot from current data") .listRowBackground(AppColors.surface) Button("Reload widget timelines") { WidgetCenter.shared.reloadTimelines(ofKind: SharedConstants.widgetKind) } + .accessibilityHint("Tells the system to reload all widget timelines") .listRowBackground(AppColors.surface) } } diff --git a/App/Features/Settings/NotificationTimePickerView.swift b/App/Features/Settings/NotificationTimePickerView.swift index 97ee7de..c67733a 100644 --- a/App/Features/Settings/NotificationTimePickerView.swift +++ b/App/Features/Settings/NotificationTimePickerView.swift @@ -24,6 +24,8 @@ struct NotificationTimePickerView: View { } } .buttonStyle(.plain) + .accessibilityLabel("Morning reminder time") + .accessibilityHint("Opens a time picker to change the morning reminder time") .sheet(isPresented: $isPickerPresented) { TimePickerSheet(hour: $hour, minute: $minute) .presentationDetents([.height(320)]) @@ -70,6 +72,7 @@ private struct TimePickerSheet: View { dismiss() } .font(.tenxBody) + .accessibilityHint("Saves the selected time and closes the picker") } .padding(.horizontal, 20) diff --git a/App/Features/Settings/SettingsSheetView.swift b/App/Features/Settings/SettingsSheetView.swift index bd05fcb..0710f24 100644 --- a/App/Features/Settings/SettingsSheetView.swift +++ b/App/Features/Settings/SettingsSheetView.swift @@ -45,12 +45,14 @@ struct SettingsSheetView: View { Toggle("Midday check-in", isOn: $middayReminderEnabled) .font(.tenxBody) + .accessibilityHint(middayReminderEnabled ? "Disables the midday check-in reminder" : "Enables a midday reminder to check your focus progress") .onChange(of: middayReminderEnabled) { _, _ in scheduleNotifications() } Toggle("Evening reflection", isOn: $eveningReminderEnabled) .font(.tenxBody) + .accessibilityHint(eveningReminderEnabled ? "Disables the evening reflection reminder" : "Enables an evening reminder to reflect on your day") .onChange(of: eveningReminderEnabled) { _, _ in scheduleNotifications() } @@ -68,6 +70,7 @@ struct SettingsSheetView: View { NotificationScheduler.shared.openSystemSettings() } .buttonStyle(PrimaryButtonStyle()) + .accessibilityHint("Opens the system notification settings for this app") } #if DEBUG @@ -75,6 +78,7 @@ struct SettingsSheetView: View { viewModel.scheduleTest() } .buttonStyle(PrimaryButtonStyle()) + .accessibilityHint("Sends a test notification to verify delivery") #endif } @@ -87,6 +91,7 @@ struct SettingsSheetView: View { dismiss() } .buttonStyle(PrimaryButtonStyle()) + .accessibilityHint("Returns to the onboarding carousel immediately") Text("Returns to the onboarding carousel immediately.") .font(.tenxCaption) @@ -132,6 +137,8 @@ struct SettingsSheetView: View { .clipShape(Circle()) } .buttonStyle(.plain) + .accessibilityLabel("Close") + .accessibilityHint("Dismisses the settings screen") } } From c8c1d1558d61a072f9cfa778bc1b986ee1ee60e6 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Sun, 8 Mar 2026 20:02:32 -0400 Subject: [PATCH 2/3] fix: add accessibilityValue to time picker so VoiceOver announces current time --- App/Features/Settings/NotificationTimePickerView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/App/Features/Settings/NotificationTimePickerView.swift b/App/Features/Settings/NotificationTimePickerView.swift index c67733a..03741e9 100644 --- a/App/Features/Settings/NotificationTimePickerView.swift +++ b/App/Features/Settings/NotificationTimePickerView.swift @@ -25,6 +25,7 @@ struct NotificationTimePickerView: View { } .buttonStyle(.plain) .accessibilityLabel("Morning reminder time") + .accessibilityValue(formattedTime) .accessibilityHint("Opens a time picker to change the morning reminder time") .sheet(isPresented: $isPickerPresented) { TimePickerSheet(hour: $hour, minute: $minute) From 3982800c2eb88f560d53bb92793ca401b67024ea Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Sun, 8 Mar 2026 20:14:03 -0400 Subject: [PATCH 3/3] fix: correct misleading Done button hint in time picker --- App/Features/Settings/NotificationTimePickerView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App/Features/Settings/NotificationTimePickerView.swift b/App/Features/Settings/NotificationTimePickerView.swift index 03741e9..fc68dad 100644 --- a/App/Features/Settings/NotificationTimePickerView.swift +++ b/App/Features/Settings/NotificationTimePickerView.swift @@ -73,7 +73,7 @@ private struct TimePickerSheet: View { dismiss() } .font(.tenxBody) - .accessibilityHint("Saves the selected time and closes the picker") + .accessibilityHint("Closes the time picker") } .padding(.horizontal, 20)