From 7e80ed2af91554843f3c84b8a151b53f990e8e50 Mon Sep 17 00:00:00 2001 From: davotoula Date: Sun, 14 Sep 2025 11:40:20 +0200 Subject: [PATCH] Fix for images are mixed with text in a single paragraph nevent1qqs04pmdf8guxpyhjuvpeg72ccwuzje7vhlm09szxl2d8x28cse5fzgpz9mhxue69uhkummnw3ezuamfdejj7q3qwl89d7yazg500lehg08p45dj2jzhhyqg2erj067458e3wd30djnsxpqqqqqqzmdjgxd --- .../amethyst/ui/components/RichTextViewer.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt index b78ff0b43..a67be1828 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt @@ -360,6 +360,8 @@ private fun renderParagraphWithFlowRow( // Check if this paragraph contains only images (ignoring whitespace) val isImageOnlyParagraph = isImageOnlyParagraph(paragraph) + // Check if this paragraph contains multiple images (mixed with text is ok) + val hasMultipleImages = hasMultipleImages(paragraph) if (isImageOnlyParagraph && paragraph.words.isNotEmpty()) { // Collect consecutive image-only paragraphs for gallery @@ -378,6 +380,13 @@ private fun renderParagraphWithFlowRow( } return endIndex // Return next index to process + } else if (hasMultipleImages && paragraph.words.isNotEmpty()) { + // Mixed paragraph with multiple images - use RenderWordsWithImageGallery for smart grouping + RenderWordsWithImageGallery( + paragraph.words.toImmutableList(), + context, + ) + return paragraphIndex + 1 // Return next index to process } else { // Non-image paragraph - render normally with FlowRow RenderSingleParagraphWithFlowRow(paragraph, paragraph.words.toImmutableList(), spaceWidth, context) @@ -427,6 +436,15 @@ private fun isImageOnlyParagraph(paragraph: ParagraphState): Boolean { } } +private fun hasMultipleImages(paragraph: ParagraphState): Boolean { + // Count the number of image segments in the paragraph + val imageCount = + paragraph.words.count { word -> + word is ImageSegment || word is Base64Segment + } + return imageCount > 1 +} + private fun collectConsecutiveImageParagraphs( paragraphs: ImmutableList, startIndex: Int,