diff --git a/features/messages/impl/build.gradle.kts b/features/messages/impl/build.gradle.kts index c1d3067510..7f451a54a5 100644 --- a/features/messages/impl/build.gradle.kts +++ b/features/messages/impl/build.gradle.kts @@ -72,6 +72,7 @@ dependencies { implementation(libs.androidx.constraintlayout.compose) implementation(libs.androidx.media3.exoplayer) implementation(libs.androidx.media3.ui) + implementation(libs.sigpwned.emoji4j) implementation(libs.vanniktech.blurhash) implementation(libs.telephoto.zoomableimage) implementation(libs.matrix.emojibase.bindings) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt index e691c1e549..d6d34418bd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt @@ -35,6 +35,7 @@ import io.element.android.features.messages.impl.timeline.components.layout.Cont import io.element.android.features.messages.impl.timeline.components.layout.ContentAvoidingLayoutData import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContentProvider +import io.element.android.features.messages.impl.utils.containsOnlyEmojis import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.matrix.api.core.UserId @@ -54,9 +55,15 @@ fun TimelineItemTextView( modifier: Modifier = Modifier, onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit = {}, ) { + val emojiOnly = (content.formattedBody == null || content.formattedBody.toString() == content.body) && + content.body.replace(" ", "").containsOnlyEmojis() + val textStyle = when { + emojiOnly -> ElementTheme.typography.fontHeadingXlRegular + else -> ElementTheme.typography.fontBodyLgRegular + } CompositionLocalProvider( LocalContentColor provides ElementTheme.colors.textPrimary, - LocalTextStyle provides ElementTheme.typography.fontBodyLgRegular + LocalTextStyle provides textStyle ) { val body = getTextWithResolvedMentions(content) Box(modifier.semantics { contentDescription = content.plainText }) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContentProvider.kt index 29fa048e1f..3cdfb73510 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContentProvider.kt @@ -42,6 +42,7 @@ class TimelineItemEventContentProvider : PreviewParameterProvider