Skip to content

Commit 7158b55

Browse files
authored
compat: replaceStoryVideo on old versions (yujincheng08#1627)
对于 yujincheng08#1576 提供旧版兼容处理,使替换竖版视频能在没有新版播放器的版本正常工作
1 parent 7ece978 commit 7158b55

File tree

2 files changed

+44
-29
lines changed

2 files changed

+44
-29
lines changed

app/src/main/java/me/iacn/biliroaming/BiliBiliPackage.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import java.lang.reflect.Constructor
2222
import java.lang.reflect.Method
2323
import java.lang.reflect.Modifier
2424
import java.lang.reflect.ParameterizedType
25+
import java.util.Objects
2526
import kotlin.math.max
2627
import kotlin.system.measureTimeMillis
2728
import kotlin.time.ExperimentalTime
@@ -97,8 +98,8 @@ class BiliBiliPackage constructor(private val mClassLoader: ClassLoader, mContex
9798
val chronosSwitchClass by Weak { mHookInfo.chronosSwitch from mClassLoader }
9899
val biliSpaceClass by Weak { "com.bilibili.app.authorspace.api.BiliSpace" from mClassLoader }
99100
val biliVideoDetailClass by Weak {
100-
"tv.danmaku.bili.ui.video.api.BiliVideoDetail" from mClassLoader
101-
?: "tv.danmaku.bili.videopage.data.view.model.BiliVideoDetail" from mClassLoader
101+
("tv.danmaku.bili.ui.video.api.BiliVideoDetail" from mClassLoader)
102+
?: ("tv.danmaku.bili.videopage.data.view.model.BiliVideoDetail" from mClassLoader)
102103
}
103104
val commentSpanTextViewClass by Weak { mHookInfo.commentSpan from mClassLoader }
104105
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
179180
it.name == "executeRelatesFeed"
180181
} ?: false
181182

183+
private val unitedVideoActivity by Weak { "com.bilibili.ship.theseus.detail.UnitedBizDetailsActivity" from mClassLoader }
184+
val hasUnitedVideoActivity = !Objects.isNull(unitedVideoActivity)
185+
182186
val ids: Map<String, Int> by lazy {
183187
mHookInfo.mapIds.idsMap
184188
}

app/src/main/java/me/iacn/biliroaming/hook/StartActivityHook.kt

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import android.content.ComponentName
66
import android.content.Intent
77
import android.net.Uri
88
import android.os.Bundle
9+
import me.iacn.biliroaming.BiliBiliPackage
10+
import me.iacn.biliroaming.BiliBiliPackage.Companion.instance
911
import me.iacn.biliroaming.utils.Log
1012
import me.iacn.biliroaming.utils.hookBeforeAllMethods
1113
import me.iacn.biliroaming.utils.hookBeforeMethod
@@ -40,35 +42,44 @@ class StartActivityHook(classLoader: ClassLoader) : BaseHook(classLoader) {
4042
false
4143
) && uri.startsWith("bilibili://story/")
4244
) {
43-
intent.data?.let {
44-
try {
45-
val cid = intent.data?.getQueryParameter("player_preload").toJSONObject().getLong("cid")
46-
intent.data = fixIntentUri(Uri.parse(intent.dataString))
47-
// fix extra
48-
val pre = Uri.parse(intent.dataString).buildUpon().clearQuery().build().toString()
49-
val aid = pre.split("/").last().toLong()
50-
intent.removeExtra("player_preload")
51-
intent.putExtra("player_preload", floor(Math.random()*1000000000).toInt().toString())
52-
intent.putExtra("blrouter.targeturl", pre)
53-
intent.putExtra("blrouter.pagename", "bilibili://united_video/")
54-
intent.putExtra("jumpFrom", 7)
55-
intent.putExtra("", aid)
56-
intent.putExtra("aid", aid)
57-
intent.putExtra("cid", cid)
58-
intent.putExtra("bvid", "")
59-
intent.putExtra("from", 7)
60-
intent.putExtra("blrouter.targeturl", pre)
61-
intent.putExtra("blrouter.matchrule", "bilibili://united_video/")
62-
// fix component
63-
intent.component = ComponentName(
64-
intent.component?.packageName ?: packageName,
65-
"com.bilibili.ship.theseus.detail.UnitedBizDetailsActivity"
66-
)
67-
} catch (e: Exception) {
68-
Log.e("replaceStoryVideo fix intent failed!!!")
69-
Log.e(e)
45+
if (instance.hasUnitedVideoActivity) {
46+
intent.data?.let {
47+
try {
48+
val cid = intent.data?.getQueryParameter("player_preload").toJSONObject().getLong("cid")
49+
intent.data = fixIntentUri(Uri.parse(intent.dataString))
50+
// fix extra
51+
val pre = Uri.parse(intent.dataString).buildUpon().clearQuery().build().toString()
52+
val aid = pre.split("/").last().toLong()
53+
intent.removeExtra("player_preload")
54+
intent.putExtra("player_preload", floor(Math.random()*1000000000).toInt().toString())
55+
intent.putExtra("blrouter.targeturl", pre)
56+
intent.putExtra("blrouter.pagename", "bilibili://united_video/")
57+
intent.putExtra("jumpFrom", 7)
58+
intent.putExtra("", aid)
59+
intent.putExtra("aid", aid)
60+
intent.putExtra("cid", cid)
61+
intent.putExtra("bvid", "")
62+
intent.putExtra("from", 7)
63+
intent.putExtra("blrouter.targeturl", pre)
64+
intent.putExtra("blrouter.matchrule", "bilibili://united_video/")
65+
// fix component
66+
intent.component = ComponentName(
67+
intent.component?.packageName ?: packageName,
68+
"com.bilibili.ship.theseus.detail.UnitedBizDetailsActivity"
69+
)
70+
} catch (e: Exception) {
71+
Log.e("replaceStoryVideo fix intent failed!!!")
72+
Log.e(e)
73+
}
7074
}
75+
return@hookBeforeAllMethods
7176
}
77+
// 兼容旧版
78+
intent.component = ComponentName(
79+
intent.component?.packageName ?: packageName,
80+
"com.bilibili.video.videodetail.VideoDetailsActivity"
81+
)
82+
intent.data = Uri.parse(uri.replace("bilibili://story/", "bilibili://video/"))
7283
}
7384
if (sPrefs.getBoolean("force_browser", false)) {
7485
if (intent.component?.className?.endsWith("MWebActivity") == true &&

0 commit comments

Comments
 (0)