diff --git a/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt b/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt index 1edcb5542d..029037b755 100644 --- a/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt +++ b/app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt @@ -22,6 +22,7 @@ import java.lang.reflect.Constructor import java.lang.reflect.Method import java.lang.reflect.Modifier import java.lang.reflect.ParameterizedType +import java.util.Objects import kotlin.math.max import kotlin.system.measureTimeMillis import kotlin.time.ExperimentalTime @@ -97,8 +98,8 @@ class BiliBiliPackage constructor(private val mClassLoader: ClassLoader, mContex val chronosSwitchClass by Weak { mHookInfo.chronosSwitch from mClassLoader } val biliSpaceClass by Weak { "com.bilibili.app.authorspace.api.BiliSpace" from mClassLoader } val biliVideoDetailClass by Weak { - "tv.danmaku.bili.ui.video.api.BiliVideoDetail" from mClassLoader - ?: "tv.danmaku.bili.videopage.data.view.model.BiliVideoDetail" from mClassLoader + ("tv.danmaku.bili.ui.video.api.BiliVideoDetail" from mClassLoader) + ?: ("tv.danmaku.bili.videopage.data.view.model.BiliVideoDetail" from mClassLoader) } val commentSpanTextViewClass by Weak { mHookInfo.commentSpan from mClassLoader } val commentSpanEllipsisTextViewClass by Weak { "com.bilibili.app.comm.comment2.widget.CommentSpanEllipsisTextView" from mClassLoader } @@ -179,6 +180,9 @@ class BiliBiliPackage constructor(private val mClassLoader: ClassLoader, mContex it.name == "executeRelatesFeed" } ?: false + private val unitedVideoActivity by Weak { "com.bilibili.ship.theseus.detail.UnitedBizDetailsActivity" from mClassLoader } + val hasUnitedVideoActivity = !Objects.isNull(unitedVideoActivity) + val ids: Map by lazy { mHookInfo.mapIds.idsMap } diff --git a/app/src/main/java/me/iacn/biliroaming/hook/PegasusHook.kt b/app/src/main/java/me/iacn/biliroaming/hook/PegasusHook.kt index 21b7985f35..fb0ddd9231 100644 --- a/app/src/main/java/me/iacn/biliroaming/hook/PegasusHook.kt +++ b/app/src/main/java/me/iacn/biliroaming/hook/PegasusHook.kt @@ -567,12 +567,28 @@ class PegasusHook(classLoader: ClassLoader) : BaseHook(classLoader) { } } } + // rcmd_reason 推荐理由 + if (av.callMethodAs("hasRcmdReason")) { + av.callMethodAs("getRcmdReason").let { rcmd -> + if (kwdFilterReasonList.isNotEmpty()) { + val reason = rcmd.callMethodAs("getText") + if (kwdFilterReasonRegexMode && reason.isNotEmpty()) { + if (kwdFilterReasonRegexes.any { reason.contains(it) }) + shouldFiltered = true + return@let + } else if (reason.isNotEmpty()) { + if (kwdFilterReasonList.any { reason.contains(it) }) + shouldFiltered = true + return@let + } + } + } + } } if (isContainsBlockKwdUnite(it)) { shouldFiltered = true } } - // todo: support rcmd } removeRelateNothing || it.callMethodAs("getRelateCardTypeValue") !in allowTypeList || shouldFiltered } diff --git a/app/src/main/java/me/iacn/biliroaming/hook/StartActivityHook.kt b/app/src/main/java/me/iacn/biliroaming/hook/StartActivityHook.kt index af9854bbb2..e023e3e247 100644 --- a/app/src/main/java/me/iacn/biliroaming/hook/StartActivityHook.kt +++ b/app/src/main/java/me/iacn/biliroaming/hook/StartActivityHook.kt @@ -6,6 +6,8 @@ import android.content.ComponentName import android.content.Intent import android.net.Uri import android.os.Bundle +import me.iacn.biliroaming.BiliBiliPackage +import me.iacn.biliroaming.BiliBiliPackage.Companion.instance import me.iacn.biliroaming.utils.Log import me.iacn.biliroaming.utils.hookBeforeAllMethods import me.iacn.biliroaming.utils.hookBeforeMethod @@ -40,35 +42,44 @@ class StartActivityHook(classLoader: ClassLoader) : BaseHook(classLoader) { false ) && uri.startsWith("bilibili://story/") ) { - intent.data?.let { - try { - val cid = intent.data?.getQueryParameter("player_preload").toJSONObject().getLong("cid") - intent.data = fixIntentUri(Uri.parse(intent.dataString)) - // fix extra - val pre = Uri.parse(intent.dataString).buildUpon().clearQuery().build().toString() - val aid = pre.split("/").last().toLong() - intent.removeExtra("player_preload") - intent.putExtra("player_preload", floor(Math.random()*1000000000).toInt().toString()) - intent.putExtra("blrouter.targeturl", pre) - intent.putExtra("blrouter.pagename", "bilibili://united_video/") - intent.putExtra("jumpFrom", 7) - intent.putExtra("", aid) - intent.putExtra("aid", aid) - intent.putExtra("cid", cid) - intent.putExtra("bvid", "") - intent.putExtra("from", 7) - intent.putExtra("blrouter.targeturl", pre) - intent.putExtra("blrouter.matchrule", "bilibili://united_video/") - // fix component - intent.component = ComponentName( - intent.component?.packageName ?: packageName, - "com.bilibili.ship.theseus.detail.UnitedBizDetailsActivity" - ) - } catch (e: Exception) { - Log.e("replaceStoryVideo fix intent failed!!!") - Log.e(e) + if (instance.hasUnitedVideoActivity) { + intent.data?.let { + try { + val cid = intent.data?.getQueryParameter("player_preload").toJSONObject().getLong("cid") + intent.data = fixIntentUri(Uri.parse(intent.dataString)) + // fix extra + val pre = Uri.parse(intent.dataString).buildUpon().clearQuery().build().toString() + val aid = pre.split("/").last().toLong() + intent.removeExtra("player_preload") + intent.putExtra("player_preload", floor(Math.random()*1000000000).toInt().toString()) + intent.putExtra("blrouter.targeturl", pre) + intent.putExtra("blrouter.pagename", "bilibili://united_video/") + intent.putExtra("jumpFrom", 7) + intent.putExtra("", aid) + intent.putExtra("aid", aid) + intent.putExtra("cid", cid) + intent.putExtra("bvid", "") + intent.putExtra("from", 7) + intent.putExtra("blrouter.targeturl", pre) + intent.putExtra("blrouter.matchrule", "bilibili://united_video/") + // fix component + intent.component = ComponentName( + intent.component?.packageName ?: packageName, + "com.bilibili.ship.theseus.detail.UnitedBizDetailsActivity" + ) + } catch (e: Exception) { + Log.e("replaceStoryVideo fix intent failed!!!") + Log.e(e) + } } + return@hookBeforeAllMethods } + // 兼容旧版 + intent.component = ComponentName( + intent.component?.packageName ?: packageName, + "com.bilibili.video.videodetail.VideoDetailsActivity" + ) + intent.data = Uri.parse(uri.replace("bilibili://story/", "bilibili://video/")) } if (sPrefs.getBoolean("force_browser", false)) { if (intent.component?.className?.endsWith("MWebActivity") == true &&