@@ -9,14 +9,23 @@ import android.widget.TextView
9
9
import org.wordpress.aztec.spans.AztecMediaClickableSpan
10
10
import org.wordpress.aztec.spans.AztecURLSpan
11
11
import org.wordpress.aztec.spans.UnknownClickableSpan
12
+ import java.lang.ref.WeakReference
12
13
13
14
/* *
14
15
* http://stackoverflow.com/a/23566268/569430
15
16
*/
16
17
object EnhancedMovementMethod : ArrowKeyMovementMethod() {
17
- var taskListClickHandler: TaskListClickHandler ? = null
18
+ private var taskListClickHandlerRef: WeakReference <TaskListClickHandler ?> = WeakReference (null )
19
+ private var linkTappedListenerRef: WeakReference <AztecText .OnLinkTappedListener ?> = WeakReference (null )
18
20
var isLinkTapEnabled = false
19
- var linkTappedListener: AztecText .OnLinkTappedListener ? = null
21
+
22
+ fun setTaskListClickHandler (handler : TaskListClickHandler ? ) {
23
+ taskListClickHandlerRef = WeakReference (handler)
24
+ }
25
+
26
+ fun setLinkTappedListener (listener : AztecText .OnLinkTappedListener ? ) {
27
+ linkTappedListenerRef = WeakReference (listener)
28
+ }
20
29
21
30
override fun onTouchEvent (widget : TextView , text : Spannable , event : MotionEvent ): Boolean {
22
31
val action = event.action
@@ -38,7 +47,9 @@ object EnhancedMovementMethod : ArrowKeyMovementMethod() {
38
47
val off = layout.getOffsetForHorizontal(line, x.toFloat())
39
48
40
49
// This handles the case when the task list checkbox is clicked
41
- if (taskListClickHandler?.handleTaskListClick(text, off, x, widget.totalPaddingStart) == true ) return true
50
+ if (taskListClickHandlerRef.get()?.handleTaskListClick(text, off, x, widget.totalPaddingStart) == true ){
51
+ return true
52
+ }
42
53
43
54
// get the character's position. This may be the left or the right edge of the character so, find the
44
55
// other edge by inspecting nearby characters (if they exist)
@@ -85,7 +96,7 @@ object EnhancedMovementMethod : ArrowKeyMovementMethod() {
85
96
link.onClick(widget)
86
97
return true
87
98
} else if (link is AztecURLSpan && isLinkTapEnabled) {
88
- linkTappedListener ?.onLinkTapped(widget, link.url) ? : link.onClick(widget)
99
+ linkTappedListenerRef.get() ?.onLinkTapped(widget, link.url) ? : link.onClick(widget)
89
100
return true
90
101
}
91
102
}
0 commit comments