mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-15 23:00:31 +05:30
45 lines
1.6 KiB
Kotlin
45 lines
1.6 KiB
Kotlin
|
package com.github.libretube.util
|
||
|
|
||
|
import android.text.Editable
|
||
|
import android.text.Spanned
|
||
|
import android.text.TextPaint
|
||
|
import android.text.style.ClickableSpan
|
||
|
import android.util.Log
|
||
|
import android.view.View
|
||
|
import com.github.libretube.util.HtmlParser.Companion.getValue
|
||
|
import org.xml.sax.Attributes
|
||
|
|
||
|
class LinkHandler(private val clickCallback: ((String) -> Unit)?) : HtmlParser.TagHandler {
|
||
|
private var linkTagStartIndex = -1
|
||
|
private var link: String? = null
|
||
|
override fun handleTag(opening: Boolean, tag: String?, output: Editable?, attributes: Attributes?): Boolean {
|
||
|
if (output != null) {
|
||
|
if ("a" == tag) {
|
||
|
if (opening && attributes != null) {
|
||
|
linkTagStartIndex = output.length
|
||
|
link = getValue(attributes, "href")
|
||
|
} else {
|
||
|
val refTagEndIndex = output.length
|
||
|
setLinkSpans(output, linkTagStartIndex, refTagEndIndex, link)
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
private fun setLinkSpans(output: Editable, start: Int, end: Int, link: String?) {
|
||
|
output.setSpan(object : ClickableSpan() {
|
||
|
override fun onClick(widget: View) {
|
||
|
if (clickCallback != null && link != null) {
|
||
|
clickCallback.invoke(link)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
override fun updateDrawState(ds: TextPaint) {
|
||
|
super.updateDrawState(ds)
|
||
|
ds.isUnderlineText = false
|
||
|
}
|
||
|
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||
|
}
|
||
|
}
|