From 82aeeba816e75a2f931925bd7ce5e9c3c0bdf1c5 Mon Sep 17 00:00:00 2001 From: herry Date: Sat, 14 Nov 2026 12:21:06 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=AE=B0=E5=BD=95=E7=8B=AC=E7=AB=8B?= =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=A0=91=E6=A8=A1=E6=8B=9F=E5=99=A8=E9=AA=8C?= =?UTF-8?q?=E6=94=B6=E5=8F=8A=E5=95=86=E7=94=A8=E8=AE=B8=E5=8F=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NOTICE.md | 6 +- PUBLIC_SOURCE_MANIFEST.json | 6 +- README.md | 4 +- docs/PUBLIC_RELEASE_1.1.0.md | 11 + docs/public-validation.json | 2231 ++++++++++++++++++++++++++++++++++ 5 files changed, 2251 insertions(+), 7 deletions(-) create mode 100644 docs/PUBLIC_RELEASE_1.1.0.md create mode 100644 docs/public-validation.json diff --git a/NOTICE.md b/NOTICE.md index d269ef4..eac390a 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -8,9 +8,9 @@ | 内容 | 作者/项目 | 许可与位置 | | --- | --- | --- | -| CrabKeyboard V5词库和原始读取器 | kqakqakqa、crabKun | MIT,`third_party/crabKeyboard/LICENSE` | -| 本地候选排序词频 | jieba 0.42.1 / Sun Junyi | MIT,`third_party/jieba/LICENSE` | -| 操作图标 | Remix Icon v4.6.0,对应iconfont公开矢量 | Apache-2.0,`third_party/remix-icon/LICENSE`;矢量改色并转换PNG,来源/哈希见同目录`icons.json` | +| CrabKeyboard V5词库和原始读取器 | kqakqakqa、crabKun | MIT,`com.sydxky.rtos.inputmethod/third_party/crabKeyboard/LICENSE` | +| 本地候选排序词频 | jieba 0.42.1 / Sun Junyi | MIT,`com.sydxky.rtos.inputmethod/third_party/jieba/LICENSE` | +| 操作图标 | Remix Icon v4.6.0,对应iconfont公开矢量 | Apache-2.0,`com.sydxky.rtos.inputmethod/third_party/remix-icon/LICENSE`;矢量改色并转换PNG,来源/哈希见同目录`icons.json` | 14键参考公开演示中的相邻字母分组,自行实现离线消歧;不包含华为内部模型或固件代码。Glyphix/厂商SDK与运行时不包含在本项目MIT授权中,也不随源码分发,使用者需自行取得适用的厂商授权。 diff --git a/PUBLIC_SOURCE_MANIFEST.json b/PUBLIC_SOURCE_MANIFEST.json index c3e4a96..62be6df 100644 --- a/PUBLIC_SOURCE_MANIFEST.json +++ b/PUBLIC_SOURCE_MANIFEST.json @@ -6,8 +6,8 @@ "files": { ".gitignore": "5fc1922c8c233ebab1a7a6d3f15f83a727039ad0b5be612bcb274706080c37fc", "LICENSE": "fbe0034e81020ac52847583ed5a8dab0e212266623b475381c0a468a800f67df", - "NOTICE.md": "a16fb81a4ac41e6ebd8730c76194def41ba1abf61221d5c8f658907287c6ac03", - "README.md": "027180cde6817890733b364dfe9f3bde016d7c1c39b13a87ea258d9e00f49db8", + "NOTICE.md": "c1259ed34498181695d1f04ba60301124525a7e84d383c698fd0202169b652b7", + "README.md": "42d8bfa45434241de50ca6811af21cdeff01ca183885dcceb284db474e582383", "build-rtos-game.ps1": "207ff9875af96221559f314364c932fe37bfc22c698ad1afabb9aeec40a8679e", "com.sydxky.rtos.imefixture/build.ps1": "36b41ff37b153c1030756e641d2bb8d8a5404425905897e1f99e728c96493dad", "com.sydxky.rtos.imefixture/glyphix.config.js": "c402178dc7457c56d9762b464a868b0c9ade304597d81ed46f0af04971fcddcf", @@ -117,7 +117,9 @@ "com.sydxky.rtos.inputmethod/third_party/remix-icon/icons.json": "e80556881b6db1a87e5308679d55e3d2b6bed130a4421407451eae9b0e41ff5a", "com.sydxky.rtos.inputmethod/third_party/remix-icon/keyboard-box-line.iconfont.svg": "813d79347c357a919317edf84252a505dbdc441c1144076b4e8389a8ce217de0", "com.sydxky.rtos.inputmethod/third_party/remix-icon/keyboard-box-line.upstream.svg": "e39f28cbf418269405f517126a64cbf4b3332b3295cc8a3af670f77344a669c4", + "docs/PUBLIC_RELEASE_1.1.0.md": "546906aa92b5aa7d3edf1dcf91b264fd80c6b837908ca441b0309397d12644e4", "docs/UI_PREVIEW.png": "7853297cccbc52122e17605db677a1be723cacdd82dae36efb8fc7ec300ad1ab", + "docs/public-validation.json": "ade9c563773b71fe32a6293eb25a4a7b96051bb91422f9fd157c7d0c45c185f0", "tests/emulator-validate.py": "dfc550b5873f1d03254e8bc6f819139992a1648b9a10b168575cda8e35224f50" }, "sensitive_findings": [] diff --git a/README.md b/README.md index 61695c4..aa0b417 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ cd crab-input-rtos ## 构建 -准备Windows PowerShell 7、Node.js和Python 3。厂商Glyphix SDK不随仓库分发;自行取得适用授权后,将含`bin/gx.exe`与`share/`的完整SDK放在`temp/glyphix-v0.7.2-windows-x64/`。本版验证使用`gx v0.10.1 / 3ed38835`,需要`generic-watch-466x466-quickapp`和`generic-watch-390x450-quickapp`配置。 +准备Windows PowerShell 7、Node.js和Python 3。建议克隆到较短路径(例如`F:\Project\crab-input-rtos`),厂商图像工具在过长Windows路径可能失败。厂商Glyphix SDK不随仓库分发;自行取得适用授权后,将含`bin/gx.exe`与`share/`的完整SDK放在`temp/glyphix-v0.7.2-windows-x64/`。本版验证使用`gx v0.10.1 / 3ed38835`,需要`generic-watch-466x466-quickapp`和`generic-watch-390x450-quickapp`配置。 ```powershell & .\com.sydxky.rtos.inputmethod\build.ps1 @@ -51,6 +51,6 @@ python .\com.sydxky.rtos.inputmethod\tests\native.py --work work/native --output python .\com.sydxky.rtos.inputmethod\tests\visual.py --work work/visual --output work/evidence/visual ``` -视觉脚本需要Pillow。运行时保持8192 KiB内存,不接管其他占用Inspector 14201的进程。1.1.0原产品四配置84项原生操作、84项操作后布局、44个视觉状态均通过,见[验收记录](./com.sydxky.rtos.inputmethod/VALIDATION_1.1.0.md)。公开仓库用最小参考页替换内部参考应用,发布前另行验证公开树构建及原生测试。 +视觉脚本需要Pillow。运行时保持8192 KiB内存,不接管其他占用Inspector 14201的进程。1.1.0原产品四配置84项原生操作、84项操作后布局、44个视觉状态均通过,见[验收记录](./com.sydxky.rtos.inputmethod/VALIDATION_1.1.0.md)。公开仓库使用最小参考页,已重新完成独立源码四配置构建、84/84原生操作、84/84布局和44/44视觉状态,见[公开树验收](./docs/PUBLIC_RELEASE_1.1.0.md)。 真机安装、目标固件性能/续航和商店审核尚未验收。详细接入、词库与14键说明见[应用文档](./com.sydxky.rtos.inputmethod/README.md)和[14键算法](./com.sydxky.rtos.inputmethod/KEYBOARD_14.md)。 diff --git a/docs/PUBLIC_RELEASE_1.1.0.md b/docs/PUBLIC_RELEASE_1.1.0.md new file mode 100644 index 0000000..71178e4 --- /dev/null +++ b/docs/PUBLIC_RELEASE_1.1.0.md @@ -0,0 +1,11 @@ +# 1.1.0独立开源树验收 + +2026-11-14,重新从独立公开源码生成完整词库、执行逻辑回归并构建普通/QuickApp圆屏和方屏四目标。未导出内部主仓库历史、其他业务应用、服务端代码、凭据或SDK。 + +- 原始41个词库文件不变;两种索引分别回读验证全部104,837组索引及163,238候选项,6779分片,最大116,686字节。 +- 40项引擎断言、29项UX脚本断言通过;四配置构建通过。 +- 独立源码原生操作84/84、操作后布局84/84、视觉状态44/44通过,内存8192 KiB。 +- 使用本仓库最小离线参考页进行真实应用切换;参考页从自己的应用上下文启动输入应用返回,验证私密输入在切换时清除。没有调用输入页生命周期来代替真实切换。 +- 完整结果与实际运行包SHA-256见`docs/public-validation.json`;截图/控件树在发行版证据ZIP中。几何检查包含有效可见父级与全部父容器裁切、圆屏安全区和指定边缘像素采样。 + +MIT允许商用,须保留许可及原作者署名;Remix Icon按Apache-2.0单独许可。厂商SDK和运行时不随源码分发。当前仅完成模拟器及提交包,未完成RTOS真机或商店审核。 diff --git a/docs/public-validation.json b/docs/public-validation.json new file mode 100644 index 0000000..85a5a37 --- /dev/null +++ b/docs/public-validation.json @@ -0,0 +1,2231 @@ +{ + "version": "1.1.0", + "public_tree": true, + "vendor": "gx v0.10.1 / 3ed38835", + "memory_profile_kib": 8192, + "engine_assertions": 40, + "ux_assertions": 29, + "native_cases": [ + { + "profile": "round", + "case": "auto-open", + "passed": true, + "checks": [ + "IME_CHECK field opens full screen T9", + "IME_CHECK duplicate opener guarded" + ] + }, + { + "profile": "round", + "case": "t9-phrase", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK frequency ranks common phrase first", + "IME_CHECK native candidate commits phrase" + ] + }, + { + "profile": "round", + "case": "continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK prefix phrase retained", + "IME_CHECK dictionary settled", + "IME_CHECK only matched pinyin consumed", + "IME_CHECK remaining syllables compose" + ] + }, + { + "profile": "round", + "case": "complete-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK full list paginated", + "IME_CHECK last candidate page accessible" + ] + }, + { + "profile": "round", + "case": "candidate-select", + "passed": true, + "checks": [ + "IME_CHECK last original candidate can commit" + ] + }, + { + "profile": "round", + "case": "full-pinyin", + "passed": true, + "checks": [ + "IME_CHECK standard 10-9-7 QWERTY order", + "IME_CHECK dictionary settled", + "IME_CHECK long phrase in full dictionary", + "IME_CHECK native full pinyin commit" + ] + }, + { + "profile": "round", + "case": "14-key-phrase", + "passed": true, + "checks": [ + "IME_CHECK 14-key mode has fourteen real buttons", + "IME_CHECK dictionary settled", + "IME_CHECK paired ambiguity retains both valid phrases", + "IME_CHECK 14-key uncommitted input blocks finish", + "IME_CHECK 14-key mode switch preserves composition", + "IME_CHECK native 14-key phrase commit" + ] + }, + { + "profile": "round", + "case": "14-key-continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK dictionary settled", + "IME_CHECK 14-key consumes five matched keys only", + "IME_CHECK 14-key continuous phrase commit" + ] + }, + { + "profile": "round", + "case": "14-key-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK 14-key full dictionary candidates", + "IME_CHECK 14-key first full candidate page", + "IME_CHECK 14-key native next candidate page", + "IME_CHECK 14-key native previous candidate page", + "IME_CHECK 14-key expanded candidate commit" + ] + }, + { + "profile": "round", + "case": "english", + "passed": true, + "checks": [ + "IME_CHECK English follows standard QWERTY", + "IME_CHECK uppercase and lowercase native keys" + ] + }, + { + "profile": "round", + "case": "symbols", + "passed": true, + "checks": [ + "IME_CHECK ASCII and Chinese punctuation native keys" + ] + }, + { + "profile": "round", + "case": "cursor-unicode", + "passed": true, + "checks": [ + "IME_CHECK Unicode-safe deletion", + "IME_CHECK insertion at moved cursor" + ] + }, + { + "profile": "round", + "case": "hold-delete", + "passed": true, + "checks": [ + "IME_CHECK hold repeats delete", + "IME_CHECK release stops repeats" + ] + }, + { + "profile": "round", + "case": "length-and-mode", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK overlong candidate not truncated", + "IME_CHECK uncommitted composition not dropped", + "IME_CHECK mode switch preserves uncommitted composition" + ] + }, + { + "profile": "round", + "case": "learning", + "passed": true, + "checks": [ + "IME_CHECK learning defaults off", + "IME_CHECK learning opt-in", + "IME_CHECK dictionary settled", + "IME_CHECK only chosen candidate learned", + "IME_CHECK learning cleared" + ] + }, + { + "profile": "round", + "case": "cancel", + "passed": true, + "checks": [ + "IME_CHECK cancel keeps original document" + ] + }, + { + "profile": "round", + "case": "numeric", + "passed": true, + "checks": [ + "IME_CHECK numeric field auto keyboard", + "IME_CHECK numeric result returned" + ] + }, + { + "profile": "round", + "case": "password-privacy", + "passed": true, + "checks": [ + "IME_CHECK secret preview masked", + "IME_CHECK secret cannot enable learning", + "IME_CHECK secret erased on actual app switch" + ] + }, + { + "profile": "round", + "case": "long-text-clear", + "passed": true, + "checks": [ + "IME_CHECK long text preview bounded", + "IME_CHECK clear needs confirmation", + "IME_CHECK confirmed clear" + ] + }, + { + "profile": "round", + "case": "lookup-performance", + "passed": true, + "checks": [ + "IME_CHECK lookup nihao", + "IME_CHECK lookup zhongguo", + "IME_CHECK lookup shijie", + "IME_CHECK lookup shurufa", + "IME_CHECK lookup beijing", + "IME_CHECK lookup tianqi", + "IME_CHECK lookup shanghai", + "IME_CHECK lookup gongzuo", + "IME_CHECK bounded decoded shard cache", + "IME_CHECK emulator lookup under one second" + ] + }, + { + "profile": "round", + "case": "finish-save", + "passed": true, + "checks": [ + "IME_CHECK finished text returned to opener", + "IME_CHECK explicit local draft save" + ] + }, + { + "profile": "rect", + "case": "auto-open", + "passed": true, + "checks": [ + "IME_CHECK field opens full screen T9", + "IME_CHECK duplicate opener guarded" + ] + }, + { + "profile": "rect", + "case": "t9-phrase", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK frequency ranks common phrase first", + "IME_CHECK native candidate commits phrase" + ] + }, + { + "profile": "rect", + "case": "continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK prefix phrase retained", + "IME_CHECK dictionary settled", + "IME_CHECK only matched pinyin consumed", + "IME_CHECK remaining syllables compose" + ] + }, + { + "profile": "rect", + "case": "complete-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK full list paginated", + "IME_CHECK last candidate page accessible" + ] + }, + { + "profile": "rect", + "case": "candidate-select", + "passed": true, + "checks": [ + "IME_CHECK last original candidate can commit" + ] + }, + { + "profile": "rect", + "case": "full-pinyin", + "passed": true, + "checks": [ + "IME_CHECK standard 10-9-7 QWERTY order", + "IME_CHECK dictionary settled", + "IME_CHECK long phrase in full dictionary", + "IME_CHECK native full pinyin commit" + ] + }, + { + "profile": "rect", + "case": "14-key-phrase", + "passed": true, + "checks": [ + "IME_CHECK 14-key mode has fourteen real buttons", + "IME_CHECK dictionary settled", + "IME_CHECK paired ambiguity retains both valid phrases", + "IME_CHECK 14-key uncommitted input blocks finish", + "IME_CHECK 14-key mode switch preserves composition", + "IME_CHECK native 14-key phrase commit" + ] + }, + { + "profile": "rect", + "case": "14-key-continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK dictionary settled", + "IME_CHECK 14-key consumes five matched keys only", + "IME_CHECK 14-key continuous phrase commit" + ] + }, + { + "profile": "rect", + "case": "14-key-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK 14-key full dictionary candidates", + "IME_CHECK 14-key first full candidate page", + "IME_CHECK 14-key native next candidate page", + "IME_CHECK 14-key native previous candidate page", + "IME_CHECK 14-key expanded candidate commit" + ] + }, + { + "profile": "rect", + "case": "english", + "passed": true, + "checks": [ + "IME_CHECK English follows standard QWERTY", + "IME_CHECK uppercase and lowercase native keys" + ] + }, + { + "profile": "rect", + "case": "symbols", + "passed": true, + "checks": [ + "IME_CHECK ASCII and Chinese punctuation native keys" + ] + }, + { + "profile": "rect", + "case": "cursor-unicode", + "passed": true, + "checks": [ + "IME_CHECK Unicode-safe deletion", + "IME_CHECK insertion at moved cursor" + ] + }, + { + "profile": "rect", + "case": "hold-delete", + "passed": true, + "checks": [ + "IME_CHECK hold repeats delete", + "IME_CHECK release stops repeats" + ] + }, + { + "profile": "rect", + "case": "length-and-mode", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK overlong candidate not truncated", + "IME_CHECK uncommitted composition not dropped", + "IME_CHECK mode switch preserves uncommitted composition" + ] + }, + { + "profile": "rect", + "case": "learning", + "passed": true, + "checks": [ + "IME_CHECK learning defaults off", + "IME_CHECK learning opt-in", + "IME_CHECK dictionary settled", + "IME_CHECK only chosen candidate learned", + "IME_CHECK learning cleared" + ] + }, + { + "profile": "rect", + "case": "cancel", + "passed": true, + "checks": [ + "IME_CHECK cancel keeps original document" + ] + }, + { + "profile": "rect", + "case": "numeric", + "passed": true, + "checks": [ + "IME_CHECK numeric field auto keyboard", + "IME_CHECK numeric result returned" + ] + }, + { + "profile": "rect", + "case": "password-privacy", + "passed": true, + "checks": [ + "IME_CHECK secret preview masked", + "IME_CHECK secret cannot enable learning", + "IME_CHECK secret erased on actual app switch" + ] + }, + { + "profile": "rect", + "case": "long-text-clear", + "passed": true, + "checks": [ + "IME_CHECK long text preview bounded", + "IME_CHECK clear needs confirmation", + "IME_CHECK confirmed clear" + ] + }, + { + "profile": "rect", + "case": "lookup-performance", + "passed": true, + "checks": [ + "IME_CHECK lookup nihao", + "IME_CHECK lookup zhongguo", + "IME_CHECK lookup shijie", + "IME_CHECK lookup shurufa", + "IME_CHECK lookup beijing", + "IME_CHECK lookup tianqi", + "IME_CHECK lookup shanghai", + "IME_CHECK lookup gongzuo", + "IME_CHECK bounded decoded shard cache", + "IME_CHECK emulator lookup under one second" + ] + }, + { + "profile": "rect", + "case": "finish-save", + "passed": true, + "checks": [ + "IME_CHECK finished text returned to opener", + "IME_CHECK explicit local draft save" + ] + }, + { + "profile": "round-quickapp", + "case": "auto-open", + "passed": true, + "checks": [ + "IME_CHECK field opens full screen T9", + "IME_CHECK duplicate opener guarded" + ] + }, + { + "profile": "round-quickapp", + "case": "t9-phrase", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK frequency ranks common phrase first", + "IME_CHECK native candidate commits phrase" + ] + }, + { + "profile": "round-quickapp", + "case": "continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK prefix phrase retained", + "IME_CHECK dictionary settled", + "IME_CHECK only matched pinyin consumed", + "IME_CHECK remaining syllables compose" + ] + }, + { + "profile": "round-quickapp", + "case": "complete-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK full list paginated", + "IME_CHECK last candidate page accessible" + ] + }, + { + "profile": "round-quickapp", + "case": "candidate-select", + "passed": true, + "checks": [ + "IME_CHECK last original candidate can commit" + ] + }, + { + "profile": "round-quickapp", + "case": "full-pinyin", + "passed": true, + "checks": [ + "IME_CHECK standard 10-9-7 QWERTY order", + "IME_CHECK dictionary settled", + "IME_CHECK long phrase in full dictionary", + "IME_CHECK native full pinyin commit" + ] + }, + { + "profile": "round-quickapp", + "case": "14-key-phrase", + "passed": true, + "checks": [ + "IME_CHECK 14-key mode has fourteen real buttons", + "IME_CHECK dictionary settled", + "IME_CHECK paired ambiguity retains both valid phrases", + "IME_CHECK 14-key uncommitted input blocks finish", + "IME_CHECK 14-key mode switch preserves composition", + "IME_CHECK native 14-key phrase commit" + ] + }, + { + "profile": "round-quickapp", + "case": "14-key-continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK dictionary settled", + "IME_CHECK 14-key consumes five matched keys only", + "IME_CHECK 14-key continuous phrase commit" + ] + }, + { + "profile": "round-quickapp", + "case": "14-key-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK 14-key full dictionary candidates", + "IME_CHECK 14-key first full candidate page", + "IME_CHECK 14-key native next candidate page", + "IME_CHECK 14-key native previous candidate page", + "IME_CHECK 14-key expanded candidate commit" + ] + }, + { + "profile": "round-quickapp", + "case": "english", + "passed": true, + "checks": [ + "IME_CHECK English follows standard QWERTY", + "IME_CHECK uppercase and lowercase native keys" + ] + }, + { + "profile": "round-quickapp", + "case": "symbols", + "passed": true, + "checks": [ + "IME_CHECK ASCII and Chinese punctuation native keys" + ] + }, + { + "profile": "round-quickapp", + "case": "cursor-unicode", + "passed": true, + "checks": [ + "IME_CHECK Unicode-safe deletion", + "IME_CHECK insertion at moved cursor" + ] + }, + { + "profile": "round-quickapp", + "case": "hold-delete", + "passed": true, + "checks": [ + "IME_CHECK hold repeats delete", + "IME_CHECK release stops repeats" + ] + }, + { + "profile": "round-quickapp", + "case": "length-and-mode", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK overlong candidate not truncated", + "IME_CHECK uncommitted composition not dropped", + "IME_CHECK mode switch preserves uncommitted composition" + ] + }, + { + "profile": "round-quickapp", + "case": "learning", + "passed": true, + "checks": [ + "IME_CHECK learning defaults off", + "IME_CHECK learning opt-in", + "IME_CHECK dictionary settled", + "IME_CHECK only chosen candidate learned", + "IME_CHECK learning cleared" + ] + }, + { + "profile": "round-quickapp", + "case": "cancel", + "passed": true, + "checks": [ + "IME_CHECK cancel keeps original document" + ] + }, + { + "profile": "round-quickapp", + "case": "numeric", + "passed": true, + "checks": [ + "IME_CHECK numeric field auto keyboard", + "IME_CHECK numeric result returned" + ] + }, + { + "profile": "round-quickapp", + "case": "password-privacy", + "passed": true, + "checks": [ + "IME_CHECK secret preview masked", + "IME_CHECK secret cannot enable learning", + "IME_CHECK secret erased on actual app switch" + ] + }, + { + "profile": "round-quickapp", + "case": "long-text-clear", + "passed": true, + "checks": [ + "IME_CHECK long text preview bounded", + "IME_CHECK clear needs confirmation", + "IME_CHECK confirmed clear" + ] + }, + { + "profile": "round-quickapp", + "case": "lookup-performance", + "passed": true, + "checks": [ + "IME_CHECK lookup nihao", + "IME_CHECK lookup zhongguo", + "IME_CHECK lookup shijie", + "IME_CHECK lookup shurufa", + "IME_CHECK lookup beijing", + "IME_CHECK lookup tianqi", + "IME_CHECK lookup shanghai", + "IME_CHECK lookup gongzuo", + "IME_CHECK bounded decoded shard cache", + "IME_CHECK emulator lookup under one second" + ] + }, + { + "profile": "round-quickapp", + "case": "finish-save", + "passed": true, + "checks": [ + "IME_CHECK finished text returned to opener", + "IME_CHECK explicit local draft save" + ] + }, + { + "profile": "rect-quickapp", + "case": "auto-open", + "passed": true, + "checks": [ + "IME_CHECK field opens full screen T9", + "IME_CHECK duplicate opener guarded" + ] + }, + { + "profile": "rect-quickapp", + "case": "t9-phrase", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK frequency ranks common phrase first", + "IME_CHECK native candidate commits phrase" + ] + }, + { + "profile": "rect-quickapp", + "case": "continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK prefix phrase retained", + "IME_CHECK dictionary settled", + "IME_CHECK only matched pinyin consumed", + "IME_CHECK remaining syllables compose" + ] + }, + { + "profile": "rect-quickapp", + "case": "complete-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK full list paginated", + "IME_CHECK last candidate page accessible" + ] + }, + { + "profile": "rect-quickapp", + "case": "candidate-select", + "passed": true, + "checks": [ + "IME_CHECK last original candidate can commit" + ] + }, + { + "profile": "rect-quickapp", + "case": "full-pinyin", + "passed": true, + "checks": [ + "IME_CHECK standard 10-9-7 QWERTY order", + "IME_CHECK dictionary settled", + "IME_CHECK long phrase in full dictionary", + "IME_CHECK native full pinyin commit" + ] + }, + { + "profile": "rect-quickapp", + "case": "14-key-phrase", + "passed": true, + "checks": [ + "IME_CHECK 14-key mode has fourteen real buttons", + "IME_CHECK dictionary settled", + "IME_CHECK paired ambiguity retains both valid phrases", + "IME_CHECK 14-key uncommitted input blocks finish", + "IME_CHECK 14-key mode switch preserves composition", + "IME_CHECK native 14-key phrase commit" + ] + }, + { + "profile": "rect-quickapp", + "case": "14-key-continuous", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK dictionary settled", + "IME_CHECK 14-key consumes five matched keys only", + "IME_CHECK 14-key continuous phrase commit" + ] + }, + { + "profile": "rect-quickapp", + "case": "14-key-candidates", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK 14-key full dictionary candidates", + "IME_CHECK 14-key first full candidate page", + "IME_CHECK 14-key native next candidate page", + "IME_CHECK 14-key native previous candidate page", + "IME_CHECK 14-key expanded candidate commit" + ] + }, + { + "profile": "rect-quickapp", + "case": "english", + "passed": true, + "checks": [ + "IME_CHECK English follows standard QWERTY", + "IME_CHECK uppercase and lowercase native keys" + ] + }, + { + "profile": "rect-quickapp", + "case": "symbols", + "passed": true, + "checks": [ + "IME_CHECK ASCII and Chinese punctuation native keys" + ] + }, + { + "profile": "rect-quickapp", + "case": "cursor-unicode", + "passed": true, + "checks": [ + "IME_CHECK Unicode-safe deletion", + "IME_CHECK insertion at moved cursor" + ] + }, + { + "profile": "rect-quickapp", + "case": "hold-delete", + "passed": true, + "checks": [ + "IME_CHECK hold repeats delete", + "IME_CHECK release stops repeats" + ] + }, + { + "profile": "rect-quickapp", + "case": "length-and-mode", + "passed": true, + "checks": [ + "IME_CHECK dictionary settled", + "IME_CHECK overlong candidate not truncated", + "IME_CHECK uncommitted composition not dropped", + "IME_CHECK mode switch preserves uncommitted composition" + ] + }, + { + "profile": "rect-quickapp", + "case": "learning", + "passed": true, + "checks": [ + "IME_CHECK learning defaults off", + "IME_CHECK learning opt-in", + "IME_CHECK dictionary settled", + "IME_CHECK only chosen candidate learned", + "IME_CHECK learning cleared" + ] + }, + { + "profile": "rect-quickapp", + "case": "cancel", + "passed": true, + "checks": [ + "IME_CHECK cancel keeps original document" + ] + }, + { + "profile": "rect-quickapp", + "case": "numeric", + "passed": true, + "checks": [ + "IME_CHECK numeric field auto keyboard", + "IME_CHECK numeric result returned" + ] + }, + { + "profile": "rect-quickapp", + "case": "password-privacy", + "passed": true, + "checks": [ + "IME_CHECK secret preview masked", + "IME_CHECK secret cannot enable learning", + "IME_CHECK secret erased on actual app switch" + ] + }, + { + "profile": "rect-quickapp", + "case": "long-text-clear", + "passed": true, + "checks": [ + "IME_CHECK long text preview bounded", + "IME_CHECK clear needs confirmation", + "IME_CHECK confirmed clear" + ] + }, + { + "profile": "rect-quickapp", + "case": "lookup-performance", + "passed": true, + "checks": [ + "IME_CHECK lookup nihao", + "IME_CHECK lookup zhongguo", + "IME_CHECK lookup shijie", + "IME_CHECK lookup shurufa", + "IME_CHECK lookup beijing", + "IME_CHECK lookup tianqi", + "IME_CHECK lookup shanghai", + "IME_CHECK lookup gongzuo", + "IME_CHECK bounded decoded shard cache", + "IME_CHECK emulator lookup under one second" + ] + }, + { + "profile": "rect-quickapp", + "case": "finish-save", + "passed": true, + "checks": [ + "IME_CHECK finished text returned to opener", + "IME_CHECK explicit local draft save" + ] + } + ], + "native_layouts": [ + { + "profile": "round", + "case": "auto-open", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "t9-phrase", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "continuous", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "complete-candidates", + "page": "keyboard", + "buttons": 9, + "icons": 6, + "max_button_radius": 226.12, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "candidate-select", + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "full-pinyin", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "14-key-phrase", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "14-key-continuous", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "14-key-candidates", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "english", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "symbols", + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "cursor-unicode", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "hold-delete", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "length-and-mode", + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "learning", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "cancel", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "numeric", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 199.62, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "password-privacy", + "page": "main", + "buttons": 0, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "long-text-clear", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "lookup-performance", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round", + "case": "finish-save", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 199.62, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "auto-open", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "t9-phrase", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "continuous", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "complete-candidates", + "page": "keyboard", + "buttons": 9, + "icons": 6, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "candidate-select", + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "full-pinyin", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "14-key-phrase", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "14-key-continuous", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "14-key-candidates", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "english", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "symbols", + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "cursor-unicode", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "hold-delete", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "length-and-mode", + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "learning", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "cancel", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "numeric", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "password-privacy", + "page": "main", + "buttons": 0, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "long-text-clear", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "lookup-performance", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect", + "case": "finish-save", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "auto-open", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "t9-phrase", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "continuous", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "complete-candidates", + "page": "keyboard", + "buttons": 9, + "icons": 6, + "max_button_radius": 226.12, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "candidate-select", + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "full-pinyin", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "14-key-phrase", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "14-key-continuous", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "14-key-candidates", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "english", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "symbols", + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "cursor-unicode", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "hold-delete", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "length-and-mode", + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "learning", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "cancel", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "numeric", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 215.81, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "password-privacy", + "page": "main", + "buttons": 0, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "long-text-clear", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "lookup-performance", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true + }, + { + "profile": "round-quickapp", + "case": "finish-save", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 215.81, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "auto-open", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "t9-phrase", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "continuous", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "complete-candidates", + "page": "keyboard", + "buttons": 9, + "icons": 6, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "candidate-select", + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "full-pinyin", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "14-key-phrase", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "14-key-continuous", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "14-key-candidates", + "page": "keyboard", + "buttons": 25, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "english", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "symbols", + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "cursor-unicode", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "hold-delete", + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "length-and-mode", + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "learning", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "cancel", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "numeric", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "password-privacy", + "page": "main", + "buttons": 0, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "long-text-clear", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "lookup-performance", + "page": "keyboard", + "buttons": 20, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true + }, + { + "profile": "rect-quickapp", + "case": "finish-save", + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true + } + ], + "visual_screens": [ + { + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 199.62, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "home" + }, + { + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "t9" + }, + { + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "pinyin" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 226.12, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "candidates" + }, + { + "page": "keyboard", + "buttons": 14, + "icons": 3, + "max_button_radius": 227.86, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "tools" + }, + { + "page": "keyboard", + "buttons": 29, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "14-key" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 226.12, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "14-candidates" + }, + { + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "en" + }, + { + "page": "keyboard", + "buttons": 23, + "icons": 4, + "max_button_radius": 226.01, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "num" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "sym" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round", + "screen": "sym2" + }, + { + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "home" + }, + { + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "t9" + }, + { + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "pinyin" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "candidates" + }, + { + "page": "keyboard", + "buttons": 14, + "icons": 3, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "tools" + }, + { + "page": "keyboard", + "buttons": 29, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "14-key" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "14-candidates" + }, + { + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "en" + }, + { + "page": "keyboard", + "buttons": 23, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "num" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "sym" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect", + "screen": "sym2" + }, + { + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 215.81, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "home" + }, + { + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "t9" + }, + { + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "pinyin" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 226.12, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "candidates" + }, + { + "page": "keyboard", + "buttons": 14, + "icons": 3, + "max_button_radius": 227.86, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "tools" + }, + { + "page": "keyboard", + "buttons": 29, + "icons": 5, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "14-key" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 226.12, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "14-candidates" + }, + { + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "en" + }, + { + "page": "keyboard", + "buttons": 23, + "icons": 4, + "max_button_radius": 226.01, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "num" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "sym" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 224.08, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "round-quickapp", + "screen": "sym2" + }, + { + "page": "main", + "buttons": 6, + "icons": 0, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "home" + }, + { + "page": "keyboard", + "buttons": 24, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "t9" + }, + { + "page": "keyboard", + "buttons": 41, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "pinyin" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "candidates" + }, + { + "page": "keyboard", + "buttons": 14, + "icons": 3, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "tools" + }, + { + "page": "keyboard", + "buttons": 29, + "icons": 5, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "14-key" + }, + { + "page": "keyboard", + "buttons": 11, + "icons": 6, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "14-candidates" + }, + { + "page": "keyboard", + "buttons": 37, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "en" + }, + { + "page": "keyboard", + "buttons": 23, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "num" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "sym" + }, + { + "page": "keyboard", + "buttons": 30, + "icons": 4, + "max_button_radius": 0, + "failures": [], + "passed": true, + "dark_edge_pixels": 0, + "profile": "rect-quickapp", + "screen": "sym2" + } + ], + "artifacts": { + "round": { + "sha256": "D0D0BBCBACA78A3300F9CE7538BD39CC0810BCF9872B3B42F0E4ED040EDB0A51", + "bytes": 11042679 + }, + "rect": { + "sha256": "767D7A034D943D4B2D75CBE1EA623BEAAEF8CCBF0033B7944A3763513E74B291", + "bytes": 11038035 + }, + "round-quickapp": { + "sha256": "C82E78F47B4CDCBD33B6E39D2C08005CCFFD617608336A17CF5C4F808370E31F", + "bytes": 11046661 + }, + "rect-quickapp": { + "sha256": "A1CA39663B85D36FF464BE5D62949C7ADEFD2EFA7939C8E65ABD90DF41F192E8", + "bytes": 11045856 + } + }, + "real_device": false, + "store_review": false, + "passed": true +}