Fix emoji sizing on call reaction bar.

This commit is contained in:
Alex Hart
2025-11-26 16:13:51 -04:00
committed by jeffrey-signal
parent 54fb7ff23f
commit 61be2b92ba
2 changed files with 63 additions and 19 deletions

View File

@@ -6,10 +6,15 @@
package org.thoughtcrime.securesms.components.emoji
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.text.InlineTextContent
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.text.AnnotatedString
@@ -70,6 +75,27 @@ fun Emojifier(
content(annotatedString, candidateMap)
}
@Composable
fun EmojiImage(
emoji: String,
modifier: Modifier
) {
if (LocalInspectionMode.current) {
Box(modifier.background(color = Color.Red, shape = CircleShape))
return
}
val context = LocalContext.current
val drawable = remember(emoji) { EmojiProvider.getEmojiDrawable(context, emoji) }
val painter = rememberDrawablePainter(drawable)
Image(
painter = painter,
contentDescription = emoji,
modifier = modifier
)
}
@Composable
@DayNightPreviews
private fun EmojifierPreview() {

View File

@@ -9,9 +9,10 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement.spacedBy
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -29,7 +30,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
@@ -39,7 +39,7 @@ import org.signal.core.ui.compose.TriggerAlignedPopup
import org.signal.core.ui.compose.TriggerAlignedPopupState
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.emoji.Emojifier
import org.thoughtcrime.securesms.components.emoji.EmojiImage
data class AdditionalActionsState(
val triggerAlignedPopupState: TriggerAlignedPopupState,
@@ -96,28 +96,22 @@ private fun CallReactionScrubber(
) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = spacedBy(12.dp),
modifier = Modifier
.fillMaxWidth()
.background(SignalTheme.colors.colorSurface2, RoundedCornerShape(percent = 50))
.padding(start = 6.dp, top = 12.dp, bottom = 12.dp, end = 12.dp)
.padding(12.dp)
) {
reactions.forEach {
Emojifier(it) { annotatedText, inlineContent ->
Text(
text = annotatedText,
inlineContent = inlineContent,
style = MaterialTheme.typography.headlineLarge,
textAlign = TextAlign.Center,
EmojiImage(
emoji = it,
modifier = Modifier
.width(44.dp)
.size(32.dp)
.clickable(onClick = {
listener.onReactClick(it)
})
)
}
}
Spacer(modifier = Modifier.width(6.dp))
IconButton(
onClick = listener::onReactWithAnyClick,
@@ -177,6 +171,30 @@ private fun CallScreenMenuOption(
}
}
@NightPreview
@Composable
private fun ReactionsScrubberPreview() {
Previews.Preview {
Box(
modifier = Modifier
.width(IntrinsicSize.Min)
.padding(12.dp)
) {
CallReactionScrubber(
reactions = persistentListOf(
"\u2764\ufe0f",
"\ud83d\udc4d",
"\ud83d\udc4e",
"\ud83d\ude02",
"\ud83d\ude2e",
"\ud83d\ude22"
),
listener = AdditionalActionsListener.Empty
)
}
}
}
@NightPreview
@Composable
private fun CallScreenAdditionalActionsPopupPreview() {