From 671def23b85564f78f830c146d875c981956f127 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Fri, 23 Aug 2024 14:46:19 +0100 Subject: [PATCH] Big emoji-only messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adapted from SpiritCroc's SchildNext implementation from https://github.com/SchildiChat/schildichat-android-next/commit/7eba87f02e884b9b921aa4e74dd0a737e4da31ad Fixes: https://github.com/element-hq/element-x-android/issues/1438 Signed-off-by: Tobias BΓΌttner Signed-off-by: Joe Groocock --- features/messages/impl/build.gradle.kts | 1 + .../components/event/TimelineItemTextView.kt | 9 +++- .../event/TimelineItemEventContentProvider.kt | 1 + .../features/messages/impl/utils/Emoji.kt | 44 ++++++++++++++++++ .../features/messages/impl/utils/EmojiTest.kt | 45 +++++++++++++++++++ gradle/libs.versions.toml | 1 + ...s.impl.timeline_TimelineView_Day_17_en.png | 3 ++ ...impl.timeline_TimelineView_Night_17_en.png | 3 ++ 8 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/Emoji.kt create mode 100644 features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/utils/EmojiTest.kt create mode 100644 tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_17_en.png create mode 100644 tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_17_en.png 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