Skip to content

Commit 3c95e7b

Browse files
authored
Merge pull request #1086 from wordpress-mobile/issue/fix-memory-leak-in-enhanced-movement-method
Fix memory leak in EnhancedMovementMethod
2 parents 320e42f + 233823e commit 3c95e7b

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
954954
if (blockEditorDialog != null && blockEditorDialog!!.isShowing) {
955955
blockEditorDialog!!.dismiss()
956956
}
957+
EnhancedMovementMethod.setLinkTappedListener(null)
957958
}
958959

959960
// We are exposing this method in order to allow subclasses to set their own alpha value
@@ -1178,7 +1179,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
11781179
}
11791180

11801181
fun setOnLinkTappedListener(listener: OnLinkTappedListener) {
1181-
EnhancedMovementMethod.linkTappedListener = listener
1182+
EnhancedMovementMethod.setLinkTappedListener(listener)
11821183
}
11831184

11841185
fun setLinkTapEnabled(isLinkTapEnabled: Boolean) {

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,19 @@ import android.widget.TextView
99
import org.wordpress.aztec.spans.AztecMediaClickableSpan
1010
import org.wordpress.aztec.spans.AztecURLSpan
1111
import org.wordpress.aztec.spans.UnknownClickableSpan
12+
import java.lang.ref.WeakReference
1213

1314
/**
1415
* http://stackoverflow.com/a/23566268/569430
1516
*/
1617
object EnhancedMovementMethod : ArrowKeyMovementMethod() {
1718
var taskListClickHandler: TaskListClickHandler? = null
19+
private var linkTappedListenerRef: WeakReference<AztecText.OnLinkTappedListener?> = WeakReference(null)
1820
var isLinkTapEnabled = false
19-
var linkTappedListener: AztecText.OnLinkTappedListener? = null
21+
22+
fun setLinkTappedListener(listener: AztecText.OnLinkTappedListener?) {
23+
linkTappedListenerRef = WeakReference(listener)
24+
}
2025

2126
override fun onTouchEvent(widget: TextView, text: Spannable, event: MotionEvent): Boolean {
2227
val action = event.action
@@ -38,7 +43,9 @@ object EnhancedMovementMethod : ArrowKeyMovementMethod() {
3843
val off = layout.getOffsetForHorizontal(line, x.toFloat())
3944

4045
// This handles the case when the task list checkbox is clicked
41-
if (taskListClickHandler?.handleTaskListClick(text, off, x, widget.totalPaddingStart) == true) return true
46+
if (taskListClickHandler?.handleTaskListClick(text, off, x, widget.totalPaddingStart) == true) {
47+
return true
48+
}
4249

4350
// get the character's position. This may be the left or the right edge of the character so, find the
4451
// other edge by inspecting nearby characters (if they exist)
@@ -85,7 +92,7 @@ object EnhancedMovementMethod : ArrowKeyMovementMethod() {
8592
link.onClick(widget)
8693
return true
8794
} else if (link is AztecURLSpan && isLinkTapEnabled) {
88-
linkTappedListener?.onLinkTapped(widget, link.url) ?: link.onClick(widget)
95+
linkTappedListenerRef.get()?.onLinkTapped(widget, link.url) ?: link.onClick(widget)
8996
return true
9097
}
9198
}

0 commit comments

Comments
 (0)