Files
BiliRoaming/app/src/main/java/me/iacn/biliroaming/hook/CopyCommentHook.kt
T
Zhaohui Huang d5d3e61e30
Android CI / build (push) Has been cancelled
backup repo
2026-07-06 19:09:41 -11:00

50 lines
2.1 KiB
Kotlin

package me.iacn.biliroaming.hook
import android.app.AlertDialog
import android.content.ClipboardManager
import android.content.Context
import android.view.View
import android.widget.TextView
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers
import me.iacn.biliroaming.utils.currentContext
import me.iacn.biliroaming.utils.getResId
import me.iacn.biliroaming.utils.sPrefs
class CopyCommentHook(classLoader: ClassLoader) : BaseHook(classLoader) {
override fun startHook() {
if (!sPrefs.getBoolean("copy_comment", false)) return
XposedHelpers.findAndHookMethod(
"com.bilibili.app.comment3.ui.widget.menu.CommentMoreMenuItemHolder",
mClassLoader,
"y3",
"kotlin.jvm.functions.Function1",
"com.bilibili.app.comment3.data.model.CommentItem\$MenuItem",
"android.view.View", // ConstraintLayout
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam) {
super.afterHookedMethod(param)
val menu = param.args[1]
val view = param.args[2] as View
if (!menu.toString().contains("COPY")) return
val clipboard =
currentContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
// 实在是找不到了。那你就说有没有获取到吧
val txt = clipboard.primaryClip!!.getItemAt(0).text
AlertDialog.Builder(view.context, getResId("AppTheme.Dialog.Alert", "style"))
.run {
setTitle("自由复制内容")
setMessage(txt)
setPositiveButton("完成") { _, _ -> }
setNegativeButton("复制全部") { _, _ -> }
show()
}.apply {
findViewById<TextView>(android.R.id.message).setTextIsSelectable(true)
}
}
})
}
}