diff --git a/android/src/main/java/com/swmansion/reactnativerichtexteditor/ReactNativeRichTextEditorView.kt b/android/src/main/java/com/swmansion/reactnativerichtexteditor/ReactNativeRichTextEditorView.kt index c4563fe8f..d844725f2 100644 --- a/android/src/main/java/com/swmansion/reactnativerichtexteditor/ReactNativeRichTextEditorView.kt +++ b/android/src/main/java/com/swmansion/reactnativerichtexteditor/ReactNativeRichTextEditorView.kt @@ -51,6 +51,7 @@ class ReactNativeRichTextEditorView : AppCompatEditText { val listStyles: ListStyles? = ListStyles(this) val parametrizedStyles: ParametrizedStyles? = ParametrizedStyles(this) var isSettingValue: Boolean = false + var isRemovingMany: Boolean = false val mentionHandler: MentionHandler? = MentionHandler(this) var richTextStyle: RichTextStyle = RichTextStyle(this, null) diff --git a/android/src/main/java/com/swmansion/reactnativerichtexteditor/utils/EditorSelection.kt b/android/src/main/java/com/swmansion/reactnativerichtexteditor/utils/EditorSelection.kt index 84d2b97af..7fa9f6467 100644 --- a/android/src/main/java/com/swmansion/reactnativerichtexteditor/utils/EditorSelection.kt +++ b/android/src/main/java/com/swmansion/reactnativerichtexteditor/utils/EditorSelection.kt @@ -35,7 +35,7 @@ class EditorSelection(private val editorView: ReactNativeRichTextEditorView) { if (isZeroWidthSelection() && !editorView.isSettingValue) { editorView.setSelection(start + 1) - return + shouldValidateStyles = false } if (!shouldValidateStyles) return @@ -62,8 +62,15 @@ class EditorSelection(private val editorView: ReactNativeRichTextEditorView) { fun validateStyles() { val state = editorView.spanState ?: return - for ((style, config) in EditorSpans.inlineSpans) { - state.setStart(style, getInlineStyleStart(config.clazz)) + // We don't validate inline styles when removing many characters at once + // We don't want to remove styles on auto-correction + // If user removes many characters at once, we want to keep the styles config + if (!editorView.isRemovingMany) { + for ((style, config) in EditorSpans.inlineSpans) { + state.setStart(style, getInlineStyleStart(config.clazz)) + } + } else { + editorView.isRemovingMany = false } for ((style, config) in EditorSpans.paragraphSpans) { diff --git a/android/src/main/java/com/swmansion/reactnativerichtexteditor/watchers/EditorTextWatcher.kt b/android/src/main/java/com/swmansion/reactnativerichtexteditor/watchers/EditorTextWatcher.kt index 65b0fd354..e13ec89e5 100644 --- a/android/src/main/java/com/swmansion/reactnativerichtexteditor/watchers/EditorTextWatcher.kt +++ b/android/src/main/java/com/swmansion/reactnativerichtexteditor/watchers/EditorTextWatcher.kt @@ -18,6 +18,7 @@ class EditorTextWatcher(private val editorView: ReactNativeRichTextEditorView) : override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { endCursorPosition = start + count editorView.layoutManager.measureSize(s ?: "") + editorView.isRemovingMany = !editorView.isSettingValue && before > count + 1 } override fun afterTextChanged(s: Editable?) {