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 }