From dab6e3ddadfd0d043d7e4467a994aeadbd8608ef Mon Sep 17 00:00:00 2001 From: IvanIhnatsiuk Date: Mon, 20 Jul 2026 14:27:54 +0200 Subject: [PATCH] fix: non editable paragraphs insertion --- .../inputFilters/NonEditableParagraphFilter.kt | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/inputFilters/NonEditableParagraphFilter.kt b/android/src/main/java/com/swmansion/enriched/inputFilters/NonEditableParagraphFilter.kt index 626c822ee..07bcf6bd7 100644 --- a/android/src/main/java/com/swmansion/enriched/inputFilters/NonEditableParagraphFilter.kt +++ b/android/src/main/java/com/swmansion/enriched/inputFilters/NonEditableParagraphFilter.kt @@ -1,6 +1,7 @@ package com.swmansion.enriched.inputFilters import android.text.InputFilter +import android.text.SpannableStringBuilder import android.text.Spanned import com.swmansion.enriched.constants.Strings import com.swmansion.enriched.spans.interfaces.EnrichedNonEditableParagraphSpan @@ -33,7 +34,7 @@ class NonEditableParagraphFilter : InputFilter { val spanEnd = dest.getSpanEnd(replacingSpans.first()) if (spanEnd == dstart) { - return Strings.NEWLINE_STRING + source + return prependNewlineIfMissing(source, start, end) } } @@ -44,7 +45,7 @@ class NonEditableParagraphFilter : InputFilter { if (dstart == dend) { val spanBeforeCursor = getNonEditableSpanBeforeCursor(dest, dstart) if (spanBeforeCursor != null && dest.getSpanEnd(spanBeforeCursor) == dstart) { - return Strings.NEWLINE_STRING + source + return prependNewlineIfMissing(source, start, end) } } @@ -77,6 +78,19 @@ class NonEditableParagraphFilter : InputFilter { return null } + private fun prependNewlineIfMissing( + source: CharSequence, + start: Int, + end: Int, + ): CharSequence? { + if (start >= end || source[start] == Strings.NEWLINE) { + return null + } + + return SpannableStringBuilder(Strings.NEWLINE_STRING) + .append(source, start, end) + } + private fun getNonEditableSpanBeforeCursor( dest: Spanned, cursorPosition: Int,