diff --git a/aztec/src/main/kotlin/org/wordpress/aztec/AztecText.kt b/aztec/src/main/kotlin/org/wordpress/aztec/AztecText.kt index 3ac7ac57e..f6b7bde98 100644 --- a/aztec/src/main/kotlin/org/wordpress/aztec/AztecText.kt +++ b/aztec/src/main/kotlin/org/wordpress/aztec/AztecText.kt @@ -310,6 +310,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown var observationQueue: ObservationQueue = ObservationQueue(this) var textWatcherEventBuilder: TextWatcherEvent.Builder = TextWatcherEvent.Builder() + var endOfBufferMarkerAdderWatcher: EndOfBufferMarkerAdder? = null private var accessibilityDelegate = AztecTextAccessibilityDelegate(this) @@ -640,6 +641,10 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown } } + fun removeEndOfBufferMarkerAdder() { + endOfBufferMarkerAdderWatcher?.uninstallEndOfBuffer(this) + } + private fun selectionHasExactlyOneMarker(start: Int, end: Int, type: Class): Boolean { val spanFound: Array = editableText.getSpans( start, @@ -839,6 +844,10 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown var wasStyleRemoved = false if (event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_DEL) { + if (isInGutenbergMode && (selectionStart == 0 && isTextSelected())) { + return false + } + if (!consumeHistoryEvent) { history.beforeTextChanged(this@AztecText) } @@ -887,7 +896,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown FullWidthImageElementWatcher.install(this) - EndOfBufferMarkerAdder.install(this) + endOfBufferMarkerAdderWatcher = EndOfBufferMarkerAdder.install(this) ZeroIndexContentWatcher.install(this) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { diff --git a/aztec/src/main/kotlin/org/wordpress/aztec/watchers/EndOfBufferMarkerAdder.kt b/aztec/src/main/kotlin/org/wordpress/aztec/watchers/EndOfBufferMarkerAdder.kt index f6d12e1a5..858d14561 100644 --- a/aztec/src/main/kotlin/org/wordpress/aztec/watchers/EndOfBufferMarkerAdder.kt +++ b/aztec/src/main/kotlin/org/wordpress/aztec/watchers/EndOfBufferMarkerAdder.kt @@ -31,9 +31,24 @@ class EndOfBufferMarkerAdder(text: Editable) : TextWatcher { // by the way, the cursor will be adjusted "automatically" by RichTextEditText's onSelectionChanged to before the marker } + fun uninstallEndOfBuffer(aztecText: AztecText) { + uninstall(aztecText) + } + companion object { - fun install(editText: AztecText) { - editText.addTextChangedListener(EndOfBufferMarkerAdder(editText.text)) + private var watcherRef: EndOfBufferMarkerAdder? = null + + fun install(editText: AztecText): EndOfBufferMarkerAdder { + var watcher = EndOfBufferMarkerAdder(editText.text) + editText.addTextChangedListener(watcher) + watcherRef = watcher + return watcher + } + + fun uninstall(editText: AztecText) { + if (watcherRef != null) { + editText.removeTextChangedListener(watcherRef) + } } fun ensureEndOfTextMarker(text: Editable, deletedText: Boolean = false): Editable {