diff --git a/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt b/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt index 8e3efc2078..41b669b824 100644 --- a/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt +++ b/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt @@ -247,6 +247,8 @@ class BiliBiliPackage constructor(private val mClassLoader: ClassLoader, mContex fun comment3Copy() = mHookInfo.comment3Copy.method.orNull + fun comment3ViewIndex() = mHookInfo.comment3Copy.comment3ViewIndex + fun responseDataField() = runCatchingOrNull { rxGeneralResponseClass?.getDeclaredField("data")?.name } ?: "_data" @@ -1309,7 +1311,7 @@ class BiliBiliPackage constructor(private val mClassLoader: ClassLoader, mContex setExpandLinesIndex, -1, 1, - "VL", + null, -1, null, null, @@ -1458,42 +1460,18 @@ class BiliBiliPackage constructor(private val mClassLoader: ClassLoader, mContex } } comment3Copy = comment3Copy { - val clipBoardCopyMethod = - "com.bilibili.droid.ClipboardHelper".from(classloader) - ?.getDeclaredMethod("copy", Context::class.java, String::class.java)?.let { - dexHelper.encodeMethodIndex(it) - } ?: return@comment3Copy - val commentExtensionsKtClass = - "com.bilibili.app.comment3.utils.CommentExtensionsKt".from(classloader)?.let { - dexHelper.encodeClassIndex(it) - } ?: return@comment3Copy - dexHelper.findMethodInvoked( - clipBoardCopyMethod, - -1, - 2, - "ZLL", - commentExtensionsKtClass, - null, - null, - null, - true - ).firstOrNull()?.let { - dexHelper.findMethodInvoked( - it, - -1, - 3, - "ZLLL", - -1, - null, - null, - null, - true - ).firstOrNull()?.let { - dexHelper.decodeMethodIndex(it) + classesList.filter { + it.startsWith("com.bilibili.app.comment3.ui.holder.handle.CommentContentRichTextHandler") + }.map { it.on(classloader) }.flatMap { c -> + c.declaredMethods.filter { + (it.isPrivate && it.parameterCount == 6 && it.parameterTypes[5] == View::class.java) || + (it.isPrivate && it.parameterCount == 3 && it.parameterTypes[2] == View::class.java) } - }?.let { + }.firstOrNull()?.let { + Log.d(it.declaringClass.name + it.name) class_ = class_ { name = it.declaringClass.name } method = method { name = it.name } + comment3ViewIndex = it.parameterCount - 1 } } dexHelper.findMethodUsingString( diff --git a/app/src/main/java/me/iacn/biliroaming/hook/CopyHook.kt b/app/src/main/java/me/iacn/biliroaming/hook/CopyHook.kt index ea224dc438..7ca1808aa6 100644 --- a/app/src/main/java/me/iacn/biliroaming/hook/CopyHook.kt +++ b/app/src/main/java/me/iacn/biliroaming/hook/CopyHook.kt @@ -88,14 +88,15 @@ class CopyHook(classLoader: ClassLoader) : BaseHook(classLoader) { instance.comment3CopyClass?.let { c -> instance.comment3Copy()?.let { m -> - c.replaceAllMethods(m) { param -> - if (!enhanceLongClickCopy) return@replaceAllMethods true - - val view = param.args[2] as View - view.getFirstFieldByExactTypeOrNull()?.also { text -> - showCopyDialog(view.context, text, param) + instance.comment3ViewIndex().let { i -> + c.replaceAllMethods(m) { param -> + if (!enhanceLongClickCopy) return@replaceAllMethods true + val view = param.args[i] as View + view.getFirstFieldByExactTypeOrNull()?.also { text -> + showCopyDialog(view.context, text, param) + } + return@replaceAllMethods true } - return@replaceAllMethods true } } } diff --git a/app/src/main/proto/me/iacn/biliroaming/configs.proto b/app/src/main/proto/me/iacn/biliroaming/configs.proto index 715d9754cb..4eb116f734 100644 --- a/app/src/main/proto/me/iacn/biliroaming/configs.proto +++ b/app/src/main/proto/me/iacn/biliroaming/configs.proto @@ -251,6 +251,7 @@ message CardClickProcessor { message Comment3Copy { optional Class class = 1; optional Method method = 2; + optional int32 comment3ViewIndex = 3; } message HookInfo {