Repository navigation
Conversation
fython
force-pushed
the
feat/input-source-ui
branch
from
October 27, 2026 01:46
05fde1c to
b0a8fc7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
主界面原先混合 View 和 Compose,并通过保留控件、重建详情页来更新状态。现在
WheelPlayActivity使用 Compose Material 3 渲染启动页、输入源列表、全部输入源详情、设置页、底部导航及连接弹窗;图标裁剪页也迁入 Compose。WheelPlayScreen消费不可变WheelPlayUiState,用户操作通过 Activity 调用既有连接、权限和停止流程;重组不启动或中断会话。页面滚动、展开状态、设置分类和 Android Auto 连接方式支持导航与重建恢复。设备选择、VNC、虚拟桌面、Android Auto 配置与确认弹窗迁入 Compose。临时密码和回调不写入保存状态,VNC 提交的临时字符数组会清零;认证与证书流程复用 Compose 设置弹窗。
修复五项中优先级 UI 问题:紧凑列表和宽屏双列、区分默认输入源与实际会话、精简详情页和连接方式切换、明确插件操作层级、改善空状态与可展开帮助。保留 Android 虚拟桌面入口。
主要 UI 和宿主配套代码迁入
moe.feng.wheelplay,设置和主题分别位于.settings、.ui.theme。DiPlay 前缀的类和方法统一改为 WheelPlay;保留旧 Activity 别名、偏好及配对标识的兼容性和上游许可归属。删除旧主界面 View 导航、旧 CarPlay 连接页及不再使用的
ServerUi。图标裁剪参考 crop-kit 的状态分离、Canvas 遮罩和网格实现,保留 MIT 署名并将许可随 APK 打包。固定 1:1 裁剪支持拖动、双指缩放、缩放滑块、重置及无障碍移动,适配横竖屏和大字体;预览与 1024 × 1024 PNG 输出使用相同选区。ImageDecoder 处理 JPEG 方向并限制解码尺寸,ViewModel 保留重建状态,异步保存防止重复提交,取消保留原图标。
CarPlay 连接过程在主界面上方显示 Compose Dialog,保留当前输入源页面。支持后台连接、取消并等待资源释放、连接成功自动收起、不可重试错误及 Wi-Fi 恢复入口;热点信道定位说明也迁入 Compose。宿主使用透明窗口并保留权限与协议生命周期,USB 插入通过控制台进入;复用窗口不再清空主界面。后台成功不抢回前台,已关闭的宿主在再次连接时重建。
清理已无入口的旧 CarPlay View 菜单、安全区域编辑、日志与本地预览界面,删除无启动入口的 I²C 诊断 Activity 及其独占主题、停用的 Car App 模板和依赖,并清理 139 个闲置字符串键(三种语言共 417 项)。保留底层 MFi/I²C 协议、自检、投影配置、媒体输出和会话清理逻辑。
补全 Compose 安全区域编辑器:按车机画面比例预览,四边拖动与数值输入同步,沿用每边 0–40% 的百分比配置;提供 48dp 触摸范围和无障碍逐边微调。编辑和恢复全屏都只修改草稿,保存后应用,取消保留原配置,页面重建保留草稿。旧像素配置预览为百分比并提示转换,未修改时保存不改写旧值,也不触发重连。
安全区域按基础画布分辨率独立保存,例如 1280×720 与 1920×1080 各自保留配置;编码清晰度和 UI 缩放不创建新 slot。新分辨率默认全屏,恢复全屏及旧像素配置操作只影响对应 slot。旧全局百分比配置迁入默认 1280×720 slot,保留已有新配置。设置页和编辑器标明分辨率,打开编辑器时锁定目标和初始值,切换分辨率或重建后也不会写错 slot;保存非当前 slot 不重连。宿主和设置共用分辨率归一化,保留延迟应用,并修复切回当前尺寸仍应用过期待处理尺寸的问题。
验证:
common:testDebugUnitTest517 项、shared:testDebugUnitTest487 项全部通过(共 1,004 项);common:assembleDebugAndroidTest、mobile:assembleDebugAndroidTest、mobile:assembleDebug、mobile:lintDebug通过(lint 无错误)。UI 测试改用 Compose 语义节点,覆盖导航/滚动恢复、插件授权、权限拒绝、会话停止、表单校验及密码清理。Robolectric 原生渲染检查了 320/360dp、800dp 横屏、130%/200% 字体和简中、繁中、英文;按实际文字行边界检查溢出与省略。裁剪测试另覆盖真实拖动、缩放和重置、实际输出像素、透明度、边界限制、页面重建和保存状态恢复、JPEG 方向、超大图片、无效图片、取消及缺失 URI;检查了竖屏、横屏和 320dp / 200% 英文字体截图。连接 Dialog 回归测试覆盖后台运行、资源清理及重复取消、过期状态回调、失败恢复、权限说明、页面保留、USB 入口和关闭后重连。新增安全区域测试覆盖四边拖动、越界限制、无障碍微调、非法输入保护、重建与取消、旧像素配置保留、自适应预览比例和保存后坐标缩放。
分辨率 slot 回归另覆盖独立保存、切回恢复、全屏覆盖旧配置、迁移优先级、编辑期间分辨率变化和页面重建、细微尺寸变化与待处理切换取消,以及编码降至 80% 时读取原画布 slot。
CI 修复:Android 36 插件集成测试改用独立的 Debug 前台 Activity,避免在无界面的宿主进程中等待异步 Binder 回调;回调异常、提前停止和服务死亡会直接报告原因。运行时任务改为全新 AVD,只缓存系统镜像;构建缓存排除 runner 预装的 platform/build-tools,避免 root 所有权导致的恢复错误。模拟器输出独立重定向,adb 命令设定超时;浏览器与插件测试分别判定结果,并始终上传 logcat、服务状态和模拟器日志。Android Auto 网络测试等待宿主发布输入就绪,HTTPS 测试通过同步设置接口启动真实 TLS 服务;原生编译和单元测试分步执行,并输出完整失败异常。9 项 CI 脚本回归、28 项网络集成测试、Debug APK/测试包构建和 lint 在本地通过;CI #170 全部通过:构建/lint、完整单元测试、Android 28/36 的浏览器与独立插件运行时测试。两个 API 均完成插件双会话的绘制、触控、夜间模式、清理确认和进程退出验证,模拟器任务正常结束,缓存恢复无权限错误。
真机触控、TalkBack、输入法及原地升级体验尚未验证。