Skip to content

Latest commit

 

History

History
89 lines (57 loc) · 13.3 KB

interaction-geometry-audit-20261008.md

File metadata and controls

89 lines (57 loc) · 13.3 KB

2026-10-08 布局、浮窗和未完成交互核查

本轮1.9.9轻量正式测试包已按用户要求安装手机,平板正式包待更新,相关设备渲染与实际交互核验仍未全部完成。以下区分既有契约、新行为与待执行验证;安装、测试或编译通过均不代替用户验收,没有截图证据的项目不标视觉通过。

原规则与本轮边界

以真实键盘内容框计算,不用整屏宽高代替。工具栏44dp;普通四行键区底内缩8dp。窄屏26键三排字母同格宽,第二排两侧半格,第三排Shift/删除各1.5格;用户追加的宽屏实体错位及1000dp自动默认单独记录于物理几何。26/14/手写底排共用1.2、1.2、1、3.9、1、1.7权重(总10);展开候选左栏对符号键12%,右栏对底排回车17%,不能跟第三排删除的新宽度改变。

标准26键自动默认:360dp可用宽→360×276dp,行56dp、纵缝5.5dp;934×1493dp可用区→934×404dp,字母键帽约79.8×79.75dp。历史文档的934×415已非现公式。自定义、分体及非标准布局沿用各自默认;已存手动尺寸、显式横纵缝(含0)不迁移。

尺寸上限仍由KeyboardGeometry与KeyboardAspectGeometry共同决定。固定竖屏高上限max(228, floor(configHeight×.45));固定横屏max(160, configHeight−navInset−28−24),当前默认navInset24。悬浮max(228, floor(hostHeight×.70)−28),还受实际系统栏、底留白及形状保护限制。934×1493且无额外留白的固定竖屏示例最大671dp。普通键盘不任意拉成全屏;全屏手写是独立画布模式,控件保留普通尺寸。

本轮只替换自动纵缝“只跟宽、不跟高”的旧规则:原手机默认/方形键帽行高以内不变;超出的每行高度80%给键帽、20%给间距。20%采用现有MaxGapFraction预算,这是新的高度分配决定,并非声称旧实现已有。横缝和外留白不变,不恢复已废弃的上下空白或小键帽上限。共用该度量的正常手写仍五等分,全屏继续冻结普通控件度量。

严格几何判据

记键区顶为T、底为B、底内缩P,四行格高R=(B−T−P)/4,纵缝G。第r行(0起)键帽顶=T+rR+G/2,底=T+(r+1)R−G/2。

检查 通过条件
第一排底→第二排顶、第二→第三、第三→第四 三缝均为G,渲染取整差≤1px
键区顶→第一排顶 G/2,无额外空白
第四排底→键区底 P+G/2,无额外空白
同排键帽上下边 偏差≤1px
只调整高度 字母格宽、横缝、左右边及44dp工具栏不动;键帽和纵缝连续增长
底排/侧栏 上述对应键左右边偏差≤1px,禁止仅比较常量
触摸格 仍覆盖完整行格,新增视觉缝不产生死区
手动与极端尺寸 不重算已保存尺寸;拉左时右边不动、拉上时底边不动;保留6dp方键吸附及边界优先
文字/图标 非滚动标签不得裁切、重叠、跨键;大字号以实际可用键帽测量
长按浮窗 顶排及左右端完整显示,不受卡片圆角/离屏透明层裁切,不抢输入焦点,松手即按原语义提交
日语圆盘 同一按键五个方向位置/圆盘尺寸不变,仅选中项高亮;始终提示设置不改变手势

验证范围与当前状态

几何:默认360×276、手机加高360×400、934×404默认、934×671加高、横向1493×858;另有280×208小框。尺寸均含44dp工具栏,键区测试扣除该栏。26/14/9、假名、数字/符号底排、展开候选、普通/全屏手写检查受影响关系。测试夹具必须断言真实宽高,不能让手机窗口夹小后冒充平板。

浮窗:顶排左、中、右端,在真实圆角裁切父层下渲染;屏幕边界夹持单独检查。剪贴板:短框全部操作可达、自然宽度、大字滚动、固定展开/收起中间帧;使用合成内容,不把用户剪贴板文字写入报告。

平板SM-X800(R52T800SKWZ)本轮最初安装1.9.4/20261096,早期测试阶段为Debug 1.9.8/20261100;后续已保留数据安装Debug 1.9.9/20261101并核对版本。其真实恢复检查被密码锁屏阻挡,未通过。用户随后切换连接手机SM-S9180(R5CW13EYCSF)并明确要求安装,已完成1.9.9/20261101轻量Release覆盖与设备APK核对;手机安装完成不代表本轮界面核验通过,平板正式包仍待更新。

