From ef8d57dff874cd6255d854545a0a37899af55691 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 3 Jul 2025 17:47:17 +0200 Subject: [PATCH 1/8] [a11y] Use built-in onClickLabel parameter. --- .../impl/actionlist/ActionListView.kt | 13 ++-------- .../components/MessagesReactionButton.kt | 24 +++++-------------- .../roomdetails/impl/RoomDetailsView.kt | 10 ++++---- .../shared/UserProfileHeaderSection.kt | 10 ++++---- .../components/avatar/DmAvatars.kt | 14 ++++++----- .../designsystem/modifiers/Clickable.kt | 17 ------------- 6 files changed, 28 insertions(+), 60 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index aec3b8219e..78b4b43112 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -39,7 +39,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.clearAndSetSemantics -import androidx.compose.ui.semantics.onClick import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.traversalIndex import androidx.compose.ui.text.style.TextAlign @@ -454,19 +453,11 @@ private fun EmojiButton( .size(48.dp) .background(backgroundColor, CircleShape) .clickable( - enabled = true, + onClickLabel = a11yClickLabel, onClick = { onClick(emoji) }, indication = ripple(bounded = false, radius = emojiRippleRadius), interactionSource = remember { MutableInteractionSource() } - ) - .semantics { - onClick( - label = a11yClickLabel, - ) { - onClick(emoji) - true - } - }, + ), contentAlignment = Alignment.Center ) { Text( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt index b0026fb449..e80367daee 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.semantics.contentDescription -import androidx.compose.ui.semantics.onClick import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -85,15 +84,6 @@ fun MessagesReactionButton( } } - val a11yClickLabel = if (content is MessagesReactionsButtonContent.Reaction) { - a11yReactionAction( - emoji = content.reaction.key, - userAlreadyReacted = content.isHighlighted - ) - } else { - "" - } - Surface( modifier = modifier .background(Color.Transparent) @@ -107,6 +97,12 @@ fun MessagesReactionButton( .clip(RoundedCornerShape(corner = CornerSize(12.dp))) .combinedClickable( onClick = onClick, + onClickLabel = (content as? MessagesReactionsButtonContent.Reaction)?.let { + a11yReactionAction( + emoji = content.reaction.key, + userAlreadyReacted = content.isHighlighted + ) + }, onLongClick = onLongClick ) // Inner border, to highlight when selected @@ -115,14 +111,6 @@ fun MessagesReactionButton( .padding(vertical = 4.dp, horizontal = 10.dp) .clearAndSetSemantics { contentDescription = a11yText - if (content is MessagesReactionsButtonContent.Reaction) { - onClick( - label = a11yClickLabel - ) { - onClick() - true - } - } }, color = buttonColor ) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index c60a78dd22..4ffe29a8bf 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -58,7 +58,6 @@ import io.element.android.libraries.designsystem.components.button.MainActionBut import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch -import io.element.android.libraries.designsystem.modifiers.a11yClickLabel import io.element.android.libraries.designsystem.modifiers.niceClickable import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight @@ -401,7 +400,6 @@ private fun RoomHeaderSection( .padding(horizontal = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { - val actionView = stringResource(CommonStrings.action_view) Avatar( avatarData = AvatarData(roomId.value, roomName, avatarUrl, AvatarSize.RoomHeader), avatarType = AvatarType.Room( @@ -412,9 +410,13 @@ private fun RoomHeaderSection( ), contentDescription = avatarUrl?.let { stringResource(CommonStrings.a11y_room_avatar) }, modifier = Modifier - .clickable(enabled = avatarUrl != null) { openAvatarPreview(avatarUrl!!) } + .clickable( + enabled = avatarUrl != null, + onClickLabel = stringResource(CommonStrings.action_view), + ) { + openAvatarPreview(avatarUrl!!) + } .testTag(TestTags.roomDetailAvatar) - .a11yClickLabel(avatarUrl?.let { actionView }) ) TitleAndSubtitle( title = roomName, diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt index 47bb9cbdc5..c4de75e40b 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt @@ -31,7 +31,6 @@ import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarType -import io.element.android.libraries.designsystem.modifiers.a11yClickLabel import io.element.android.libraries.designsystem.modifiers.niceClickable import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -61,16 +60,19 @@ fun UserProfileHeaderSection( .padding(horizontal = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { - val actionView = stringResource(CommonStrings.action_view) Avatar( avatarData = AvatarData(userId.value, userName, avatarUrl, AvatarSize.UserHeader), avatarType = AvatarType.User, contentDescription = avatarUrl?.let { stringResource(CommonStrings.a11y_user_avatar) }, modifier = Modifier .clip(CircleShape) - .clickable(enabled = avatarUrl != null) { openAvatarPreview(avatarUrl!!) } + .clickable( + enabled = avatarUrl != null, + onClickLabel = stringResource(CommonStrings.action_view), + ) { + openAvatarPreview(avatarUrl!!) + } .testTag(TestTags.memberDetailAvatar) - .a11yClickLabel(avatarUrl?.let { actionView }) ) Spacer(modifier = Modifier.height(24.dp)) if (userName != null) { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/DmAvatars.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/DmAvatars.kt index 56071de747..f4d05d3fcd 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/DmAvatars.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/DmAvatars.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.LayoutDirection -import io.element.android.libraries.designsystem.modifiers.a11yClickLabel import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.text.toPx @@ -52,7 +51,6 @@ fun DmAvatars( val boxSizePx = boxSize.toPx() val otherAvatarRadius = otherUserAvatarData.size.dp.toPx() / 2 val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl - val actionView = stringResource(CommonStrings.action_view) Box( modifier = modifier.size(boxSize), ) { @@ -84,10 +82,12 @@ fun DmAvatars( ) } .clip(CircleShape) - .clickable(enabled = userAvatarData.url != null) { + .clickable( + enabled = userAvatarData.url != null, + onClickLabel = stringResource(CommonStrings.action_view), + ) { userAvatarData.url?.let { openAvatarPreview(it) } } - .a11yClickLabel(userAvatarData.url?.let { actionView }) ) // Draw other user avatar Avatar( @@ -97,11 +97,13 @@ fun DmAvatars( modifier = Modifier .align(Alignment.TopEnd) .clip(CircleShape) - .clickable(enabled = otherUserAvatarData.url != null) { + .clickable( + enabled = otherUserAvatarData.url != null, + onClickLabel = stringResource(CommonStrings.action_view), + ) { otherUserAvatarData.url?.let { openOtherAvatarPreview(it) } } .testTag(TestTags.memberDetailAvatar) - .a11yClickLabel(otherUserAvatarData.url?.let { actionView }) ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Clickable.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Clickable.kt index 753ad952a0..5789a4525d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Clickable.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Clickable.kt @@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.semantics.onClick -import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp fun Modifier.clickableIfNotNull(onClick: (() -> Unit)? = null): Modifier = this.then( @@ -31,18 +29,3 @@ fun Modifier.niceClickable( .clickable { onClick() } .padding(horizontal = 4.dp) } - -fun Modifier.a11yClickLabel( - label: String?, -): Modifier = then( - if (label != null) { - Modifier.semantics { - onClick( - label = label, - action = null, - ) - } - } else { - Modifier - } -) From 5d81a0264bf5ca82c1df0cb2922cbffe5ffbc469 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 09:33:56 +0200 Subject: [PATCH 2/8] [a11y] Add long click label --- .../home/impl/components/RoomSummaryRow.kt | 1 + .../components/MessageStateEventContainer.kt | 3 +++ .../components/MessagesReactionButton.kt | 2 ++ .../components/TimelineItemCallNotifyView.kt | 7 ++++++- .../impl/timeline/components/TimelineItemRow.kt | 17 +++++++++-------- .../components/event/TimelineItemStickerView.kt | 12 +++++++++++- .../impl/gallery/ui/AudioItemView.kt | 8 +++++++- .../mediaviewer/impl/gallery/ui/FileItemView.kt | 8 +++++++- .../impl/gallery/ui/ImageItemView.kt | 8 +++++++- .../impl/gallery/ui/VideoItemView.kt | 8 +++++++- .../impl/gallery/ui/VoiceItemView.kt | 6 +++++- .../ui-strings/src/main/res/values/localazy.xml | 1 + 12 files changed, 66 insertions(+), 15 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt index 0baa0e66d9..e5a85a7442 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt @@ -173,6 +173,7 @@ private fun RoomSummaryScaffoldRow( val clickModifier = Modifier.combinedClickable( onClick = { onClick(room) }, onLongClick = { onLongClick(room) }, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), indication = ripple(), interactionSource = remember { MutableInteractionSource() } ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt index ac9be4de74..c988679626 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt @@ -17,10 +17,12 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Surface +import io.element.android.libraries.ui.strings.CommonStrings private val CORNER_RADIUS = 8.dp @@ -41,6 +43,7 @@ fun MessageStateEventContainer( .combinedClickable( onClick = onClick, onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), indication = ripple(), interactionSource = interactionSource ), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt index e80367daee..8c2a1d9ff6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt @@ -51,6 +51,7 @@ import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.ui.media.MediaRequestData +import io.element.android.libraries.ui.strings.CommonStrings @Composable @Suppress("ModifierClickableOrder") // This is needed to display the right ripple shape @@ -103,6 +104,7 @@ fun MessagesReactionButton( userAlreadyReacted = content.isHighlighted ) }, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), onLongClick = onLongClick ) // Inner border, to highlight when selected diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemCallNotifyView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemCallNotifyView.kt index e4aee2febd..ca34184491 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemCallNotifyView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemCallNotifyView.kt @@ -51,7 +51,12 @@ internal fun TimelineItemCallNotifyView( modifier = modifier .fillMaxWidth() .border(1.dp, ElementTheme.colors.borderInteractiveSecondary, RoundedCornerShape(8.dp)) - .combinedClickable(enabled = true, onClick = {}, onLongClick = { onLongClick(event) }) + .combinedClickable( + enabled = true, + onClick = {}, + onLongClick = { onLongClick(event) }, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) .padding(12.dp), horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index c537c89b6d..ffbcfee305 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -145,14 +145,15 @@ internal fun TimelineItemRow( // Custom clickable that applies over the whole item for accessibility .then( if (isTalkbackActive()) { - Modifier.combinedClickable( - onClick = { onContentClick(timelineItem) }, - onLongClick = { onLongClick(timelineItem) } - ) - } else { - Modifier - } - ), + Modifier.combinedClickable( + onClick = { onContentClick(timelineItem) }, + onLongClick = { onLongClick(timelineItem) }, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) + } else { + Modifier + } + ), event = timelineItem, timelineRoomInfo = timelineRoomInfo, renderReadReceipts = renderReadReceipts, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt index dd16f2faf3..6cd369d84e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt @@ -66,7 +66,17 @@ fun TimelineItemStickerView( modifier = Modifier .fillMaxSize() .then(if (isLoaded) Modifier.background(Color.White) else Modifier) - .then(if (onContentClick != null) Modifier.combinedClickable(onClick = onContentClick, onLongClick = onLongClick) else Modifier), + .then( + if (onContentClick != null) { + Modifier + .combinedClickable( + onClick = onContentClick, + onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), ) + } else { + Modifier + } + ), model = MediaRequestData( source = content.preferredMediaSource, kind = MediaRequestData.Kind.File( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/AudioItemView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/AudioItemView.kt index 73786e12a4..c8d735d485 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/AudioItemView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/AudioItemView.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -35,6 +36,7 @@ import io.element.android.libraries.designsystem.theme.components.HorizontalDivi import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.mediaviewer.impl.model.MediaItem +import io.element.android.libraries.ui.strings.CommonStrings @Composable fun AudioItemView( @@ -77,7 +79,11 @@ private fun FilenameRow( color = ElementTheme.colors.bgSubtleSecondary, shape = RoundedCornerShape(12.dp), ) - .combinedClickable(onClick = onClick, onLongClick = onLongClick) + .combinedClickable( + onClick = onClick, + onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) .fillMaxWidth() .padding(start = 12.dp, end = 36.dp, top = 8.dp, bottom = 8.dp), verticalAlignment = Alignment.CenterVertically, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/FileItemView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/FileItemView.kt index cd73365cca..1144fc3eaf 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/FileItemView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/FileItemView.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -35,6 +36,7 @@ import io.element.android.libraries.designsystem.theme.components.HorizontalDivi import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.mediaviewer.impl.model.MediaItem +import io.element.android.libraries.ui.strings.CommonStrings @Composable fun FileItemView( @@ -77,7 +79,11 @@ private fun FilenameRow( color = ElementTheme.colors.bgSubtleSecondary, shape = RoundedCornerShape(12.dp), ) - .combinedClickable(onClick = onClick, onLongClick = onLongClick) + .combinedClickable( + onClick = onClick, + onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) .fillMaxWidth() .padding(start = 12.dp, end = 36.dp, top = 8.dp, bottom = 8.dp), verticalAlignment = Alignment.CenterVertically, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/ImageItemView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/ImageItemView.kt index 76841a9153..917c60df9e 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/ImageItemView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/ImageItemView.kt @@ -21,12 +21,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.stringResource import coil3.compose.AsyncImage import coil3.compose.AsyncImagePainter import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.mediaviewer.impl.model.MediaItem import io.element.android.libraries.mediaviewer.impl.model.aMediaItemImage +import io.element.android.libraries.ui.strings.CommonStrings @Composable fun ImageItemView( @@ -38,7 +40,11 @@ fun ImageItemView( Box( modifier = modifier .aspectRatio(1f) - .combinedClickable(onClick = onClick, onLongClick = onLongClick), + .combinedClickable( + onClick = onClick, + onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ), ) { var isLoaded by remember { mutableStateOf(false) } AsyncImage( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VideoItemView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VideoItemView.kt index 0f49028d34..cdc66c4eae 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VideoItemView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VideoItemView.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage @@ -37,6 +38,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.mediaviewer.impl.model.MediaItem +import io.element.android.libraries.ui.strings.CommonStrings @Composable fun VideoItemView( @@ -48,7 +50,11 @@ fun VideoItemView( Box( modifier = modifier .aspectRatio(1f) - .combinedClickable(onClick = onClick, onLongClick = onLongClick), + .combinedClickable( + onClick = onClick, + onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ), ) { var isLoaded by remember { mutableStateOf(false) } AsyncImage( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VoiceItemView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VoiceItemView.kt index fdb236baa2..5d84b79f8f 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VoiceItemView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/VoiceItemView.kt @@ -100,7 +100,11 @@ private fun VoiceInfoRow( color = ElementTheme.colors.bgSubtleSecondary, shape = RoundedCornerShape(12.dp), ) - .combinedClickable(onClick = {}, onLongClick = onLongClick) + .combinedClickable( + onClick = {}, + onLongClick = onLongClick, + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) .fillMaxWidth() .padding(start = 12.dp, end = 36.dp, top = 8.dp, bottom = 8.dp), verticalAlignment = Alignment.CenterVertically, diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index f57bcef62d..270e862300 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -101,6 +101,7 @@ "No" "Not now" "OK" + "Open context menu" "Settings" "Open with" "Pin" From f3eb0e69ccb4e7ce3d9804600b2b0bb89f32c242 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 09:43:30 +0200 Subject: [PATCH 3/8] Fix wrong TopAppBar usage --- .../SearchAccountProviderView.kt | 2 +- .../android/tests/konsist/KonsistImportTest.kt | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt index afa7dbe8a1..13bfd9e38e 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt @@ -25,7 +25,6 @@ import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold -import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue @@ -57,6 +56,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.TextField +import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.CommonStrings diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt index 129f9150ed..c921f3fd60 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImportTest.kt @@ -37,4 +37,17 @@ class KonsistImportTest { it.name == "androidx.compose.material3.OutlinedTextField" } } + + @Test + fun `material3 TopAppBar should not be used`() { + Konsist + .scopeFromProject() + .imports + .assertFalse( + additionalMessage = "Please use 'io.element.android.libraries.designsystem.theme.components.TopAppBar' instead of " + + "'androidx.compose.material3.TopAppBar.", + ) { + it.name == "androidx.compose.material3.TopAppBar" + } + } } From 70aa31df0050e4329e143b2a8e29309081d64c85 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 10:32:51 +0200 Subject: [PATCH 4/8] [a11y] Ensure that heading() is applied to all screen titles. --- .../impl/addpeople/AddPeopleView.kt | 10 +-- .../impl/configureroom/ConfigureRoomView.kt | 8 +-- .../impl/root/CreateRoomRootView.kt | 8 +-- .../logout/impl/AccountDeactivationView.kt | 8 +-- .../home/impl/components/RoomListTopBar.kt | 9 ++- .../declineandblock/DeclineAndBlockView.kt | 9 +-- .../features/joinroom/impl/JoinRoomView.kt | 8 ++- .../impl/list/KnockRequestsListView.kt | 8 +-- .../impl/details/DependenciesDetailsView.kt | 3 +- .../impl/list/DependencyLicensesListView.kt | 2 +- .../location/impl/send/SendLocationView.kt | 9 +-- .../location/impl/show/ShowLocationView.kt | 9 +-- .../createaccount/CreateAccountView.kt | 8 +-- .../features/messages/impl/MessagesView.kt | 13 +++- .../pinned/list/PinnedMessagesListView.kt | 9 +-- .../messages/impl/report/ReportMessageView.kt | 8 +-- .../impl/timeline/debug/EventDebugInfoView.kt | 8 +-- .../poll/impl/create/CreatePollView.kt | 13 +--- .../poll/impl/history/PollHistoryView.kt | 8 +-- .../impl/blockedusers/BlockedUsersView.kt | 10 +-- .../user/editprofile/EditUserProfileView.kt | 8 +-- .../reportroom/impl/ReportRoomView.kt | 31 ++++---- .../impl/edit/RoomDetailsEditView.kt | 10 +-- .../impl/invite/RoomInviteMembersView.kt | 8 +-- .../impl/members/RoomMemberListView.kt | 8 +-- .../RoomNotificationSettingsView.kt | 9 +-- ...UserDefinedRoomNotificationSettingsView.kt | 6 +- .../changeroles/ChangeRolesView.kt | 15 ++-- .../permissions/ChangeRoomPermissionsView.kt | 4 +- .../SecurityAndPrivacyView.kt | 8 +-- .../editroomaddress/EditRoomAddressView.kt | 10 +-- .../impl/root/RoomDirectoryView.kt | 8 +-- .../shared/UserProfileHeaderSection.kt | 8 ++- .../viewfolder/impl/file/ViewFileView.kt | 10 +-- .../viewfolder/impl/folder/ViewFolderView.kt | 8 +-- .../molecules/IconTitleSubtitleMolecule.kt | 7 +- .../components/preferences/PreferencePage.kt | 5 ++ .../theme/components/TopAppBar.kt | 72 +++++++++++++++++++ .../impl/gallery/MediaGalleryView.kt | 5 ++ .../impl/viewer/MediaViewerView.kt | 8 +++ .../roomselect/impl/RoomSelectView.kt | 12 +--- .../impl/history/PushHistoryView.kt | 11 +-- 42 files changed, 180 insertions(+), 259 deletions(-) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt index a26abd20fd..d39ac4d250 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt @@ -15,7 +15,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter -import io.element.android.compound.theme.ElementTheme import io.element.android.features.createroom.impl.R import io.element.android.features.createroom.impl.components.UserListView import io.element.android.features.createroom.impl.userlist.UserListEvents @@ -23,9 +22,7 @@ import io.element.android.features.createroom.impl.userlist.UserListState import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.ui.strings.CommonStrings @@ -74,12 +71,7 @@ private fun AddPeopleViewTopBar( onNextClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = stringResource(id = R.string.screen_create_room_add_people_title), - style = ElementTheme.typography.aliasScreenTitle - ) - }, + titleStr = stringResource(id = R.string.screen_create_room_add_people_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { val textActionResId = if (hasSelectedUsers) CommonStrings.action_next else CommonStrings.action_skip diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt index f68f434707..9c468539ab 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt @@ -48,7 +48,6 @@ import io.element.android.libraries.designsystem.modifiers.clearFocusOnTap import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text @@ -189,12 +188,7 @@ private fun ConfigureRoomToolbar( onNextClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = stringResource(R.string.screen_create_room_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_create_room_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { TextButton( diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt index af3675484a..248d331985 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt @@ -36,7 +36,6 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.icons.CompoundDrawables import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.ListSectionHeader import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -137,12 +136,7 @@ private fun CreateRoomRootViewTopBar( onCloseClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = stringResource(id = CommonStrings.action_start_chat), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(id = CommonStrings.action_start_chat), navigationIcon = { BackButton( imageVector = CompoundIcons.Close(), diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt index 3b0d8b6e1a..af1bcdad8d 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt @@ -57,7 +57,6 @@ import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusN import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.buildAnnotatedStringWithStyledPart -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -85,12 +84,7 @@ fun AccountDeactivationView( navigationIcon = { BackButton(onClick = onBackClick) }, - title = { - Text( - text = stringResource(R.string.screen_deactivate_account_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_deactivate_account_title), ) }, ) { padding -> diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt index ae1d708933..8071dead3d 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt @@ -34,6 +34,8 @@ import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp @@ -197,7 +199,12 @@ private fun DefaultRoomListTopBar( scrolledContainerColor = Color.Transparent, ), title = { - Text(text = title) + Text( + modifier = Modifier.semantics { + heading() + }, + text = title, + ) }, navigationIcon = { NavigationIcon( diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockView.kt index c313382b27..05110f982c 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockView.kt @@ -25,7 +25,6 @@ import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.features.invite.impl.R import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.components.async.AsyncActionView @@ -33,7 +32,6 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -63,12 +61,7 @@ fun DeclineAndBlockView( Scaffold( topBar = { TopAppBar( - title = { - Text( - stringResource(R.string.screen_decline_and_block_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_decline_and_block_title), navigationIcon = { BackButton(onClick = onBackClick) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 7f51773c45..cdeac0afe9 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -31,6 +31,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter @@ -577,7 +579,11 @@ private fun JoinRoomTopBar( avatarType = AvatarType.Room(), ) Text( - modifier = Modifier.padding(horizontal = 8.dp), + modifier = Modifier + .padding(horizontal = 8.dp) + .semantics { + heading() + }, text = contentState.name, style = ElementTheme.typography.fontBodyLgMedium, maxLines = 1, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt index 7e79203f31..987125f451 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt @@ -62,7 +62,6 @@ import io.element.android.libraries.designsystem.components.dialogs.Confirmation import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.toDp -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator @@ -479,12 +478,7 @@ private fun KnockRequestsEmptyList( @Composable private fun KnockRequestsListTopBar(onBackClick: () -> Unit) { TopAppBar( - title = { - Text( - text = stringResource(R.string.screen_knock_requests_list_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_knock_requests_list_title), navigationIcon = { BackButton(onClick = onBackClick) }, ) } diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt index 9267064f89..063579414f 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt @@ -23,7 +23,6 @@ import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar @OptIn(ExperimentalMaterial3Api::class) @@ -37,7 +36,7 @@ fun DependenciesDetailsView( modifier = modifier, topBar = { TopAppBar( - title = { Text(text = licenseItem.safeName) }, + titleStr = licenseItem.safeName, navigationIcon = { BackButton(onClick = onBack) }, ) }, diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt index 61e4ace265..3419665b65 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt @@ -47,7 +47,7 @@ fun DependencyLicensesListView( modifier = modifier, topBar = { TopAppBar( - title = { Text(text = stringResource(CommonStrings.common_open_source_licenses)) }, + titleStr = stringResource(CommonStrings.common_open_source_licenses), navigationIcon = { BackButton(onClick = onBackClick) }, ) }, diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt index 53d1855e2a..32df5af6c5 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt @@ -30,7 +30,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.location.api.Location import io.element.android.features.location.api.internal.centerBottomEdge @@ -42,7 +41,6 @@ import io.element.android.features.location.impl.common.PermissionRationaleDialo import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.BottomSheetScaffold import io.element.android.libraries.designsystem.theme.components.FloatingActionButton import io.element.android.libraries.designsystem.theme.components.Icon @@ -162,12 +160,7 @@ fun SendLocationView( sheetSwipeEnabled = false, topBar = { TopAppBar( - title = { - Text( - text = stringResource(CommonStrings.screen_share_location_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(CommonStrings.screen_share_location_title), navigationIcon = { BackButton(onClick = navigateUp) }, diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt index 81dd4c98f6..03d2a3c714 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt @@ -21,7 +21,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.compound.tokens.generated.TypographyTokens import io.element.android.features.location.api.internal.rememberTileStyleUrl @@ -31,7 +30,6 @@ import io.element.android.features.location.impl.common.PermissionRationaleDialo import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.FloatingActionButton import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton @@ -101,12 +99,7 @@ fun ShowLocationView( modifier = modifier, topBar = { TopAppBar( - title = { - Text( - text = stringResource(CommonStrings.screen_view_location_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(CommonStrings.screen_view_location_title), navigationIcon = { BackButton( onClick = onBackClick, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountView.kt index 87ea174540..2ad96edf75 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountView.kt @@ -36,7 +36,6 @@ import io.element.android.libraries.designsystem.components.async.AsyncActionVie import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.LinearProgressIndicator import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text @@ -56,12 +55,7 @@ fun CreateAccountView( modifier = modifier, topBar = { TopAppBar( - title = { - Text( - stringResource(R.string.screen_create_account_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_create_account_title), navigationIcon = { BackButton(onClick = onBackClick) }, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index dff12448bf..7c52cc9bab 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -39,6 +39,8 @@ import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -184,7 +186,10 @@ fun MessagesView( val expandableState = rememberExpandableBottomSheetLayoutState() ExpandableBottomSheetLayout( - modifier = modifier.fillMaxSize().imePadding().systemBarsPadding(), + modifier = modifier + .fillMaxSize() + .imePadding() + .systemBarsPadding(), content = { Scaffold( contentWindowInsets = WindowInsets.statusBars, @@ -556,7 +561,11 @@ private fun RoomAvatarAndNameRow( ), ) Text( - modifier = Modifier.padding(horizontal = 8.dp), + modifier = Modifier + .padding(horizontal = 8.dp) + .semantics { + heading() + }, text = roomName ?: stringResource(CommonStrings.common_no_room_name), style = ElementTheme.typography.fontBodyLgMedium, fontStyle = FontStyle.Italic.takeIf { roomName == null }, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt index a5dae403eb..86cd8c740f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt @@ -23,7 +23,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import im.vector.app.features.analytics.plan.Interaction -import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.actionlist.ActionListEvents import io.element.android.features.messages.impl.actionlist.ActionListView @@ -46,7 +45,6 @@ import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.ui.strings.CommonStrings @@ -100,12 +98,7 @@ private fun PinnedMessagesListTopBar( modifier: Modifier = Modifier, ) { TopAppBar( - title = { - Text( - text = state.title(), - style = ElementTheme.typography.fontBodyLgMedium - ) - }, + titleStr = state.title(), navigationIcon = { BackButton(onClick = onBackClick) }, modifier = modifier, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt index d2c5d05e1a..d3d9e1e37a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt @@ -35,7 +35,6 @@ import io.element.android.libraries.designsystem.components.async.AsyncActionVie import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text @@ -63,12 +62,7 @@ fun ReportMessageView( Scaffold( topBar = { TopAppBar( - title = { - Text( - stringResource(CommonStrings.action_report_content), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(CommonStrings.action_report_content), navigationIcon = { BackButton(onClick = onBackClick) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt index a9467a9a8f..cd22006804 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoView.kt @@ -44,7 +44,6 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text @@ -72,12 +71,7 @@ fun EventDebugInfoView( Scaffold( topBar = { TopAppBar( - title = { - Text( - text = "Debug event info", - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = "Debug event info", navigationIcon = { BackButton(onClick = onBackClick) } ) }, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt index 038fb397f3..ce6a8682b6 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.tooling.preview.PreviewParameter -import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.poll.impl.R import io.element.android.libraries.designsystem.components.button.BackButton @@ -39,7 +38,6 @@ import io.element.android.libraries.designsystem.components.dialogs.Confirmation import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconSource @@ -209,14 +207,9 @@ private fun CreatePollTopAppBar( onSaveClick: () -> Unit = {}, ) { TopAppBar( - title = { - Text( - text = when (mode) { - CreatePollState.Mode.New -> stringResource(id = R.string.screen_create_poll_title) - CreatePollState.Mode.Edit -> stringResource(id = R.string.screen_edit_poll_title) - }, - style = ElementTheme.typography.aliasScreenTitle, - ) + titleStr = when (mode) { + CreatePollState.Mode.New -> stringResource(id = R.string.screen_create_poll_title) + CreatePollState.Mode.Edit -> stringResource(id = R.string.screen_edit_poll_title) }, navigationIcon = { BackButton(onClick = onBackClick) diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt index 1101276577..0ff1ef57a5 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt @@ -42,7 +42,6 @@ import io.element.android.features.poll.impl.history.model.PollHistoryItem import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.SegmentedButton @@ -77,12 +76,7 @@ fun PollHistoryView( modifier = modifier, topBar = { TopAppBar( - title = { - Text( - text = stringResource(R.string.screen_polls_history_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_polls_history_title), navigationIcon = { BackButton(onClick = goBack) }, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersView.kt index a892ebba44..56b5dd709e 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersView.kt @@ -19,7 +19,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter -import io.element.android.compound.theme.ElementTheme import io.element.android.features.preferences.impl.R import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.components.async.AsyncIndicator @@ -29,9 +28,7 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser @@ -49,12 +46,7 @@ fun BlockedUsersView( Scaffold( topBar = { TopAppBar( - title = { - Text( - text = stringResource(CommonStrings.common_blocked_users), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(CommonStrings.common_blocked_users), navigationIcon = { BackButton(onClick = onBackClick) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt index dc03b593c7..00581745ce 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt @@ -37,7 +37,6 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.modifiers.clearFocusOnTap import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton @@ -68,12 +67,7 @@ fun EditUserProfileView( modifier = modifier.clearFocusOnTap(focusManager), topBar = { TopAppBar( - title = { - Text( - text = stringResource(R.string.screen_edit_profile_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_edit_profile_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { TextButton( diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomView.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomView.kt index 6421b7d576..5af0beefcd 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomView.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomView.kt @@ -25,14 +25,12 @@ import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -75,12 +73,7 @@ fun ReportRoomView( Scaffold( topBar = { TopAppBar( - title = { - Text( - stringResource(R.string.screen_report_room_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_report_room_title), navigationIcon = { BackButton(onClick = onBackClick) } @@ -90,12 +83,12 @@ fun ReportRoomView( ) { padding -> Column( modifier = Modifier - .padding(padding) - .consumeWindowInsets(padding) - .imePadding() - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(vertical = 16.dp) + .padding(padding) + .consumeWindowInsets(padding) + .imePadding() + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(vertical = 16.dp) ) { TextField( value = state.reason, @@ -104,9 +97,9 @@ fun ReportRoomView( minLines = 3, enabled = !isReporting, modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) - .heightIn(min = 90.dp), + .fillMaxWidth() + .padding(horizontal = 16.dp) + .heightIn(min = 90.dp), supportingText = stringResource(R.string.screen_report_room_reason_footer), ) @@ -135,8 +128,8 @@ fun ReportRoomView( state.eventSink(ReportRoomEvents.Report) }, modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) + .fillMaxWidth() + .padding(horizontal = 16.dp) ) } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt index b77ea44001..60082b23f1 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt @@ -29,7 +29,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.features.roomdetails.impl.R import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults @@ -39,9 +38,7 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.modifiers.clearFocusOnTap import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TextField import io.element.android.libraries.designsystem.theme.components.TopAppBar @@ -69,12 +66,7 @@ fun RoomDetailsEditView( modifier = modifier.clearFocusOnTap(focusManager), topBar = { TopAppBar( - title = { - Text( - text = stringResource(id = R.string.screen_room_details_edit_room_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(id = R.string.screen_room_details_edit_room_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { TextButton( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt index 5f38e7e451..caae6ff16d 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt @@ -28,7 +28,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.SearchBar @@ -108,12 +107,7 @@ private fun RoomInviteMembersTopBar( onSubmitClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = stringResource(R.string.screen_room_details_invite_people_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_room_details_invite_people_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { TextButton( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index 88da5b6ebc..443a40c6a2 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -49,7 +49,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.LinearProgressIndicator import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -352,12 +351,7 @@ private fun RoomMemberListTopBar( onInviteClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = stringResource(CommonStrings.common_people), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(CommonStrings.common_people), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { if (canInvite) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt index a94f605059..bcd2e59d3b 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt @@ -30,9 +30,7 @@ import io.element.android.libraries.designsystem.components.preferences.Preferen import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.buildAnnotatedStringWithStyledPart -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.ui.strings.CommonStrings @@ -168,12 +166,7 @@ private fun RoomNotificationSettingsTopBar( onBackClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = stringResource(R.string.screen_room_details_notification_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_room_details_notification_title), navigationIcon = { BackButton(onClick = onBackClick) }, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt index 95a233b0e7..00c545b853 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt @@ -96,11 +96,7 @@ private fun UserDefinedRoomNotificationSettingsTopBar( onBackClick: () -> Unit, ) { TopAppBar( - title = { - Text( - text = roomName, - ) - }, + titleStr = roomName, navigationIcon = { BackButton(onClick = onBackClick) }, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt index 2b1ee08f66..a9e321a11f 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt @@ -56,7 +56,6 @@ import io.element.android.libraries.designsystem.components.dialogs.Confirmation import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Checkbox import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.SearchBar @@ -96,16 +95,10 @@ fun ChangeRolesView( topBar = { AnimatedVisibility(visible = !state.isSearchActive) { TopAppBar( - title = { - val title = when (state.role) { - RoomMember.Role.ADMIN -> stringResource(R.string.screen_room_change_role_administrators_title) - RoomMember.Role.MODERATOR -> stringResource(R.string.screen_room_change_role_moderators_title) - RoomMember.Role.USER -> error("This should never be reached") - } - Text( - text = title, - style = ElementTheme.typography.aliasScreenTitle, - ) + titleStr = when (state.role) { + RoomMember.Role.ADMIN -> stringResource(R.string.screen_room_change_role_administrators_title) + RoomMember.Role.MODERATOR -> stringResource(R.string.screen_room_change_role_moderators_title) + RoomMember.Role.USER -> error("This should never be reached") }, navigationIcon = { BackButton(onClick = { state.eventSink(ChangeRolesEvent.Exit) }) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsView.kt index d8eb707927..ba8cc7f978 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsView.kt @@ -16,7 +16,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter -import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.roomdetails.impl.R import io.element.android.libraries.core.bool.orFalse @@ -26,7 +25,6 @@ import io.element.android.libraries.designsystem.components.dialogs.Confirmation import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.ListItemStyle @@ -58,7 +56,7 @@ fun ChangeRoomPermissionsView( ChangeRoomPermissionsSection.MembershipModeration -> stringResource(R.string.screen_room_change_permissions_member_moderation) } TopAppBar( - title = { Text(text = title, style = ElementTheme.typography.aliasScreenTitle) }, + titleStr = title, navigationIcon = { BackButton(onClick = { state.eventSink(ChangeRoomPermissionsEvent.Exit) }) }, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt index 9caff45ada..c46f8a7a6f 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyView.kt @@ -40,7 +40,6 @@ import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.ListItem @@ -142,12 +141,7 @@ private fun SecurityAndPrivacyToolbar( ) { TopAppBar( modifier = modifier, - title = { - Text( - text = stringResource(R.string.screen_room_details_security_and_privacy_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_room_details_security_and_privacy_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { TextButton( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt index d39208ee95..93c2523f65 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressView.kt @@ -20,16 +20,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import io.element.android.compound.theme.ElementTheme import io.element.android.features.roomdetails.impl.R import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.ui.room.address.RoomAddressField @@ -99,12 +96,7 @@ private fun EditRoomAddressTopBar( ) { TopAppBar( modifier = modifier, - title = { - Text( - text = stringResource(R.string.screen_edit_room_address_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = stringResource(R.string.screen_edit_room_address_title), navigationIcon = { BackButton(onClick = onBackClick) }, actions = { TextButton( diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt index 5c6383ba3b..8b2944f745 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt @@ -44,7 +44,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.FilledTextField import io.element.android.libraries.designsystem.theme.components.Icon @@ -91,12 +90,7 @@ private fun RoomDirectoryTopBar( navigationIcon = { BackButton(onClick = onBackClick) }, - title = { - Text( - text = stringResource(id = R.string.screen_room_directory_search_title), - style = ElementTheme.typography.aliasScreenTitle, - ) - } + titleStr = stringResource(id = R.string.screen_room_directory_search_title), ) } diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt index c4de75e40b..415a6e3282 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt @@ -20,6 +20,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -77,7 +79,11 @@ fun UserProfileHeaderSection( Spacer(modifier = Modifier.height(24.dp)) if (userName != null) { Text( - modifier = Modifier.clipToBounds(), + modifier = Modifier + .clipToBounds() + .semantics { + heading() + }, text = userName, style = ElementTheme.typography.fontHeadingLgBold, textAlign = TextAlign.Center, diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileView.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileView.kt index 3851a4a554..4f3b84734f 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileView.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileView.kt @@ -15,7 +15,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter -import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.designsystem.components.async.AsyncFailure @@ -23,11 +22,9 @@ import io.element.android.libraries.designsystem.components.async.AsyncLoading import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.toImmutableList @@ -46,12 +43,7 @@ fun ViewFileView( navigationIcon = { BackButton(onClick = onBackClick) }, - title = { - Text( - text = state.name, - style = ElementTheme.typography.aliasScreenTitle, - ) - }, + titleStr = state.name, actions = { IconButton( onClick = { diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt index 7ccdf78539..99de3badb8 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt @@ -32,7 +32,6 @@ import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -54,12 +53,7 @@ fun ViewFolderView( navigationIcon = { BackButton(onClick = onBackClick) }, - title = { - Text( - text = state.path, - style = ElementTheme.typography.aliasScreenTitle, - ) - } + titleStr = state.path, ) }, content = { padding -> diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt index 9496f53993..a89a21adbd 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt @@ -14,6 +14,8 @@ import androidx.compose.foundation.layout.height import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -47,7 +49,10 @@ fun IconTitleSubtitleMolecule( Text( text = title, modifier = Modifier - .fillMaxWidth(), + .fillMaxWidth() + .semantics { + heading() + }, textAlign = TextAlign.Center, style = ElementTheme.typography.fontHeadingMdBold, color = ElementTheme.colors.textPrimary, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt index 40bcfc949b..b81c3e6b86 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt @@ -21,6 +21,8 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons @@ -78,6 +80,9 @@ private fun PreferenceTopAppBar( }, title = { Text( + modifier = Modifier.semantics { + heading() + }, text = title, style = ElementTheme.typography.aliasScreenTitle, maxLines = 1, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TopAppBar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TopAppBar.kt index e5daeb123b..3087f8f5f0 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TopAppBar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TopAppBar.kt @@ -17,13 +17,66 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup +import io.element.android.libraries.designsystem.theme.aliasScreenTitle +/** + * A top app bar that displays a title string, navigation icon, and actions. + * @param titleStr The title string to display in the top app bar. + * @param modifier The [Modifier] to be applied to this top app bar. + * @param navigationIcon The content to display as the navigation icon. + * @param actions The content to display in the action area of the top app bar. + * @param windowInsets The window insets to apply to this top app bar. + * @param colors The colors used for this top app bar. + * @param scrollBehavior Optional scroll behavior for this top app bar. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TopAppBar( + titleStr: String, + modifier: Modifier = Modifier, + navigationIcon: @Composable () -> Unit = {}, + actions: @Composable RowScope.() -> Unit = {}, + windowInsets: WindowInsets = TopAppBarDefaults.windowInsets, + colors: TopAppBarColors = TopAppBarDefaults.topAppBarColors(), + scrollBehavior: TopAppBarScrollBehavior? = null +) { + TopAppBar( + title = { + Text( + text = titleStr, + modifier = Modifier.semantics { heading() }, + style = ElementTheme.typography.aliasScreenTitle, + ) + }, + modifier = modifier, + navigationIcon = navigationIcon, + actions = actions, + windowInsets = windowInsets, + colors = colors, + scrollBehavior = scrollBehavior, + ) +} + +/** + * A top app bar that displays a title, navigation icon, and actions. + * + * @param title The content to display as the title of the top app bar. Do not forget to apply `heading()` to + * the semantics of the title to ensure it is announced correctly by accessibility services. + * @param modifier The [Modifier] to be applied to this top app bar. + * @param navigationIcon The content to display as the navigation icon. + * @param actions The content to display in the action area of the top app bar. + * @param windowInsets The window insets to apply to this top app bar. + * @param colors The colors used for this top app bar. + * @param scrollBehavior Optional scroll behavior for this top app bar. + */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun TopAppBar( @@ -68,3 +121,22 @@ internal fun TopAppBarPreview() = ElementThemedPreview { } ) } + +@OptIn(ExperimentalMaterial3Api::class) +@Preview(group = PreviewGroup.AppBars) +@Composable +internal fun TopAppBarStrPreview() = ElementThemedPreview { + TopAppBar( + titleStr = "Title string", + navigationIcon = { BackButton(onClick = {}) }, + actions = { + TextButton(text = "Action", onClick = {}) + IconButton(onClick = {}) { + Icon( + imageVector = CompoundIcons.ShareAndroid(), + contentDescription = null, + ) + } + } + ) +} diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt index 38eed3252f..23f68c290d 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt @@ -35,6 +35,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource +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.PreviewParameter import androidx.compose.ui.unit.dp @@ -95,6 +97,9 @@ fun MediaGalleryView( TopAppBar( title = { Text( + modifier = Modifier.semantics { + heading() + }, text = state.roomName, style = ElementTheme.typography.aliasScreenTitle, maxLines = 1, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt index a4a7f2209f..110054eb20 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt @@ -43,6 +43,8 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource +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 import androidx.compose.ui.tooling.preview.PreviewParameter @@ -212,6 +214,9 @@ fun MediaViewerView( title = { if (currentData is MediaViewerPageData.Loading) { Text( + modifier = Modifier.semantics { + heading() + }, text = stringResource(id = CommonStrings.common_loading_more), style = ElementTheme.typography.fontBodyMdMedium, color = ElementTheme.colors.textPrimary, @@ -454,6 +459,9 @@ private fun MediaViewerTopBar( .fillMaxWidth() ) { Text( + modifier = Modifier.semantics { + heading() + }, text = senderName, style = ElementTheme.typography.fontBodyMdMedium, color = ElementTheme.colors.textPrimary, diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index f9a95ac4b8..7d90629a50 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -38,7 +38,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.RadioButton import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -95,14 +94,9 @@ fun RoomSelectView( modifier = modifier, topBar = { TopAppBar( - title = { - Text( - text = when (state.mode) { - RoomSelectMode.Forward -> stringResource(CommonStrings.common_forward_message) - RoomSelectMode.Share -> stringResource(CommonStrings.common_send_to) - }, - style = ElementTheme.typography.aliasScreenTitle - ) + titleStr = when (state.mode) { + RoomSelectMode.Forward -> stringResource(CommonStrings.common_forward_message) + RoomSelectMode.Share -> stringResource(CommonStrings.common_send_to) }, navigationIcon = { BackButton(onClick = { onBackButton(state) }) diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt index 36340518cb..2cd2e6dc20 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt @@ -30,7 +30,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -41,7 +40,6 @@ import io.element.android.libraries.designsystem.components.dialogs.Confirmation import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.DropdownMenu import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem import io.element.android.libraries.designsystem.theme.components.Icon @@ -78,14 +76,7 @@ fun PushHistoryView( navigationIcon = { BackButton(onClick = onBackClick) }, - title = { - Text( - text = stringResource(R.string.screen_push_history_title), - style = ElementTheme.typography.aliasScreenTitle, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - }, + titleStr = stringResource(R.string.screen_push_history_title), actions = { IconButton(onClick = { showMenu = !showMenu }) { Icon( From 2ba54105d2be83e45bd44880d08dbe108c045c18 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 12:16:05 +0200 Subject: [PATCH 5/8] [a11y] Add heading() to date separators. --- .../components/virtual/TimelineItemDaySeparatorView.kt | 6 ++++++ .../libraries/mediaviewer/impl/gallery/ui/DateItemView.kt | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt index 2e0c874535..f8581bb637 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt @@ -14,6 +14,8 @@ import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -36,6 +38,10 @@ internal fun TimelineItemDaySeparatorView( contentAlignment = Alignment.Center, ) { Text( + modifier = modifier + .semantics { + heading() + }, text = model.formattedDate, style = ElementTheme.typography.fontBodyMdMedium, color = ElementTheme.colors.textPrimary, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/DateItemView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/DateItemView.kt index 84fe175fc9..ff59a67b49 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/DateItemView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/ui/DateItemView.kt @@ -11,6 +11,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -28,7 +30,10 @@ fun DateItemView( Text( modifier = modifier .fillMaxWidth() - .padding(12.dp), + .padding(12.dp) + .semantics { + heading() + }, text = item.formattedDate, textAlign = TextAlign.Center, style = ElementTheme.typography.fontBodyMdMedium, From 0b3def201258ad699dffddd0e38718afa5211df4 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 4 Jul 2025 10:28:37 +0000 Subject: [PATCH 6/8] Update screenshots --- ...licenses.impl.details_DependenciesDetailsView_Day_0_en.png | 4 ++-- ...censes.impl.details_DependenciesDetailsView_Night_0_en.png | 4 ++-- ...licenses.impl.list_DependencyLicensesListView_Day_0_en.png | 4 ++-- ...licenses.impl.list_DependencyLicensesListView_Day_1_en.png | 4 ++-- ...licenses.impl.list_DependencyLicensesListView_Day_2_en.png | 4 ++-- ...licenses.impl.list_DependencyLicensesListView_Day_3_en.png | 4 ++-- ...censes.impl.list_DependencyLicensesListView_Night_0_en.png | 4 ++-- ...censes.impl.list_DependencyLicensesListView_Night_1_en.png | 4 ++-- ...censes.impl.list_DependencyLicensesListView_Night_2_en.png | 4 ++-- ...censes.impl.list_DependencyLicensesListView_Night_3_en.png | 4 ++-- ...sages.impl.pinned.list_PinnedMessagesListView_Day_0_en.png | 4 ++-- ...sages.impl.pinned.list_PinnedMessagesListView_Day_1_en.png | 4 ++-- ...sages.impl.pinned.list_PinnedMessagesListView_Day_2_en.png | 4 ++-- ...sages.impl.pinned.list_PinnedMessagesListView_Day_3_en.png | 4 ++-- ...ges.impl.pinned.list_PinnedMessagesListView_Night_0_en.png | 4 ++-- ...ges.impl.pinned.list_PinnedMessagesListView_Night_1_en.png | 4 ++-- ...ges.impl.pinned.list_PinnedMessagesListView_Night_2_en.png | 4 ++-- ...ges.impl.pinned.list_PinnedMessagesListView_Night_3_en.png | 4 ++-- ...tings_UserDefinedRoomNotificationSettingsView_Day_0_en.png | 4 ++-- ...ngs_UserDefinedRoomNotificationSettingsView_Night_0_en.png | 4 ++-- ...designsystem.theme.components_TopAppBarStr_App_Bars_en.png | 3 +++ 21 files changed, 43 insertions(+), 40 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TopAppBarStr_App_Bars_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Day_0_en.png index 05ae7c8895..4114b76ed1 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55663ac9ab6472fe7f302d7f74af536080764a3e581ba50bb8198b8970b35e2c -size 19164 +oid sha256:577085f16207b31d905cbe94bb60c61c0c7b6be02f01cf6883f98a00eb69fceb +size 18768 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Night_0_en.png index a77bb5c452..9678921573 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.details_DependenciesDetailsView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32c9a5768233fd07c69612dd839f64a2674b9f6905dc432400b93ab6c8259a34 -size 18933 +oid sha256:25be51215130a793208edc2e01d0c15d3151bf9d0543e7d64607d1f829e8fa33 +size 18559 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_0_en.png index 4f59a86c87..4bd8480af0 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4c96790d61f5ae03c3b32d5ea85d2b1efddc84f248f2373290f28c15ced4dc0 -size 11443 +oid sha256:44501f02d607565bfcf84d83d53288efb93939e6325eeec1901481941074ab56 +size 10861 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_1_en.png index 3e28ef04c8..49ded6b6ea 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c19cd3e9a9e76ad26789ca882e19574ddd8b979f46e2da970b1a31fd6793b81 -size 10659 +oid sha256:4127991f99717671dca28e736e992d1344d9f138bd4a7600cc6d352d7ede3b7b +size 10079 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_2_en.png index e0851891b2..4711d36009 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72a0143f03e008d0961066cd600d7567c5a64b36d8d4ed610324ae68b15660ef -size 30061 +oid sha256:42ade89c88841182bc0c4295d289eac4dde26bdf763a216944bdf6dc8894a4e7 +size 29491 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_3_en.png index debbf12ddf..b5ff98014d 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6c2cbf04f228dc6d63660d4a0d5bd7a56e2dfa7aba0778e01860d99017d25e4 -size 31325 +oid sha256:91a75224ef7854250a2d5b6d525a1481b6c9a7bc6fd6adeec047ff909d759095 +size 30751 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_0_en.png index 3f468fa931..0e19cf631c 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da6d82da577060eafd43bd4c13867cac99143fb8bc877f7149db4c3f4aa6e81a -size 11088 +oid sha256:e8d582ca5d78964c333899eaded2df2febcb238e1e096163ecc55b7ea36523f7 +size 10645 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_1_en.png index 4481510fcb..7fc56dec82 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cade141584d56fef5ebe38657c3e953914a4e7c7c7167b114327fcae913e50e7 -size 10324 +oid sha256:c5ac6eb568306add765a487eb9156132eba4195847256c9d5b9f73007a3e6d5a +size 9892 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_2_en.png index 6fea0e40d1..2ae6d2f3c6 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd5044ab9be16487d6637d80aa81d2d70f48596f9bd9db2049cc152145ab5b06 -size 29268 +oid sha256:cc6f5fd2548221be498d6788d394bb901467f687c692d73b425ed3f5ad2cb129 +size 28843 diff --git a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_3_en.png index 88a2f62577..1028071e94 100644 --- a/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.licenses.impl.list_DependencyLicensesListView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ecfa7ad0239499dfb3611b0049244d46d2dc795906bf5e5afdefd0bf9ede43f -size 30464 +oid sha256:646f948869e9a6cad317255c42317aba153d1e50fc3cfca0286525ee048ebb1d +size 30046 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en.png index f8be03d1ef..cfe738540b 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:536272e1b1a06848f0f5ffdf50c833156851530c56d03dba1c0443a4efa2a3dd -size 20043 +oid sha256:b4ebf530f28ccaffdf6c816f51c3fc78903fc9ba4a0775301af26e187d32e6fb +size 20779 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en.png index ae22d49102..a0944d9fcd 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:078fcdde92926d5bbe965cda4e5ee83d0cc04866b05979873d71a3cf1e6a346c -size 9076 +oid sha256:432f60087c3edff9d184d5aaea7bfc50138c5928257de86ad5cca459f28e03ca +size 9947 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en.png index 95af94340a..836d72c977 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6cac5cee10ab9ded373ed8275880534fbfa3f88c7f9219278b3805f30afb766 -size 30876 +oid sha256:a41c6035d2d506b36a5c2678302f13c65c77bb095342e5367370c0ae52c009b7 +size 31703 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en.png index f2f01538d4..55d9a9f41e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:622ce8af67b17db0b7f729422ccc311f14c258d900c469901e8ba646d42ad031 -size 42659 +oid sha256:a7711aa43b9c18e15475dcf1a8972dcd5a7d60441991584dd9be70648e83f072 +size 43636 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en.png index a8c91448c6..b9296469e0 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:747a75188e93af724433ea20b4ad373260acb3ae5f35bd832f97027646f80c8b -size 18160 +oid sha256:26d70f0c51e1ed3e42fda9db8c5b7904b2e8c28a4de226518c115866fe231e2f +size 18973 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en.png index 1d0bf47b5f..b15af48206 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38838c6edf589ae6d309ea26cdc672363b1ce2c56a2cf7fd5a5bf826f86aae44 -size 8820 +oid sha256:b499af9f0cb9ad3a849832708e28e6b604dbe85199bd29d51dceaaa5c105a6dd +size 9744 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en.png index 3ceac1e1c5..66f37b81eb 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1bdd621283aa96a109b0f391874c2a2bc4d187db5ec408ab2d38f2d14f54eed -size 29870 +oid sha256:293bc0c9e67e2ba87bb88166ad8f21c6aeb79720f96279cfe33273c0d65d91aa +size 30779 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en.png index e2835a19a1..1ca14953bf 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29ddafc09a16e878cad38d5f1fbc8e18b9936f2ecb3b7dc188178f6a424ddd05 -size 41539 +oid sha256:865cdad040d77b82ab7f8d4151595b7843b2d74dea5a8e5a5516ccafb344b5f4 +size 42502 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en.png index c537936bbb..197660c6c5 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29d32752f291cf258bfe69adb5c5968f776c39584fc8fdb496ecf81d3e78415e -size 22765 +oid sha256:446392e5f5f87e53ea6647472bb1f50c59301b919978fe97f0aeb2b02a06662f +size 22576 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en.png index dde921b1e1..d6ef208605 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57e243970cb239da471ff3962429c72d50a11478fa49325b1ae4e994dfc8ded6 -size 22078 +oid sha256:19725ce0f5a535af906cd8db38e299ce34e6d11408217ecaf666870f9dadc79a +size 21874 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TopAppBarStr_App_Bars_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TopAppBarStr_App_Bars_en.png new file mode 100644 index 0000000000..df3420b26d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TopAppBarStr_App_Bars_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86b77c62b3c95dc10f14f2d511ef2d0cc95337b4c6677efc6f263ad99714c573 +size 13301 From 283dd4bd33f3767aa64506394b68b1abc802da5c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 12:41:24 +0200 Subject: [PATCH 7/8] Format code. --- .../impl/timeline/components/event/TimelineItemStickerView.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt index 6cd369d84e..dc7cfb2d52 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt @@ -72,7 +72,8 @@ fun TimelineItemStickerView( .combinedClickable( onClick = onContentClick, onLongClick = onLongClick, - onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), ) + onLongClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) } else { Modifier } From 8910487e960526b785e824ae3fe8e656619a4ddf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 12:42:45 +0200 Subject: [PATCH 8/8] Fix issue with modifier. --- .../timeline/components/virtual/TimelineItemDaySeparatorView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt index f8581bb637..08fe34b724 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt @@ -38,7 +38,7 @@ internal fun TimelineItemDaySeparatorView( contentAlignment = Alignment.Center, ) { Text( - modifier = modifier + modifier = Modifier .semantics { heading() },