Repository navigation
本条发布由 主仓库
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 同步:已从已知缺口移除「更多面板全量刷新缺失」。