Skip to content

Commit eb9f683

Browse files
author
Gerardo
committed
Add uninstall method to EndOfBufferMarkerAdder
1 parent 8bd5798 commit eb9f683

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

aztec/src/main/kotlin/org/wordpress/aztec/AztecText.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
310310

311311
var observationQueue: ObservationQueue = ObservationQueue(this)
312312
var textWatcherEventBuilder: TextWatcherEvent.Builder = TextWatcherEvent.Builder()
313+
var endOfBufferMarkerAdderWatcher: EndOfBufferMarkerAdder? = null
313314

314315
private var accessibilityDelegate = AztecTextAccessibilityDelegate(this)
315316

@@ -640,6 +641,10 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
640641
}
641642
}
642643

644+
fun removeEndOfBufferMarkerAdder() {
645+
endOfBufferMarkerAdderWatcher?.uninstallEndOfBuffer(this)
646+
}
647+
643648
private fun <T> selectionHasExactlyOneMarker(start: Int, end: Int, type: Class<T>): Boolean {
644649
val spanFound: Array<T> = editableText.getSpans(
645650
start,
@@ -891,7 +896,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
891896

892897
FullWidthImageElementWatcher.install(this)
893898

894-
EndOfBufferMarkerAdder.install(this)
899+
endOfBufferMarkerAdderWatcher = EndOfBufferMarkerAdder.install(this)
895900
ZeroIndexContentWatcher.install(this)
896901

897902
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {

aztec/src/main/kotlin/org/wordpress/aztec/watchers/EndOfBufferMarkerAdder.kt

+21-7
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ class EndOfBufferMarkerAdder(text: Editable) : TextWatcher {
1818
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
1919

2020
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
21-
// count < before to take into account auto-corrected words
22-
deletedText = before > 0 && count < before
21+
deletedText = before > 0
2322
}
2423

2524
override fun afterTextChanged(text: Editable) {
@@ -32,9 +31,26 @@ class EndOfBufferMarkerAdder(text: Editable) : TextWatcher {
3231
// by the way, the cursor will be adjusted "automatically" by RichTextEditText's onSelectionChanged to before the marker
3332
}
3433

34+
fun uninstallEndOfBuffer(aztecText: AztecText) {
35+
uninstall(aztecText)
36+
}
37+
3538
companion object {
36-
fun install(editText: AztecText) {
37-
editText.addTextChangedListener(EndOfBufferMarkerAdder(editText.text))
39+
private val watchers = mutableMapOf<AztecText, EndOfBufferMarkerAdder>()
40+
41+
fun install(editText: AztecText): EndOfBufferMarkerAdder {
42+
var watcher = EndOfBufferMarkerAdder(editText.text)
43+
editText.addTextChangedListener(watcher)
44+
watchers[editText] = watcher
45+
return watcher
46+
}
47+
48+
fun uninstall(editText: AztecText) {
49+
val watcher = watchers[editText]
50+
if (watcher != null) {
51+
editText.removeTextChangedListener(watcher)
52+
watchers.remove(editText)
53+
}
3854
}
3955

4056
fun ensureEndOfTextMarker(text: Editable, deletedText: Boolean = false): Editable {
@@ -45,9 +61,7 @@ class EndOfBufferMarkerAdder(text: Editable) : TextWatcher {
4561
if (text.isEmpty()) {
4662
if (text.getSpans(0, 0, IAztecBlockSpan::class.java).isNotEmpty()) {
4763
// need to add a end-of-text marker so a block element can render in the empty text.
48-
if (!deletedText) {
49-
text.append(Constants.END_OF_BUFFER_MARKER)
50-
}
64+
text.append(Constants.END_OF_BUFFER_MARKER)
5165
}
5266
return text
5367
} else if (text.length == 1 && text[0] == Constants.END_OF_BUFFER_MARKER && deletedText) {

0 commit comments

Comments
 (0)