1 package leakcanary.internal.activity.ui
2 
3 import android.text.SpannableStringBuilder
4 import android.text.style.ClickableSpan
5 import android.text.style.URLSpan
6 import android.view.View
7 
8 internal object UiUtils {
9 
replaceUrlSpanWithActionnull10   internal fun replaceUrlSpanWithAction(
11     title: SpannableStringBuilder,
12     urlAction: (String) -> (() -> Unit)?
13   ) {
14     val urlSpans = title.getSpans(0, title.length, URLSpan::class.java)
15     for (span in urlSpans) {
16       val action: (() -> Unit)? = urlAction(span.url)
17       if (action != null) {
18         val start = title.getSpanStart(span)
19         val end = title.getSpanEnd(span)
20         val flags = title.getSpanFlags(span)
21         title.removeSpan(span)
22         val newSpan = object : ClickableSpan() {
23           override fun onClick(widget: View) {
24             action()
25           }
26         }
27         title.setSpan(newSpan, start, end, flags)
28       }
29     }
30   }
31 }