From 0e87595692a10b87252737bcddbe107c773cf6c1 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 11 Jan 2025 19:23:48 +0800 Subject: [PATCH] Fix gallery comment style by not reusing Spans --- .../ui/screen/GalleryCommentsScreen.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt index e214cfce7..41c2804ea 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt @@ -3,10 +3,12 @@ package com.hippo.ehviewer.ui.screen import android.graphics.Typeface import android.text.Html import android.text.Spannable +import android.text.SpannableStringBuilder import android.text.style.ForegroundColorSpan import android.text.style.RelativeSizeSpan import android.text.style.StyleSpan import android.text.style.URLSpan +import androidx.annotation.ColorInt import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.Crossfade import androidx.compose.foundation.layout.Arrangement @@ -116,6 +118,16 @@ import moe.tarsin.coroutines.runSuspendCatching private val URL_PATTERN = Regex("(http|https)://[a-z0-9A-Z%-]+(\\.[a-z0-9A-Z%-]+)+(:\\d{1,5})?(/[a-zA-Z0-9-_~:#@!&',;=%/*.?+$\\[\\]()]+)?/?") +private inline fun SpannableStringBuilder.withSpans( + @ColorInt color: Int, + builderAction: SpannableStringBuilder.() -> Unit, +) = inSpans( + RelativeSizeSpan(0.8f), + StyleSpan(Typeface.BOLD), + ForegroundColorSpan(color), + builderAction = builderAction, +) + @Composable fun processComment( comment: GalleryComment, @@ -131,22 +143,17 @@ fun processComment( } } val color = MaterialTheme.colorScheme.onSurfaceVariant.toArgb() - val spans = arrayOf( - RelativeSizeSpan(0.8f), - StyleSpan(Typeface.BOLD), - ForegroundColorSpan(color), - ) if (comment.id != 0L && comment.score != 0) { val score = comment.score val scoreString = if (score > 0) "+$score" else score.toString() append(" ") - inSpans(*spans) { + withSpans(color) { append(scoreString) } } if (comment.lastEdited != 0L) { append("\n\n") - inSpans(*spans) { + withSpans(color) { append( stringResource( R.string.last_edited,