From b61ba583b610ca1e041483c1b2dd6273f947cc54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Thu, 21 May 2026 16:20:01 +0100 Subject: [PATCH 1/4] Name the channel header avatar for TalkBack --- .../android/compose/ui/messages/header/ChannelHeader.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt index 9321942a3f3..b1810b62ec4 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt @@ -33,6 +33,8 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -274,6 +276,7 @@ internal fun DefaultChannelHeaderTrailingContent( onClick: ((Channel) -> Unit)?, onClickLabel: String? = null, ) { + val avatarLabel = ChatTheme.channelNameFormatter.formatChannelName(channel, currentUser) ChatTheme.componentFactory.ChannelAvatar( params = ChannelAvatarParams( modifier = Modifier @@ -284,6 +287,9 @@ internal fun DefaultChannelHeaderTrailingContent( onClickLabel = onClickLabel, role = Role.Button, ) { callback(channel) } + .semantics(mergeDescendants = true) { + contentDescription = avatarLabel + } }, channel = channel, currentUser = currentUser, From 5bf6212ea68e800f77cacddb533cbc88873fdfef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Thu, 21 May 2026 16:20:12 +0100 Subject: [PATCH 2/4] Hide stacked-avatar overflow count badge from accessibility --- .../android/compose/ui/components/avatar/ChannelAvatar.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/avatar/ChannelAvatar.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/avatar/ChannelAvatar.kt index 7d1edfe46e3..ef2fe4de076 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/avatar/ChannelAvatar.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/avatar/ChannelAvatar.kt @@ -38,6 +38,8 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.hideFromAccessibility +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -253,7 +255,9 @@ private fun StackedGroupAvatar( text = stringResource(R.string.stream_compose_avatar_overflow_count, count), size = dimensions.badgeSize, fixedFontSize = true, - modifier = Modifier.align(Alignment.BottomCenter), + modifier = Modifier + .align(Alignment.BottomCenter) + .semantics { hideFromAccessibility() }, ) } } From 03a1a6f0515ea2e702195275afc8f6d7274d9dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Thu, 21 May 2026 16:25:42 +0100 Subject: [PATCH 3/4] Merge channel header title content for TalkBack --- .../chat/android/compose/ui/messages/header/ChannelHeader.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt index b1810b62ec4..bb8531fb433 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt @@ -199,6 +199,7 @@ internal fun DefaultChannelHeaderCenterContent( onClickLabel = onHeaderTitleClickLabel, role = Role.Button, ) { callback(channel) } + .semantics(mergeDescendants = true) {} }, horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, From 0ac0fa70c004c5de1e8b5d809cf12db4d7cc7dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Thu, 21 May 2026 16:30:22 +0100 Subject: [PATCH 4/4] Mark channel header title as a heading for TalkBack --- .../chat/android/compose/ui/messages/header/ChannelHeader.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt index bb8531fb433..7d54bd8583b 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/header/ChannelHeader.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -205,7 +206,9 @@ internal fun DefaultChannelHeaderCenterContent( verticalArrangement = Arrangement.Center, ) { Text( - modifier = Modifier.testTag("Stream_ChannelName"), + modifier = Modifier + .testTag("Stream_ChannelName") + .semantics { heading() }, text = title, style = ChatTheme.typography.headingSmall, maxLines = 1,