a11y: Extract method a11yReactionDetails to use it at other places

This commit is contained in:
Benoit Marty
2025-06-16 14:29:00 +02:00
parent ace1ec9d14
commit 2dd31d1b3a
2 changed files with 42 additions and 27 deletions

View File

@@ -9,14 +9,16 @@ package io.element.android.features.messages.impl.timeline.a11y
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import io.element.android.features.messages.impl.R
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
@ReadOnlyComposable
fun a11yReactionAction(
emoji: String,
userAlreadyReacted: Boolean = false,
userAlreadyReacted: Boolean,
): String {
return if (userAlreadyReacted) {
stringResource(id = CommonStrings.a11y_remove_reaction_with, emoji)
@@ -24,3 +26,36 @@ fun a11yReactionAction(
stringResource(id = CommonStrings.a11y_react_with, emoji)
}
}
@Composable
@ReadOnlyComposable
fun a11yReactionDetails(
emoji: String,
userAlreadyReacted: Boolean,
reactionCount: Int,
): String {
val reaction = if (emoji.startsWith("mxc://")) {
stringResource(CommonStrings.common_an_image)
} else {
emoji
}
return if (userAlreadyReacted) {
if (reactionCount == 1) {
stringResource(R.string.screen_room_timeline_reaction_you_a11y, reaction)
} else {
pluralStringResource(
R.plurals.screen_room_timeline_reaction_including_you_a11y,
reactionCount - 1,
reactionCount - 1,
reaction,
)
}
} else {
pluralStringResource(
R.plurals.screen_room_timeline_reaction_a11y,
reactionCount,
reactionCount,
reaction,
)
}
}

View File

@@ -28,7 +28,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.contentDescription
@@ -40,6 +39,7 @@ import coil3.compose.AsyncImage
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.messages.impl.R
import io.element.android.features.messages.impl.timeline.a11y.a11yReactionAction
import io.element.android.features.messages.impl.timeline.a11y.a11yReactionDetails
import io.element.android.features.messages.impl.timeline.model.AggregatedReaction
import io.element.android.features.messages.impl.timeline.model.AggregatedReactionProvider
import io.element.android.features.messages.impl.timeline.model.aTimelineItemReactions
@@ -52,7 +52,6 @@ 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
@@ -78,30 +77,11 @@ fun MessagesReactionButton(
is MessagesReactionsButtonContent.Icon -> stringResource(id = R.string.screen_room_timeline_add_reaction)
is MessagesReactionsButtonContent.Text -> content.text
is MessagesReactionsButtonContent.Reaction -> {
val reaction = if (content.reaction.key.startsWith("mxc://")) {
stringResource(CommonStrings.common_an_image)
} else {
content.reaction.key
}
if (content.isHighlighted) {
if (content.reaction.count == 1) {
stringResource(R.string.screen_room_timeline_reaction_you_a11y, reaction)
} else {
pluralStringResource(
R.plurals.screen_room_timeline_reaction_including_you_a11y,
content.reaction.count - 1,
content.reaction.count - 1,
reaction,
)
}
} else {
pluralStringResource(
R.plurals.screen_room_timeline_reaction_a11y,
content.reaction.count,
content.reaction.count,
reaction,
)
}
a11yReactionDetails(
emoji = content.reaction.key,
userAlreadyReacted = content.isHighlighted,
reactionCount = content.reaction.count,
)
}
}