Skip to content

Commit cfb0010

Browse files
authored
Merge pull request #310 from wordpress-mobile/issue/improve-text-watcher
Don't disable text-change listener in image text watcher
2 parents 0afa454 + b26d3da commit cfb0010

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package org.wordpress.aztec.spans
2+
3+
class FullWidthImageProcessingMarker

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package org.wordpress.aztec.watchers
22

33
import android.text.Editable
4+
import android.text.Spanned
45
import android.text.TextWatcher
56
import org.wordpress.aztec.AztecText
67
import org.wordpress.aztec.Constants
78
import org.wordpress.aztec.spans.AztecFullWidthImageSpan
9+
import org.wordpress.aztec.spans.FullWidthImageProcessingMarker
10+
import java.lang.ref.WeakReference
811

9-
class FullWidthImageElementWatcher(val aztecText: AztecText) : TextWatcher {
12+
class FullWidthImageElementWatcher(aztecText: AztecText) : TextWatcher {
13+
14+
private val aztecTextRef: WeakReference<AztecText?> = WeakReference(aztecText)
1015

1116
private var deletedNewline: Boolean = false
1217
private var changeCount: Int = 0
@@ -26,11 +31,14 @@ class FullWidthImageElementWatcher(val aztecText: AztecText) : TextWatcher {
2631
}
2732

2833
private fun insertVisualNewline(position: Int) {
29-
aztecText.text.insert(position, Constants.NEWLINE_STRING)
34+
aztecTextRef.get()?.text?.insert(position, Constants.NEWLINE_STRING)
3035
}
3136

3237
private fun normalizeEditingAroundImageSpans(count: Int, start: Int) {
33-
if (!aztecText.isTextChangedListenerDisabled()) {
38+
val aztecText = aztecTextRef.get()
39+
if (aztecText != null && !aztecText.isTextChangedListenerDisabled() &&
40+
aztecText.text.getSpans(0, 0, FullWidthImageProcessingMarker::class.java).isEmpty()) {
41+
3442
val end = start + count
3543
var lines = aztecText.text.getSpans(start, start, AztecFullWidthImageSpan::class.java)
3644
lines += aztecText.text.getSpans(end, end, AztecFullWidthImageSpan::class.java)
@@ -41,7 +49,8 @@ class FullWidthImageElementWatcher(val aztecText: AztecText) : TextWatcher {
4149
val changedLineEnd = aztecText.text.getSpanEnd(it) == start && start < aztecText.length() &&
4250
aztecText.text[start] != Constants.NEWLINE
4351

44-
aztecText.disableTextChangedListener()
52+
val marker = FullWidthImageProcessingMarker()
53+
aztecText.text.setSpan(marker, 0, 0, Spanned.SPAN_MARK_MARK)
4554

4655
if (changedLineBeginning) {
4756
// if characters added, insert a newline before the line
@@ -70,7 +79,7 @@ class FullWidthImageElementWatcher(val aztecText: AztecText) : TextWatcher {
7079
}
7180
}
7281

73-
aztecText.enableTextChangedListener()
82+
aztecText.text.removeSpan(marker)
7483
}
7584
}
7685
}

0 commit comments

Comments
 (0)