Skip to content

fix(a11y): improve settings dialog UX and label associations#581

Merged
Orinks merged 8 commits intodevfrom
feat/settings-dialog-ux-refactor
Apr 9, 2026
Merged

fix(a11y): improve settings dialog UX and label associations#581
Orinks merged 8 commits intodevfrom
feat/settings-dialog-ux-refactor

Conversation

@Orinks
Copy link
Copy Markdown
Owner

@Orinks Orinks commented Apr 8, 2026

Summary

This PR started as a settings dialog UX cleanup, then expanded into a full accessibility pass after NVDA exposed label-association problems in the dialog.

What changed:

  • reorganizes the settings dialog into clearer task-oriented sections and tab flow
  • improves labels, helper copy, summary text, and save-action wording across the dialog
  • replaces static-box section patterns that caused wx/NVDA to announce group labels as if they belonged to the first control
  • introduces a shared helper that creates the visible label before its control, then converts affected settings rows across tabs to use that pattern
  • fixes forecast-range labeling confusion and stabilizes daily/hourly forecast control announcements
  • removes remaining problematic section/grouping patterns in provider key areas and event sound configuration
  • adds regression coverage around settings-dialog accessibility structure and label/control creation order

Files changed

  • src/accessiweather/ui/dialogs/settings_dialog.py
  • src/accessiweather/ui/dialogs/settings_tabs/advanced.py
  • src/accessiweather/ui/dialogs/settings_tabs/ai.py
  • src/accessiweather/ui/dialogs/settings_tabs/audio.py
  • src/accessiweather/ui/dialogs/settings_tabs/data_sources.py
  • src/accessiweather/ui/dialogs/settings_tabs/display.py
  • src/accessiweather/ui/dialogs/settings_tabs/general.py
  • src/accessiweather/ui/dialogs/settings_tabs/notifications.py
  • src/accessiweather/ui/dialogs/settings_tabs/updates.py
  • tests/test_dialog_accessibility.py
  • tests/test_settings_dialog_audio_events.py
  • tests/test_settings_dialog_ux_metadata.py

Testing

  • ruff check src/accessiweather/ui/dialogs/settings_dialog.py src/accessiweather/ui/dialogs/settings_tabs/advanced.py src/accessiweather/ui/dialogs/settings_tabs/ai.py src/accessiweather/ui/dialogs/settings_tabs/audio.py src/accessiweather/ui/dialogs/settings_tabs/data_sources.py src/accessiweather/ui/dialogs/settings_tabs/display.py src/accessiweather/ui/dialogs/settings_tabs/general.py src/accessiweather/ui/dialogs/settings_tabs/notifications.py src/accessiweather/ui/dialogs/settings_tabs/updates.py tests/test_settings_dialog_audio_events.py tests/test_settings_dialog_ux_metadata.py
  • pytest -q tests/test_settings_dialog_audio_events.py tests/test_settings_dialog_tray_text.py tests/test_settings_dialog_api_key_guard.py tests/test_settings_dialog_portable_copy.py tests/test_settings_dialog_ux_metadata.py
  • pytest -q tests/test_settings_dialog_ux_metadata.py tests/test_dialog_accessibility.py tests/test_settings_dialog_audio_events.py tests/test_settings_dialog_tray_text.py tests/test_settings_dialog_api_key_guard.py tests/test_settings_dialog_portable_copy.py
  • PYTHONPATH=src python3 -m pytest -q tests/test_dialog_accessibility.py tests/test_display_tab_unit_labels.py tests/test_settings_dialog_api_key_guard.py tests/test_settings_dialog_audio_events.py tests/test_settings_dialog_portable_copy.py tests/test_settings_dialog_source_priority.py tests/test_settings_dialog_tray_text.py tests/test_settings_dialog_ux_metadata.py

@Orinks
Copy link
Copy Markdown
Owner Author

Orinks commented Apr 8, 2026

Accessibility follow-up fixed: section helper descriptions are no longer injected ahead of the first interactive control in each section, so they won't get in the way of the first item's announcement.\n\nVerification:\n- All checks passed!\n- ============================= test session starts ==============================
platform linux -- Python 3.13.5, pytest-8.3.5, pluggy-1.5.0
rootdir: /home/openclaw/projects/AccessiWeather
configfile: pytest.ini
plugins: cov-7.0.0, anyio-4.12.1, timeout-2.4.0, xdist-3.8.0, hypothesis-6.151.9
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
created: 2/2 workers
2 workers [41 items]

......................................... [100%]
============================== 41 passed in 2.11s ==============================

@Orinks Orinks changed the title refactor(ui): improve settings dialog UX flow fix(a11y): improve settings dialog UX and label associations Apr 9, 2026
@Orinks Orinks merged commit 09066da into dev Apr 9, 2026
3 checks passed
@Orinks Orinks deleted the feat/settings-dialog-ux-refactor branch April 9, 2026 00:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant