Skip to content

Resolves #14206 A11y conversation list - #14990

Open
s4p3r-c1n0s wants to merge 11 commits into
signalapp:mainfrom
s4p3r-c1n0s:a11y-conversation-list
Open

Resolves #14206 A11y conversation list#14990
s4p3r-c1n0s wants to merge 11 commits into
signalapp:mainfrom
s4p3r-c1n0s:a11y-conversation-list

Conversation

@s4p3r-c1n0s

@s4p3r-c1n0s s4p3r-c1n0s commented Sep 4, 2026

Copy link
Copy Markdown

First time contributor checklist

Contributor checklist

  • Samsung galaxy S23 SM-S911B/DS, Android 16
  • Pixel AVD, Android 14
  • My contribution is fully baked and ready to be merged as is
  • I ensure that all the open issues my contribution fixes are mentioned in the commit message of my first commit using the Fixes #1234 syntax

NOTE : this is Part I of the closed PR #14612 focusing only on Conversations List (chat list)

Description

add chat-list accessibility actions (#14206)

  • Add accessibility actions to conversation-list rows (read/unread, pin/unpin, mute/unmute, select, archive/unarchive, delete).
  • Route chat-list accessibility actions to existing ConversationListFragment handlers.
  • Add accessibility action IDs for chat-list actions.
  • Add instrumented tests:
    • ConversationListAdapterAccessibilityActionsInstrumentedTest

@s4p3r-c1n0s
s4p3r-c1n0s force-pushed the a11y-conversation-list branch from 8d9c38e to ecdb419 Compare September 4, 2026 07:16
@s4p3r-c1n0s
s4p3r-c1n0s force-pushed the a11y-conversation-list branch from ecdb419 to 4f181da Compare September 4, 2026 07:19
@s4p3r-c1n0s
s4p3r-c1n0s marked this pull request as ready for review September 4, 2026 07:19
@s4p3r-c1n0s

Copy link
Copy Markdown
Author

@mtang-signal can you help review this

- Fix bug where UNARCHIVE action was calling handleArchive() instead of handleUnarchive()
- Add test to verify archived conversations can be unarchived via accessibility action
- Ensures TalkBack users can properly unarchive conversations
Extract action-label and action-dispatch logic into ConversationListAccessibilityHelper
to avoid duplication between ConversationListAdapter and ConversationListSearchModels.

- New ConversationListAccessibilityHelper.kt with two methods:
  * addConversationActions() - populates accessibility node with applicable actions
  * dispatchConversationAction() - routes action ID to appropriate handler
- Simplify ConversationListAdapter by delegating to helper
- Centralized policy ensures consistency across all conversation list views
Use the single stable action ID conversation_list_accessibility_archive_action
instead of non-existent conversation_list_accessibility_unarchive_action.

The production code uses one stable ID and toggles the label/action based on
conversation state:
- Unarchived row: label='Archive', action archives
- Archived row: label='Unarchive', action unarchives

Test now correctly verifies the label shows 'Unarchive' for archived rows
and that performing the action actually unarchives the conversation.
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