当前状态(2026-10-05后续):用户已授权继续专项并 ADB 调试,下文“用户要求不打包/未运行设备测试”是前一阶段记录。最新紧凑选择器和表情已在解锁后的 SM-X800 验证并查看渲染,相册像素裁切设备测试也已运行;相册系统选择器与编辑闭环仍待验收。本轮交付用20261084,详见Transformer与语音专项,不覆盖83档案。
按用户参考图方案5,把布局变成能辨认排列的预览卡片;设置页和键盘内面板共用组件,语言、方案和布局仍独立,只选择已安装的有效组合。以 Windows“手机与电脑互联”界面为流程参照,Android 先显示连接状态和保存的电脑,扫码作为自动连接失败后的显式入口,不再被旧配对记录隐藏。Extract Text 黑画面跳符号仍属用户验收失败,本轮处理该失败,不将前一版合成文字测试等同于拍摄可用。
- 原布局选择只有文字按钮,缺乏形状预览。本次以同规格卡片显示主键区缩略图、名称和选中勾号;真实字母行来自键盘配置缓存或自定义布局,读取预览不切换正在使用的键盘。九键/假名/笔画使用其实际主键排列,不把14键画成另一套九键。宽度取所在容器,窄屏横向滚动,大字体保留可滚动父页面。
- 原扫码按钮位于
paired == null分支;保存过设备但未连接时反而不可见。现在未配对、离线、已连接均显示“扫码连接电脑”,Windows二维码打开路径写在旁边。当前文本同步开关与设备属于同一区域;手动地址和第三方服务是备用入口,不新增未实现的同步方向控件。 - 原相机帧无质量筛选,OCR返回文本未经置信度检查便显示。现在在相机工作线程检查缩小图的亮度分布、对比度及有效边缘,暗画面或无细节画面不压缩、不发送识别任务,并立即清空旧预览。引擎边界同样检查图像,整帧平均置信度不足55则返回空;不按字符删除标点、公式或数字。
- 实时预览需连续两次相同结果才显示,变化或空结果清除旧文字;拍照使用新请求的当前帧,不沿用稳定缓存。空画面拍照提示重新对准,OCR超时恢复按钮,关闭面板丢弃迟到结果。
质量门槛是本轮验证参数,不是普适准确率保证;暗底明亮文字作为反例检查。参考Tesseract4Android 4.9.0接口使用0~100的平均置信度,未添加字符黑名单。旋转、透视、分散文字的检测与校正仍未完成,保持原验收失败记录。
本地19项相关回归通过(原相机/二维码/几何16项,加暗画面与预览稳定3项),日志 .codex-artifacts/layout-scanner-ocr-82-build.log。初次构建因新增测试函数漏写 fun 后空格而失败,修正后重跑通过,没有交付失败产物。
SM-X800 上11项设备测试通过,日志 .codex-artifacts/layout-scanner-ocr-82-device-tests.log:布局选择4、未配对/离线/已连接扫码入口1、真实二维码库/相机关闭重开并切换OCR 2、实际OCR引擎与服务4。空画面组含纯黑、纯白、暗噪声、低对比度噪声和平滑渐变;正常中英文、中央框裁切、标点和黑底白字仍通过。均为可复现测试图,不代表任意拍摄场景的准确率。
已查看实际设备渲染:宽屏浅色设置、窄屏2倍字体、深色键盘内面板、离线连接面板及真实相机。第一次渲染发现矮键盘内当前组合卡片挤走方案选择,随后改为紧凑头部、按面板高度约束预览,重跑布局4项通过,最终640×340面板同时可见预览、方案与管理入口。证据在 .codex-artifacts/layout-scanner-ocr-82/,最终图为 input-layout-ime-wide-final.png 和 input-layout-narrow-large-text-final.png。
真实“剪贴板同步”页面确认已配对状态仍有扫码入口,并显示电脑在线;此时还发现电脑方向许可被写成正在“双向同步”、但本机开关关闭,已改文案区分电脑允许方向与本机暂停状态。最后这两处状态文字由正式构建编译检查,不将其算作前述设备测试覆盖。
用户明确反馈“ok, 扫码连接成功”,本设备本次实拍配对验收通过;没有据此代替双向复制验收。黑画面实拍复验仍交用户,旋转/倾斜/分散文本仍保留未通过。构建固定使用主目录与既有交付入口,无新工作树、未提交或公开发布。
设备操作复盘:从设置页面准备点击扫码时,用户已切回聊天,后续取图发现前台变化,没有把该图当作扫码入口成功证据,也没有继续点击;与本任务无关的截图/XML已移除。用户正在使用设备时,应缩短观察到动作的间隔并在前台变化后停止,优先使用隔离测试页面及用户实测结果。
最终交付:主目录 auto.cmd 构建轻量签名 Release 1.8.0 / 20261082,保留数据覆盖安装唯一设备 R52T800SKWZ(SM-X800),统一入口核对实际版本及设备 APK 哈希成功。包88,696,471字节,SHA256 211e20b35c49edd89c0a6252031c7d31ef92507aa29769bc8b24ce55dea82bf6,固定副本 D:/CyIME-Data/deliveries/1.8.0/20261082/CyIME-1.8.0-arm64-v8a.apk,日志 .codex-artifacts/layout-scanner-ocr-82-delivery.log。未生成内置模型包、未公开发布、手机未安装;保留用户配对和配置。
用户否定了82的两处界面:OCR拍照后仍是键盘上的窄编辑条,而非明确要求的剪贴板浮窗;输入方式新增重复组合标题、底部管理行,方案仍为普通文字卡片。前述82渲染检查仅证明当时可显示和切换,不代表符合用户要求或已经验收。
原因是把“沿用剪贴板编辑”缩成复用输入路由,没有沿用编辑容器;布局缩略图修改又只覆盖了布局,没有检查同页方案的视觉关系。本次OCR直接调用剪贴板 QuickSendFormArea,共用定位、尺寸、主题、关闭和保存逻辑,只隐藏无关编码字段、添加重拍入口,保存仍写入系统剪贴板和历史。零高锚点不占键盘正文空间。选择面板删除重复标题和底部管理行,管理入口放到相应分区标题旁;方案与布局复用卡片组件、列宽及选中态,方案用编码示例表达用途,组合约束仍来自已安装配置。
本轮继续同一未发布批次,版本名不变,交付序号83。
Debug及设备测试APK编译通过,SM-X800上10项检查通过:OCR浮窗2项、原剪贴板编辑4项、输入方式4项。OCR与剪贴板编辑的窗口屏幕坐标及尺寸相等,锚点高度为零、下方键盘占位区域不变;仅保存提交修改后的草稿,重拍或关闭不保存并释放输入控件,原剪贴板编码/焦点/主题重组与草稿保护仍通过。这里的OCR检查是识别结果进入编辑后的界面与回调,不冒称本轮重验了相机识别准确率。
实际查看设备截图后发现窄屏2倍字体的编码示例被裁掉,虽然原10项检查均通过,仍修正卡片最小宽度随字体增长、保持横向滚动;随后重编译并重跑4项布局检查通过。最终键盘面板测试包含用户截图中的四种布局,管理入口在分区标题旁、没有重复组合标题和底部管理行,方案卡片左边界与列宽和布局一致;正常字体640×340可同时看见两组选项。窄屏大字体通过父页面纵向滚动与选项横向滚动保持可操作,不强行压缩文字。已查看浅色设置页、四布局深色面板、大字体页面及方案详情、OCR浮窗相对键盘的位置。截图 .codex-artifacts/layout-ocr-83/,日志 layout-ocr-83-build.log、layout-ocr-83-device-tests.log、layout-ocr-83-refine-build.log、layout-ocr-83-final-layout-tests.log。其中键盘区域用测试占位呈现,没有将其标作实际按键打字验收。
正式安装回执:auto.cmd 已构建并覆盖安装轻量 Release 1.8.0 / 20261083,保留数据,设备 R52T800SKWZ,自动核对版本及APK成功。88,703,599字节,SHA256 c8cb617a99af7689544c777ca101c0401157c3b159da49daa600fac7038e2bf9,固定副本 D:/CyIME-Data/deliveries/1.8.0/20261083/CyIME-1.8.0-arm64-v8a.apk。日志 .codex-artifacts/layout-ocr-83-delivery.log。这次交付的方案示例设计随后被用户明确否定,不应作为已通过的UI基线。
用户先要求继续压缩,又明确否定 n+i / 你·两键一字 / 双拼 设计,指出无法辨别实际双拼变体,并要求不要打包。问题确实在Agent:未经要求加入了无助于识别具体方案的教学式填充;设置页沿用 InputScheme 分类名,键盘面板却使用实际方案名,两个入口仍然不一致。此前只检验尺寸和切换,没有覆盖“多种双拼必须可直接分辨”的用户契约。
随后用户明确给出 pin'yin / 拼音、ul'pb / 双拼 的紧贴两行样式,以及“第一排布局、第二排方案,中间细线,管理也是各排最后一张卡片”的最终结构。源码按此替代83设计:移除额外分区标题行和底部管理行,两排首部标识布局/方案;布局保留真实键位预览,标签随文字实际高度排布,不再用36/46dp固定底栏撑出空白;方案编码和实际 SchemaInfo.name 上下紧贴,不再显示“你·两键一字”等自行添加的教学文案。全拼用用户给出的 pin'yin,小鹤用 ul'pb;其他双拼未取得准确映射时显示编码类型,不套用小鹤编码冒充对应方案。管理分别放到布局和方案横向列表末尾并沿用同排卡片样式。
设置页不再先选通用“双拼”再进入“方案版本”第二层,直接列出兼容当前布局的具体方案;某类方案没有当前布局时,维持已有切到该类可用布局的行为,只从已安装条目中选择。键盘面板同样显示实际全名,语言页当前选择摘要/保存回执保留具体双拼名称。方案完整名称横向可滚动,整项最小触摸高度48dp。
最新源码未打包、未安装;不沿用83的设备截图或测试声称本次视觉通过。停止交付后撤回尚未发布的84序号修改,当前源码仍记录83;下一次得到打包授权时须按不可变交付规则改用新序号,不能覆盖83档案。OCR浮窗修正仍是已安装的83内容。源码与设备测试源码编译通过,16项输入组合检查通过,包含多种双拼实名、实际选择目标、对应布局及不冒用其他双拼编码的反例;最新两排UI没有运行设备测试或取得渲染截图。日志 .codex-artifacts/layout-gallery-final-source-check.log。
用户要求用“相册”替换拍照识别右侧“离线”:选图后只移动、缩放图片,框的位置和尺寸与拍照一致,点击识别才裁取框内文字。实现复用 DocumentOcrActivity 的透明输入焦点桥接和系统选图,不新增另一页编辑器,也不要求相机权限才能读相册;返回后在IME相同预览区域绘图,遮罩与拍照共用同一个Canvas及 OcrScanGeometry 归一化边界。
图片解码在IO线程进行,最长边限制2048并读取方向信息;预览按同一仿射变换移动/缩放,捏合围绕手指中心,框不参与变换。识别时按当前变换映射固定框,生成最多1600像素宽的裁切,框外图像不交给OCR,移出图像后的空区域以和预览一致的白色处理;仍经过质量门槛和原识别服务,结果进入已复用的剪贴板编辑浮窗。相册期间停相机,返回拍照恢复;关闭或切走取消相册识别,避免迟到结果弹回界面,重复点识别被阻止。系统选择器通过Activity处理,避免在没有Activity结果注册器的IME中直接调用Compose选图器。
本地裁切/缩放4项及原相机几何4项通过,加输入组合16项共24项本地检查通过;应用与Android设备测试源码编译通过。新像素裁切设备测试仅编译,未运行;相册系统选择器返回、手势、遮罩实际位置和编辑闭环尚未真机验证。用户要求不打包,未执行assemble、生成新APK或安装。现有83 APK哈希保持不变,不能把它称为包含本次源码修改。黑屏实拍、旋转/倾斜和多块文本的识别失败记录继续保留。
用户提供四张实拍截图并明确否定旧版最小尺寸的表情及输入方式界面,以剪贴板的紧凑操作栏、优先保留内容空间为参照。截图中输入方式仍是83的旧设计,不把之前640×340测试的可见结果当成最小尺寸验收。根因是类型切换、插件分组、分类/删除分别占行,颜文字另有独立分类和删除栏;Emoji还硬编码横屏15dp留白。布局预览的固定最小高度没有先扣除方案行与文字高度,主面板入口又没有像剪贴板一样扣除用户底部留白。
本轮源码把表情类型、可横滑分类与删除收在同一条控制栏,Emoji和颜文字共用;插件分类直接列在同一横栏,分页顺序和分类索引来自同一列表,保留图片表情、最近使用与原插入回调。黄豆默认页兼顾分类异步加载,不因为首次空列表停在最近使用页。Emoji网格按实际内容宽高排更多单元,行高约40~52dp且计算包含行间距,避免只把三行越撑越大或让最后一行被间距截断。颜文字卡片减少内边距及空隙,内容网格继续滚动;两种模式只扣同一个底部配置,不另加横屏空白。
输入方式保留用户指定的布局/方案两排、细线、真实键位预览、具体方案全名与每排末尾管理卡片。先预留方案两行文字/操作高度、布局名称及边距,再给缩略图剩余高度;小视口允许缩略图降至32dp,较大字体仍可滚动而不缩坏文字。SchemaList入口同样扣除当前键盘底部留白,工具栏与字母/数字/符号/候选键区几何不变。
编辑盘截图另行核对了现有实现:圆盘与四角使用曲线避让及按真实宽高限制直径;本轮未修改其已确认布局。截图底部在剪贴板中也有的共用留白没有单独移除,避免再次破坏面板边界。未把源码检查宣称为编辑盘最小尺寸实拍通过。
验证:应用和Android设备测试源码编译通过;16项输入组合检查及4项符号/表情几何检查通过(共20项),日志 .codex-artifacts/compact-panel-final-check.log,相关diff空白检查通过。设备测试新增最小380/280宽视口下两排完整可见、管理入口可达、模式切换上下边界一致、控制栏不另占底排等断言,保留分页和插件分类切换检查;这些UI测试本轮只编译,未执行。遵守用户前文“不打包”,没有assemble、生成APK、ADB安装或升号;没有最新UI渲染图像,因此视觉、触摸与真机验收仍未完成,不借用旧APK截图证明新代码。Todo保留用户勾选状态并记录旧版验收失败与待安装状态。