Todo核查:不能把未勾选一概当成已完成或未实现

状态 项目与证据
此前确实缺实现,本轮补齐后待验证 固定渐变、约20%/速度吸附、列表顶部整页下拉、图片分类末尾和斜线;原ClipboardPanelExpansion为50%中点,列表没有接管手势,IMAGE枚举在第三位。
此前缺引擎闭环,本轮正在修复 14键/双拼选音节:KeyboardView和原JNI音节接口只接T9。拼音串光标编辑不是音节消歧,不能拿前者抵交。
已有实现和检查记录,但不能替用户验收 拼音内光标、英文词优先(不含14英文混输)、分类菜单等高、同名资源来源标签、手写底排、全屏过渡、手写剪贴板互斥、编辑框换行、工具栏归并;见space-preedit-cursor-20261006、input-consistency-20261006、handwriting-qwerty-alignment-20261006。
用户报告失败,保持失败状态 上下滑符号横向偏离:单键方向锁测试已有,但不能证明真实26/14/9及父手势全部正确。本轮补实际布局反例。
仍未完成且不能用界面调整冒充 14键英文混输;剪贴板拖动性能(没有前后帧数据);整体打字迟滞(1.9.8三轮P95仍波动,见typing-latency-20261007)。
不应删除 “方案选项”仍承载引擎schemaSwitches;MenuBar筛去ASCII/宽度开关后展示实际选项。
已有交付机制 auto-deliver与其测试包含未安装草稿归档、只升versionCode拦截,不能因Todo未勾选就另做一套版本机制。
本轮不宣告完成 ASRInput/Windows由对应对话实施;语音质量需实际音频和性能证据;SuperDisplay用户已叫停,不重新介入。

保持所有原有复选框状态。新增、失败和待安装事项在原功能行更新;该表不代替实际验收。

追加:操作菜单统一与删除提示

用户明确否定长按后遮盖整个列表的内容替身页。此前 LongPressMenuOverlay 在记录区重画整块背景和一份文字/图片预览,更多及删除又使用另一个覆盖组件,删除说明无条件包含相册提示;这不是数据类型判断错误,而是视图结构和文案复用错误。

本轮改为按实际条目/按钮边界定位一个内容宽度的菜单,优先查找可见记录间的空位,没有完整空位时在面板内限高滚动。底层列表保留,不复制预览,不画整页背景;透明外部点击层只关闭菜单,避免关闭时误粘贴。尺寸、density、字号或记录内容改变则关闭过期锚点,不沿用旧坐标;后台插入导致原条目移动也适用。文字、图片、混合删除分别计数,只有含图片时说明保留原始图片。

CompactMenuStyle/CompactMenuRow 共用圆角12dp、最小行高36dp、14sp文字、18dp图标,字体放大时按内容增高。七处普通下拉入口(方案、插件、手写采集、词库方案、方案词库、词库分类、市场版本)和插件字段选择器共用外观;字段保留原锚点与选择语义。语言长按滑选只共享视觉参数,保留原44–64dp行高、坐标和连续手势。编辑表单、权限、导入和卸载确认不伪装成操作菜单。

检查要求:长按前后原记录边界相等,菜单外像素不被遮罩改变;有足够空位时菜单不覆盖原记录;窄框大字所有操作可滚动到达;RTL使用绝对本地坐标;纯文字无图片说明;外部点击不触发记录或删除。新增/更新的测试尚待本轮实际运行,不能按实现完成就标为通过。

本轮执行中发现的失败

  • 第一轮设备渲染47项中43项通过,3个实际失败为短距离快速甩动未展开、假名圆盘两处文字边界重叠;另1项误调用了只存在于JVM的测试类。相关代码已修,待新包重跑。手写5项中1项夹具未初始化插件,修正隔离运行环境后该项通过。
  • 第一次真实IME性能夹具错误使用隔离Application,未得到有效基线;已切到标准AndroidJUnitRunner,移除几何偏好写入,finally各清理步骤独立执行。新夹具记录实际版本、帧报告丢弃数和每趟拖动耗时,排空回调队列后汇总;不把同步注入的轨迹声称为严格固定速度。
  • build-check-4 的ARM64优化曾把ndk.abiFilters与ABI split同时指定,AGP拒绝配置;已改成仅限制externalNativeBuild.cmake.abiFilters,保留原split。build-check-5 的50项单测有1项连续性失败:393dp高窗口宽832→833时默认宽611→615。已保留该反例并移除插值前取整,同时增加50%自动高度上限;build-check-6的58项针对性单测及Debug应用/测试APK构建通过,不放宽断言。该产物早于后续卡片稳定、图片上限与悬浮恢复修复,不能代表最新源码已通过。
  • 真实IME性能再次运行时,暖场展开/收起后在记录阶段被系统拒绝MOVE事件;未获得完整前后帧数据。不能把注入失败直接归因于卡顿,也不能据此声称性能已改善。夹具增加拒绝时坐标/耗时/窗口状态及部分结果保存,当前先修源码确认的卡片重排原因。

