feat: media card cover, controls, live progress, multi-session swipe

This commit is contained in:
2026-08-16 19:59:30 +08:00
parent 8c42dca7bc
commit 5f5d0431ee
5 changed files with 248 additions and 65 deletions
@@ -304,7 +304,7 @@ class JsBridge(
fun setMediaListener(source: MediaSessionSource, webView: android.webkit.WebView) {
mediaSourceRef = source
source.start { info -> pushMedia(info, webView) }
source.start { infos -> pushMedia(infos, webView) }
}
// H5 页面就绪后重新拉取一次媒体:修复启动时推送早于页面渲染的时序问题
@@ -314,9 +314,26 @@ class JsBridge(
mediaSourceRef?.refresh()
}
private fun pushMedia(info: MediaInfo?, webView: android.webkit.WebView) {
// 媒体播放控制(作用于当前展示的会话)
// Media transport controls (act on the currently shown session)
@android.webkit.JavascriptInterface
fun mediaPrevious() {
mediaSourceRef?.previous()
}
@android.webkit.JavascriptInterface
fun mediaPlayPause() {
mediaSourceRef?.playPause()
}
@android.webkit.JavascriptInterface
fun mediaNext() {
mediaSourceRef?.next()
}
private fun pushMedia(infos: List<MediaInfo>, webView: android.webkit.WebView) {
webView.post {
val json = info?.toJson() ?: "null"
val json = gson.toJson(infos)
webView.evaluateJavascript(
"window.HearthEvents && window.HearthEvents.mediaSessionChanged($json);",
null