Skip to content

feat: add Shizuku desktop and shared projection lifecycle contracts - #52

Merged
fython merged 13 commits into
mainfrom
feat/40-android-virtual-desktop
Oct 26, 2026
Merged

fython merged 13 commits into
mainfrom
feat/40-android-virtual-desktop

Conversation

@fython

@fython fython commented Oct 26, 2026 •

Copy link
Copy Markdown
Owner

为 Issue #40 增加独立的 Android 虚拟桌面输入源,并统一各输入源的取消输入、状态/错误和启动取消契约。用户通过 Shizuku 启动指定应用到独立显示屏,在浏览器查看画面、触控和执行返回;缺少依赖、授权或可启动应用时,先拒绝切换,保留当前源。

实现:

  • 虚拟屏默认 1280×720 / 160 DPI,支持保存宽高和 DPI;宽高范围 320–3840、总像素不超过 8,294,400、DPI 范围 72–640。每次启动固定参数用于 Surface、显示创建和触控映射。
  • AIDL、Desktop 实现及测试统一使用 moe.feng.wheelplay.projection.desktop。v7 协议使用 structured AIDL 声明握手、启动配置、实际显示信息、会话状态和结果;返回 displayId、实际尺寸/DPI、旋转与布局修订号,拒绝与请求不一致的布局。
  • 能力分为服务支持、连接协商、会话请求/必需能力和最终启用能力;支持只读降级。预留视频、指针/键盘、导航、音频路由与显示操作位,但只声明已实现的 Surface、触控、Back 和显示配置。
  • 触控保持紧凑 Parcelable + oneway,无逐帧响应。独立 cancelInput 和 Back 使用输入代次屏障,取消手势并拒绝迟到旧触控;取消不发送 UP 或点击。64 项输入队列有过载处理,持续故障通过健康检查报告。
  • healthy 返回会话快照并续期;getState 只读、不续期。停止后保留实际显示信息、输入代次和故障。控制调用保留稳定错误码及独立诊断;反射异常按真实原因分类。
  • 公共 ProjectionSession.cancelInput(reason) 贯通浏览器、TouchLease 与 Runtime。Android Auto 使用 ACTION_CANCEL;VNC/CarPlay 标记为 RELEASE_ONLY;插件 API v2 增加可选原生取消标志和末尾事务,未声明的旧插件继续使用兼容释放。普通抬手仍使用触控快照。
  • 公共状态快照区分连接、协商、运行、停止和失败,独立表达输入就绪及清理结果;只读会话可运行。错误类别统一,后端代码/诊断保留,UI 本地化展示,浏览器只获得阶段和错误类别。
  • ProjectionStartup 支持协作取消,open 接纳与 awaitReady 就绪分离。启动期间可停止;晚到会话先清理、不会激活。获取/就绪默认各 60 秒、清理 15 秒;失败或超时保留资源所有权,迟到回调不能解除隔离。
  • 复用 Surface → JPEG/WebP 输出,首页/输入源页支持启动取消;源 ID 使用常量、页面使用 enum,三种语言资源统一到各自 strings.xml。补充框架、插件和 Desktop 协议文档。

CI 触发规则:push 仅构建 main 和标签,开发分支由 pull_request 验证,避免同一次 PR 推送重复构建;保留 workflow_dispatch 供未开 PR 的分支手动运行。原有路径过滤、构建任务和主线开发版产物保持不变。

验证:

  • CI 稳定性修复(c20e6b0):认证导入重建测试改用 finally 显式放行,避免固定 5 秒等待在慢 runner 上让模拟导入失败;后续检查先验证导入资源,失败信息直接指向导入。4 项认证导入测试及额外 5.5 秒延迟诊断场景通过,临时诊断副本未提交。新提交的 Actions 结果以 PR 检查为准。
  • shared 487 项、common 478 项、插件 SDK 9 项全量单元测试通过;首页启动取消的最终增量单独执行 11 项 SourceNavigationTest,全部通过。
  • npm test 全部 15 个测试文件通过,npm run check 通过。覆盖普通抬手/取消区分、旧协议兼容、输入暂停时的取消,以及旧 session/epoch 和非租约所有者拒绝。
  • 最终 :mobile:lintDebug(0 errors,22 warnings)、arm64-v8a :mobile:assembleDebug 和 git diff --check 通过。
  • 覆盖 structured Parcelable/Binder 往返、能力分层/只读就绪、取消屏障、状态查询不续期、迟到启动清理、停止超时隔离、错误诊断保留,以及新旧插件取消兼容。

保持草稿:尚无非 root 真机 P0 验证;Binder 吞吐/延迟、厂商限制、自定义尺寸/DPI、主屏同时操作、锁屏、受保护内容、跨屏任务和异常退出需按 docs/ANDROID_DESKTOP.md 实测。Desktop 当前不提供 WebRTC、音频/麦克风、键盘或 Home;直接 ADB、Launcher 和会话内动态布局留待后续。本 PR 不自动关闭 #40。

@fython fython changed the title feat: add experimental Shizuku Android virtual desktop feat: add Shizuku desktop and shared projection lifecycle contracts Oct 26, 2026
@fython
fython marked this pull request as ready for review October 26, 2026 13:27
@fython
fython merged commit ccd01f0 into main Oct 26, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants