Use new LinkMovementMethod()

This commit is contained in:
LooKeR 2022-02-25 11:04:41 +05:30
parent ca125d1f79
commit e1e1916126
2 changed files with 2 additions and 69 deletions

View File

@ -15,6 +15,7 @@ import android.net.Uri
import android.os.Parcel
import android.text.SpannableStringBuilder
import android.text.format.DateFormat
import android.text.method.LinkMovementMethod
import android.text.style.*
import android.text.util.Linkify
import android.view.Gravity
@ -60,7 +61,6 @@ import com.looker.droidify.utility.extension.text.formatSize
import com.looker.droidify.utility.extension.text.nullIfEmpty
import com.looker.droidify.utility.extension.text.trimAfter
import com.looker.droidify.utility.extension.text.trimBefore
import com.looker.droidify.widget.ClickableMovementMethod
import com.looker.droidify.widget.StableRecyclerAdapter
import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor
import org.intellij.markdown.html.HtmlGenerator
@ -419,7 +419,7 @@ class AppDetailAdapter(private val callbacks: Callbacks) :
itemView as MaterialTextView
itemView.setTextSizeScaled(15)
itemView.resources.sizeScaled(16).let { itemView.setPadding(it, it, it, it) }
itemView.movementMethod = ClickableMovementMethod
itemView.movementMethod = LinkMovementMethod()
itemView.layoutParams = RecyclerView.LayoutParams(
RecyclerView.LayoutParams.MATCH_PARENT,
RecyclerView.LayoutParams.WRAP_CONTENT

View File

@ -1,67 +0,0 @@
package com.looker.droidify.widget
import android.text.Selection
import android.text.Spannable
import android.text.method.MovementMethod
import android.text.style.ClickableSpan
import android.view.KeyEvent
import android.view.MotionEvent
import android.widget.TextView
object ClickableMovementMethod : MovementMethod {
override fun initialize(widget: TextView, text: Spannable) {
Selection.removeSelection(text)
}
override fun onTouchEvent(widget: TextView, text: Spannable, event: MotionEvent): Boolean {
val action = event.action
val down = action == MotionEvent.ACTION_DOWN
val up = action == MotionEvent.ACTION_UP
return (down || up) && run {
val x = event.x.toInt() - widget.totalPaddingLeft + widget.scrollX
val y = event.y.toInt() - widget.totalPaddingTop + widget.scrollY
val layout = widget.layout
val line = layout.getLineForVertical(y)
val offset = layout.getOffsetForHorizontal(line, x.toFloat())
val span = text.getSpans(offset, offset, ClickableSpan::class.java)?.firstOrNull()
if (span != null) {
if (down) {
Selection.setSelection(text, text.getSpanStart(span), text.getSpanEnd(span))
} else {
span.onClick(widget)
}
true
} else {
Selection.removeSelection(text)
false
}
}
}
override fun onKeyDown(
widget: TextView,
text: Spannable,
keyCode: Int,
event: KeyEvent,
): Boolean = false
override fun onKeyUp(
widget: TextView,
text: Spannable,
keyCode: Int,
event: KeyEvent,
): Boolean = false
override fun onKeyOther(view: TextView, text: Spannable, event: KeyEvent): Boolean = false
override fun onTakeFocus(widget: TextView, text: Spannable, direction: Int) = Unit
override fun onTrackballEvent(widget: TextView, text: Spannable, event: MotionEvent): Boolean =
false
override fun onGenericMotionEvent(
widget: TextView,
text: Spannable,
event: MotionEvent,
): Boolean = false
override fun canSelectArbitrarily(): Boolean = false
}