Skip to content

Conversation

@Rozerxshashank
Copy link

@Rozerxshashank Rozerxshashank commented Jan 24, 2026

This PR improves screen reader accessibility by marking visual section headers as semantic headings.

Fixes #1964.

What changed

Several widgets that visually act as section headers are now wrapped with Semantics(header: true) so that screen readers correctly announce them as headings:

StreamMessageRecipientHeader (lib/widgets/message_list.dart)
Channel and topic headers in message lists.

DmRecipientHeader (lib/widgets/message_list.dart)
Recipient headers in direct message conversations.

_HeaderItem.build() (lib/widgets/inbox.dart)
Collapsible section headers on the inbox page, including both channel headers and the “Direct messages” section.

These changes don’t affect layout or visuals; they only improve accessibility semantics.

Testing

flutter analyze passes with no issues

Tested manually with TalkBack on Android

Here is the attached video of the testing where the talkback says the word heading.

zulip-test.mp4

Headers are now announced as headings

Screen reader navigation between sections works as expected, making it easier to distinguish channel headers from topic items in the inbox

@gnprice
Copy link
Member

gnprice commented Jan 27, 2026

This PR makes a number of unrelated changes. It also has no tests.

Before we can review this, it will need to meet the two basic requirements stated in our README: clean commits, and tests.

@Rozerxshashank Please also read the AI use policy in our contributing guide. Parts of your PR description look very much like something generated by an LLM. Those are unhelpful and also raise doubts about whether other things you say are true or were imagined by the LLM. Can you confirm that you, a human, have in fact tested all four of these types of headers with TalkBack?

@Rozerxshashank
Copy link
Author

Rozerxshashank commented Jan 30, 2026

Hey @gnprice thanks for the clarification of the AI use policy. I used LLM for the PR description but the changes made in the two files were very small to get it done using LLM.

Before raising the PR, I as a human had tested all the four of the header using the TalkBack on a Physical Android Device. I'm sorry for not attaching the screen recording of the testing but now have added giving the testing of the inbox .

For futher contribution I'll keep all the policy in mind.

I've edited the PR and also attached a video of testing now you can review it.

Thank You

@Rozerxshashank
Copy link
Author

There are no unrelated change. It looks like a lot of line of code has been updated but actually 3 lines have been added with bracket for wrapping.

It is showing that much of change in line of code because my way of updating the code was like I first made the wrap of sematic header then did cut and paste the code inside the wrap.

That's why it is showing thay much of change of code on github.

If you think that it needs to be change I'll change that.

@gnprice
Copy link
Member

gnprice commented Jan 30, 2026

Yeah, the indentation changes are fine. With a suitable few lines in .gitconfig (see #learning > moving code @ 💬), Git detects that that's what's happening, so when I read the change it looks like this:
image

The faded background tells me Git has verified that the only change there is indentation, so I can pay less attention to that part of the diff, and focus on the more interesting part which is the Semantics widget.

@Rozerxshashank
Copy link
Author

Thanks for explaining me that and also sorry for being so unprofessional while raising PR.

@gnprice
Copy link
Member

gnprice commented Jan 30, 2026

That screen recording is helpful, thanks.

The other thing this PR will need before we can review it, as I mentioned at #2098 (comment) above, is some tests.

@Rozerxshashank
Copy link
Author

Along with the manual test. I've added automated test for that now. As you mentioned.

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.

Mark headings for semantics in inbox and recipient headers

2 participants