diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt index 20fb043c43..07a32c3f4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt @@ -26,7 +26,8 @@ import org.thoughtcrime.securesms.util.NameUtil fun AvatarImage( recipient: Recipient, modifier: Modifier = Modifier, - useProfile: Boolean = true + useProfile: Boolean = true, + contentDescription: String? = null ) { if (LocalInspectionMode.current) { Spacer( @@ -38,7 +39,11 @@ fun AvatarImage( val state = recipient.live().liveData.map { AvatarImageState(NameUtil.getAbbreviation(it.getDisplayName(context)), it, AvatarHelper.getAvatarFileDetails(context, it.id)) }.observeAsState().value ?: return AndroidView( - factory = ::AvatarImageView, + factory = { + AvatarImageView(context).apply { + this.contentDescription = contentDescription + } + }, modifier = modifier.background(color = Color.Transparent, shape = CircleShape) ) { if (useProfile) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/incommon/GroupsInCommonActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/incommon/GroupsInCommonActivity.kt index eb09a90d3c..6b55a7ac48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/incommon/GroupsInCommonActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/incommon/GroupsInCommonActivity.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.pluralStringResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.signal.core.ui.compose.Previews @@ -158,6 +159,7 @@ private fun TopAppBar( title = pluralStringResource(R.plurals.GroupsInCommon__n_groups_in_common_title, groupCount, NumberFormat.getInstance().format(groupCount)), titleContent = { _, title -> Text(text = title, style = MaterialTheme.typography.titleLarge) }, navigationIconPainter = painterResource(R.drawable.symbol_arrow_start_24), + navigationContentDescription = stringResource(R.string.DefaultTopAppBar__navigate_up_content_description), onNavigationClick = onBackPress, scrollBehavior = scrollBehavior ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainFloatingActionButtons.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainFloatingActionButtons.kt index b207d5b217..14708f14cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainFloatingActionButtons.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainFloatingActionButtons.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -182,15 +183,15 @@ private fun PrimaryActionButton( shadowElevation = elevation, icon = { AnimatedContent(destination) { targetState -> - val icon = when (targetState) { - MainNavigationListLocation.CHATS -> R.drawable.symbol_edit_24 - MainNavigationListLocation.CALLS -> R.drawable.symbol_phone_plus_24 - MainNavigationListLocation.STORIES -> R.drawable.symbol_camera_24 + val (icon, contentDescriptionId) = when (targetState) { + MainNavigationListLocation.CHATS -> R.drawable.symbol_edit_24 to R.string.conversation_list_fragment__fab_content_description + MainNavigationListLocation.CALLS -> R.drawable.symbol_phone_plus_24 to R.string.CallLogFragment__start_a_new_call + MainNavigationListLocation.STORIES -> R.drawable.symbol_camera_24 to R.string.conversation_list_fragment__open_camera_description } Icon( imageVector = ImageVector.vectorResource(icon), - contentDescription = "" + contentDescription = stringResource(contentDescriptionId) ) } } @@ -209,7 +210,7 @@ private fun CameraButton( icon = { Icon( imageVector = ImageVector.vectorResource(R.drawable.symbol_camera_24), - contentDescription = "" + contentDescription = stringResource(R.string.conversation_list_fragment__open_camera_description) ) }, colors = colors, diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt index b6f85565bb..c966820bb3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt @@ -63,6 +63,8 @@ import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.signal.core.ui.compose.DropdownMenus @@ -317,6 +319,7 @@ private fun PrimaryToolbar( containerColor = state.toolbarColor ?: MaterialTheme.colorScheme.surface ), navigationIcon = { + val contentDescription = stringResource(R.string.conversation_list_settings_shortcut) Box( contentAlignment = Alignment.Center, modifier = Modifier @@ -327,7 +330,8 @@ private fun PrimaryToolbar( recipient = state.self, modifier = Modifier .clip(CircleShape) - .size(28.dp) + .size(28.dp), + contentDescription = contentDescription ) val interactionSource = remember { MutableInteractionSource() } @@ -336,10 +340,12 @@ private fun PrimaryToolbar( .fillMaxSize() .clickable( onClick = callback::onSettingsClick, - onClickLabel = stringResource(R.string.conversation_list_settings_shortcut), interactionSource = interactionSource, indication = ripple(radius = 14.dp) ) + .semantics { + this.contentDescription = contentDescription + } ) BadgeImageSmall( diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/countrycode/CountryCodeSelectScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/countrycode/CountryCodeSelectScreen.kt index 1cfd96bb1d..db204b6254 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/countrycode/CountryCodeSelectScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/countrycode/CountryCodeSelectScreen.kt @@ -78,7 +78,8 @@ fun CountryCodeSelectScreen( Text(text = title, style = MaterialTheme.typography.titleLarge) }, onNavigationClick = onDismissed, - navigationIconPainter = rememberVectorPainter(ImageVector.vectorResource(R.drawable.symbol_x_24)) + navigationIconPainter = rememberVectorPainter(ImageVector.vectorResource(R.drawable.symbol_x_24)), + navigationContentDescription = stringResource(R.string.Material3SearchToolbar__close) ) } ) { padding -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementActivityV2.kt index ecb10e59e5..d4aa96702b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementActivityV2.kt @@ -243,6 +243,7 @@ private fun TopAppBar( title = stringResource(R.string.StickerManagementActivity_stickers), titleContent = { _, title -> Text(text = title, style = MaterialTheme.typography.titleLarge) }, navigationIconPainter = painterResource(R.drawable.symbol_arrow_start_24), + navigationContentDescription = stringResource(R.string.DefaultTopAppBar__navigate_up_content_description), onNavigationClick = onBackPress ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5e5f9ce78..4bbe909cfe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8463,5 +8463,8 @@ Proxy + + Navigate up +