Skip to content

0.12.0

Latest

Choose a tag to compare

@ch6vip ch6vip released this 23 Oct 20:05

本条发布由 主仓库 v0.12.0 自动同步。

feat(hook): 适配 6.7.1 Compose 面板,注入迁到 channel.c 渲染收口点

6.7.1 的播放器「更多」面板整体 Compose 化(PlayerSettingComposeKt /
PlayerSettingFunctionWidget2),没有「adapter 持有 List → 全量刷新」这种结构了:

  • gemini.ui.f 能加载但已降级为 EmptyViewComponent(占位空视图),
    不再有 f0/e0/Z0(List) —— 旧 morePanelRefresh 不是改名,是架构没了;
  • MenuService 在 6.7.1 只负责分享面板(全部 MenuView 引用都在 createShareMenu 里)。

新落点(smali 实证):
MenuService.showNewMenuInternal$2
├─ menu$1 往 List 加分享行
├─ setting$1 往 List 加设置组(VideoSettingButtonComponent implements gemini.ui.j)
└─ $3 channel.c.a(Context, CoroutineScope, List) -> RecyclerView

h = com.bilibili.app.gemini.ui.h(j, int, Function1),字段 a 就是 gemini.ui.j。
注入方式:hook channel.c#a,proceed 之前往 List 追加自建的 h(j=Proxy)。

两个关键点:

  • 必须带内容判据。channel.c#a 被 5+ 处复用(下载清晰度/弹幕反馈/StoryMenuService/
    AI 音频切换),无条件注入会污染这些面板。判据 = 出现
    ...setting.channel.VideoSetting*Component 前缀。
  • 旧 adapter 仍在,所以不能只在「类找不到」时回退:必须在「刷新方法找不到」时
    也回退 Compose 路径,否则注入会静默失效。

实现上零重复:gemini.ui.j 与模块已在用的 holder 接口 gemini.ui.j$b 同源,
buildRowItem 的四条 when 分支(建行 / 绑定 / viewType key / Object 三件套)
与行视图代码全部原样复用,只新增 installComposeEraPath + injectComposeRow。

真机验证:
morePanelCompose : OK ...setting.channel.c#a
morePanelInjectedCompose <- size=19
morePanel row clicked
播放页「⋯」面板底部出现「空降助手 → 打开面板」,点击后模块面板正常弹出;
「我的」页与桌面入口不受影响。主进程探针 53/60 无回归。

README / agent note 同步:已从已知缺口移除「更多面板全量刷新缺失」。