剪贴板列表重排与图片预算

源码确认三条重排路径:缩略图加载成功后把占位比例0.8改成原图比例;普通文字在展开端点从4行改成8行;固定内容展开后移除统一预览高度,短文字反而收缩到48dp。现在缩略图比例固定0.8并按实际列宽限解码尺寸,普通文字始终4行,固定卡片始终使用普通面板可用高度计算出的统一预览高度。展开只增加可见区域/固定记录,不以每帧高度改卡片尺寸。原图和粘贴内容不裁剪。

复制图片与可选截图来源共享最新16张未固定图片预算,有效固定图片不占此数且不自动删除;普通截图查询最多扫描60条候选,旧固定截图按合法MediaStore ID独立查询。刷新请求合并为一个运行和一个待处理请求;单次来源异常不得永久停止刷新、重新引入已隐藏图片或关闭自动来源后复活普通截图。16项来源/保留策略JVM测试通过,新设备渲染回归已编译、待运行。

悬浮贴边恢复框错位:源码确认,未交付

用户指出恢复目标框的线条与实际落点不符。原 FloatingKeyboardContainer 自行读取固定宽高,用 protectKeyboardSize(... offsetX = 0) 计算预览,动画终点横向偏移也固定归零;实际 restoreKeyboardDisplayMode 则读取保存的 fixedOffsetX。当前平板横屏保存宽1005dp、横向偏移−244dp,宿主宽1493dp时,真实固定左边为0,而旧预览左边为244dp。该错误能直接从源码证明,无须以测试框推测。

另两处相同分歧是预览高度不包含固定模式的用户底部留白,底边使用悬浮安全距离而非固定模式实际导航留白。修复应由服务层解析固定恢复目标并传给预览,不能让预览再次独立猜测布局;保存设置不改写。

旧 FloatingKeyboardUiTest.edgePreviewExpandsThenReleaseRestoresWithoutLeavingTheDragRow 仅断言合成内容框预览宽度与拖条消失,没有比较真实服务松手前后四边,因此不能作为真实恢复成功的证据。新增验证需在真实IME内记录 ready 状态目标框的屏幕坐标,与恢复后 fixed-keyboard-card 左、上、右、下逐一比较(容许至多1dp像素取整),覆盖非零左右偏移、底部留白、导航边距并确认真实按键可输入;组件测试另行记录,不替代此项。

本轮结果:build-check-7 的41项JVM回归通过(恢复几何2、贴底手势9、图片16、剪贴板内容14),应用Debug构建通过;Android测试代码因DpRect尺寸访问和ConcurrentHashMap隐式contains编译失败,修正后build-check-8通过。Debug 1.9.9/20261101已覆盖安装SM-X800。RealFloatingDockGeometryTest 第一次运行在临时编辑器等待窗口焦点时超时,尚未进入几何偏好写入与恢复操作;系统诊断为Dozing/NotificationShade,唤醒后确认secure=true、showing=true的密码锁屏。已请求用户解锁,没有声称测试通过,没有真实恢复截图。测试结束后已将默认输入法恢复为CyIME。

固定入口 auto.cmd --build-only 已完成1.9.9/20261101轻量Release构建及签名/版本/源码检查。文件 app/build/outputs/apk/editions/1.9.9/standard/release/CyIME-1.9.9-arm64-v8a.apk,111110857字节,SHA256 f3473ba093780e1d2015947125a343a590ad933be63791712139929cb3c07178。用户随后明确要求手机也安装:唯一连接设备为SM-S9180/R5CW13EYCSF,auto.cmd --install-only --serial R5CW13EYCSF 成功保留数据覆盖安装,固定入口核对设备APK哈希一致,再次读取实际版本为1.9.9/20261101且不含DEBUGGABLE。安装日志为 .codex-artifacts/interaction-geometry-20261008/phone-release-install.log。本次只执行用户要求的安装,未把之前受锁屏阻挡的真实四边核验或其他待重跑渲染用例标为通过;平板仍为Debug测试包,正式包待更新,用户未验收。