yenharvey
|
31aa4abe5e
|
refactor(android): 游戏键盘与云端服务配置从输入法服务里拆出
之前 QingjianInputMethodService 有 820 行,超过单文件 800 行的上限;游戏键盘的判断、浮层与按钮,
以及云联想、释义兜底、快捷翻译、语音识别的配置下发都写在服务里。
- GameMode:哪个应用用游戏键盘、建浮层、触摸区、拖动栏按钮与横屏应用登记;服务经 GameMode.Host 提供包名、写设置与重建键盘
- CloudServices:云端与语音识别配置交给引擎,配置页改了跟着换(与剪贴板的局域网同步无关)
- 服务里「写设置时不重建键盘」统一成 writeSettings,服务现在 726 行
不改行为;拖动栏「换回普通键盘」重建前也先收起面板,与功能面板里的开关一致。
测试:真机(小米,MIUI)试打框弹键盘正常;浏览器里功能面板开、关游戏键盘,设置里的应用列表随之增删、勾选状态正确;横屏浮层没在游戏里验
|
2026-11-05 13:59:39 +08:00 |
|
yenharvey
|
f2f430d47f
|
fix(android): 按住删除键连删时往上偏不再触发上划清空
之前按住删除键连删的过程中,手指只要往上偏过上滑距离,抬手就会清掉光标前的全部文字。
现在连删一开始(按下 400 ms 后),这一笔就不再算上划清空,只有按下后、连删前往上划才清空。
测试:真机按住删除键 0.7 秒后上移,只连删、不清空,候选条不出「撤销」。
|
2026-11-05 12:44:34 +08:00 |
|
yenharvey
|
71d60c38b3
|
feat(android): 九宫格已选音节加下划线、退格整段退回,删除键上划清空可撤销
之前九宫格在拼音列选定的音节与没定的看起来一样;退格把选定的音节一个字母一个字母地拆,退回成数字后还会换成默认读法(ni 变成 mi)。之前也没有一次删掉已上屏文字的办法,上屏联系人名字后按删除会连名字一起删,按重输不起作用。
- 九宫格:拼音行上选定的音节画下划线(渲染器新增 `PreeditStyle::Pinned`)
- 九宫格退格:先撤回已选的字,末尾是选定的音节就取消选定、整个退回成按键,可以重选,之后再逐个删键;删完它后面的键时自动接的分隔符一起去掉
- 退回成按键后,候选与拼音行仍按用户选过的写法排,`64` 还读 ni;打了新键就不再偏向
- 在拼音列选音节不再清掉前面选好还没上屏的词
- 删除键上划(「设置 → 键盘 → 手势 → 上划删除键清空」,缺省开)删掉光标前的全部文字,最多 5000 字;候选条给「撤销」,点了原样放回,包括按下那一下删掉的字;打拼音时上划只清拼音
- 候选条上放着联系人的电话邮箱或「撤销」时,删除键、重输键的第一下只收起它们,不删已上屏的字
测试:Core、会话层单元测试;真机(Android 16)九宫格 64426 选 ni、hao 后逐次退格;上划清空后撤销;上屏联系人后按重输、删除只收起号码。
|
2026-11-05 12:37:19 +08:00 |
|
yenharvey
|
d26e404abb
|
feat(android): 通讯录里的名字进候选,上屏后接着给电话、邮箱
之前只能靠导入词库或自定义短语打人名,Android 读不了系统通讯录。
- 「设置 → 词库 → 通讯录」打开时才申请读取联系人的权限,缺省关;Kotlin 在后台读名字、电话、邮箱,整份交给会话,通讯录变了自动重读
- Core 把 2–6 个汉字的名字收成一张小词库并进查词,全拼、简拼、双拼、九宫格都能打;整段对得上的名字排在第一页第二位,不压过原本的首选;与词库词重名时只出一个候选
- 名字读音先看多音字姓(曾、单、解、尉迟……),再看整词在词库里的读音,否则逐字取常见读音
- 候选右上角画人头,由壳画,所有主题都有
- 上屏名字后候选条接着给这个人的电话、邮箱(可单独关),点了才上屏;接着打字、按空格或光标前不再是这个名字就收起,空格、回车的含义不变
- 名字和号码只在内存里:上屏不记学习、不写输入日志,云联想请求里去掉名字,关掉开关即清掉
- 只给「仅在使用中允许」时 MIUI 在输入法后台启动那次返回空结果,读到零个时在键盘弹出时重读
测试:Core 与会话层单元测试;真机(Android 16,MIUI)九宫格 zengxiaoxian 出「曾小贤」排第二带人头,上屏后给出号码与邮箱,点号码上屏、按空格收起;在系统设置的搜索框里同样能打出。
Closes #876
|
2026-11-05 11:37:35 +08:00 |
|
yenharvey
|
c97ad80558
|
fix(android): 候选条里的 emoji 只画一份
- 渲染器能画出彩色 emoji 的系统上(报在 Android 17),位图里的 emoji 和壳用 Canvas 补画的那份上下错开,看起来像重影
- 位图里 emoji 候选改成全角空格占位,点击区域和宽度不变,彩色 emoji 只由壳画一次
Closes #902
|
2026-11-05 10:26:43 +08:00 |
|
yenharvey
|
ec1bb853a9
|
feat(android): 上滑按扇形判定、可选长按出大写,点拼音行挪光标
- 上滑只看方向不看列:离开按下点后一路在往上约 50° 的扇形里、往上过 18dp 就算,出的总是按下的键;中途偏出扇形作废,交给滑行或点按
- 手指一进扇形就撤掉等着的长按:慢慢斜着划时长按先弹气泡、手指再一歪就选上左边的大写,这是误触大写的来由
- 新设置「长按出大写」(缺省关):长按不滑抬手出大写;上滑仍是角标,两条手势各管各的,不随状态换含义
- 点拼音行挪光标:渲染器给出拼音行各字之间的位置(PreeditHit),Core 的 move_cursor_to_marked 换回缓冲区光标,全拼按字母、双拼按音节;纠错、辅码、注音、九宫格对不上就不挪
- 光标在开头时退格先挪到末尾再删:屏幕键盘没有方向键,不然退格会卡住
Closes #881
Closes #882
|
2026-11-04 20:33:39 +08:00 |
|
yenharvey
|
f121eb6a69
|
feat: Android 日志落盘并能打包发送,各端日志包附系统信息
反馈问题时拿不到日志:Android 的日志只进 logcat,用户不接电脑拿不出来;PC 的日志包里没有系统版本,没法排查。
Android:tracing 同时写 files/logs/ime.<日期>.log(按天、留 7 天,不经后台线程,没接住的异常记完再退),Kotlin 经 AppLog 写同一份;
应用一起来补记上回之后的进程退出原因(崩溃、ANR、被系统清理),输入法记弹出、收起、onEvaluateInputViewShown 不显示的原因。
文件缺省只记 info,开了「详细日志」才记 debug(会带打的字),开关存在单独的 prefs,免得触发键盘重建。
「数据 → 日志 → 打包日志」:发送给…(系统分享,QQ / 微信 / 邮件)排第一,手机上存下来的文件多数人找不到;也能存到手机。
包里是日志、设置清单(抹掉像密钥的项)与 device.txt(机型、系统、省电限制与待机分组、已启用输入法、实体键盘、随包数据清单),
每项单独取,读不到写 unknown,不让整包失败。
PC:打包到桌面时多一份 system.txt(版本、系统与 build 号、架构、区域,Windows 的 DPI,macOS 的机型,Linux 的发行版、桌面、会话与输入法框架)。
真机(小米 Android 16)验过打包、发送与存到手机;PC 只在 Windows 上验过 system.txt,macOS 与 Linux 分支没验。
有助于定位 #891(键盘有时候弹不出来),本身不修它。
Refs #891
|
2026-11-04 19:10:15 +08:00 |
|
yenharvey
|
8501c96cf0
|
fix(android): 类别为 0 但带文本标志的输入框照常组句,抖音直播间 26 键能打汉字
抖音直播间的输入框报 inputType=0x20000(类别 0,只有多行标志),原来非文本类别一律直输,字母原样上屏。
只有 inputType 整个是 0(终端一类要原始按键的)才直输;数字、电话、日期照旧。
九键不看这个判断,所以之前九键正常。真机在抖音直播间验过 26 键出组字串与候选。
Closes #867
|
2026-11-04 19:10:14 +08:00 |
|
yenharvey
|
684231b67a
|
fix(android): 换了手势 / 三键导航后键盘底边跟着重量,不被导航栏盖住
底边让出的导航栏高度只在建视图时量一次;换导航方式时输入法进程不一定重建视图,
从手势换到三键后,三键导航栏盖住最下一排键的下半截,要杀掉输入法进程才恢复。
每次弹键盘时重量一次,变了就重建视图。
小米 14 Pro(Android 16):改前手势 → 三键复现了遮挡;改后同一进程里三键 → 手势跟着重排,反方向没在改后再切一次。
Ref #771
|
2026-10-29 19:40:21 +08:00 |
|
yenharvey
|
59555b20fd
|
fix(android): 语音、快捷翻译没配好时在工具栏位置提示,点了进设置页
没填识别服务或云端大模型时点话筒、翻译,原来只弹一个 toast,一闪就过,用户反馈像点了没反应。
改成在工具栏的位置放一行提示,点它打开「语音识别」或「键盘设置」;5 秒后或出候选时收起。
键盘还没建起来时仍退回 toast。
|
2026-10-29 19:40:21 +08:00 |
|
yenharvey
|
1fdc98c0fe
|
feat(android): 键面字号与按键震动强度可在键盘设置里调
键面字号与候选字号分开,同样小 / 标准 / 大 / 特大四档,键上的字与按键气泡一起缩放;放不下的双拼韵母照旧按宽度缩。
震动强度分轻 / 标准 / 重,标准保持原来的预置效果;预置效果不能缩放,轻一档用合成振动缩小 tick,旧机器退回小振幅短震。
震动关着时不显示强度一项。
Closes #826
Closes #775
|
2026-10-29 19:40:20 +08:00 |
|
yenharvey
|
d6eacf2c09
|
feat(android): 键盘设置加拼写纠错开关,与 PC 同名同缺省
名字用 PC 的 [general] spelling_correction,缺省开;整份 InputOptions 交会话时调 Engine::set_spelling_correction。
放在「输入」里模糊音下面,说明文字与 PC 设置程序一致。
|
2026-10-29 19:40:20 +08:00 |
|
yenharvey
|
1b7fd5701d
|
feat(android): 空格滑动移动光标加开关,只认横向,组句中不响应
参考小米「全面屏键盘优化」的快捷移动光标:按住空格左右滑,每 14dp 挪一个字,缺省开,可在键盘设置关掉。
起判要求横向位移大于竖向,起手在空格上,与字母键起手的滑行输入、上滑输入分开。
组句中不响应:Core 有按字母挪拼音光标的能力,但安卓会话没接、候选条也不画拼音光标,接上要动会话、帧与渲染,不在这次范围;
原来的做法是先把拼音原样上屏再挪,会把没选的字母落进输入框,不如不动。
|
2026-10-29 19:40:20 +08:00 |
|
yenharvey
|
56c99635c8
|
feat(android): 电话、数字、日期时间输入框弹出直接是数字键盘
原来这类输入框也弹 26 键,要再点「123」;按 inputType 的类别判断,换输入框时照旧回到字母页,所以离开后是原来的键盘。
数字键盘仍有「返回」,需要字母(如带分机号的备注)还能换回去。
|
2026-10-29 19:40:20 +08:00 |
|
yenharvey
|
9309ec1cdd
|
feat(android): 工具栏可定制,功能面板「定制工具栏」里勾选要放的工具
工具栏中间一排按用户勾选的先后排,存 ToolbarTool 名字;没定制过仍是原来七个,「恢复默认」回到这七个。
全部工具比原来多常用语、切换输入法、设置,都是现有入口,不新增行为。
两头的 logo 与收起键盘固定不动,进功能面板与收起的位置不随定制变。
少于五个时平分中间那段,多于五个照旧横滑。
Closes #777
|
2026-10-29 19:40:20 +08:00 |
|
yenharvey
|
aac39240b1
|
feat(android): 符号面板改偶数列,加「左手便捷」布局把分类列放左边
符号一行改成偶数格(一字一格六格,网格窄了排四格;宽的四格或两格):目录里成对的括号引号都从偶数位起,偶数列就不会把【】《》“” 拆到两行。只是排列,不动位置语义,直接改默认。
分类放左边、返回挪左下是改按键位置,按用户定的原则不动默认(肌肉记忆),做成另一套键位排法 Settings.Arrangement:「默认」与「左手便捷」,在键盘设置的「按键 → 布局」和功能面板常用功能的「左手布局」里切。
左手便捷的符号面板:分类竖排成左边一列(Tabs 加 COLUMN 样式,可竖着拖),左下角是返回;右上的返回和右下的键盘图标是同一个功能,两个都去掉,右列只剩删除与锁定,也不再要底排。表情面板不变。
功能面板要就地改一个选项设置,PanelActions 加 setChoice(同 setToggle,写字符串值)。
|
2026-10-29 17:21:58 +08:00 |
|
yenharvey
|
cab2e498fa
|
feat(android): Shift 双击锁定、上滑输入角标、英文敲字母串、双拼键面可关、微软双拼 ; 占 Shift 位
用户群反馈的一批键盘问题,都直接改在默认键盘上(不动已有键的位置,微软双拼按用户定的跟方案走)。
Shift 改成三态:点一下单次,350 ms 内再点锁定(键亮着再加右上角一个品牌色小点,与只大写一次分开;微软双拼的 ; 同样显示),锁定时点一下解锁;单次的出过一个字母就熄。拼音、日语组句中 Shift 仍不响应,英文组句中可以,好敲大小写混着的串。
上滑输入(缺省开,可关):在键上往上划过 18dp、不偏出本列就上屏长按不滑直接抬手的那一项(字母键角标、九宫格数字)。要求起终点同列,与跨键的滑行区分;两者都成立时上滑优先,竖着相邻两键的滑行词很少。
英文模式之前敲验证码卡在:数字、标点会顶首选,首选是补全或纠错出的词,字母串被换掉。现在空格、数字、标点前都原样落下敲的字母,要词点候选;不改 Core 的英文候选,只改壳里这几个键怎么结束组句。
双拼键上的声韵母小字加开关(缺省显示)。
微软双拼照手机键盘的习惯把 ; 放到 Shift 位、二排回到九个键:点按永远是 ;,上滑是 Shift(快速上滑两次锁定)。没做成搜狗那样按组句状态换含义的键,同一个动作在什么时候都是同一个意思;其他用 ; 的方案键盘不变。
|
2026-10-29 17:21:58 +08:00 |
|
yenharvey
|
937b3ae119
|
fix(android): 删掉的剪贴板记录不再被收回来
键盘每次弹出都会读一遍系统剪贴板(监听在输入法没起来时收不到),用户删掉的那条若还是系统剪贴板的当前内容,下次弹键盘又被记回历史,看起来就是删除没生效。
同一份剪贴板按 ClipDescription 的时间戳只记一次;时间戳存在 prefs 里,输入法进程被杀重起后也认得。
用户再复制一次(时间戳变了)才重新记,与「删了就是不要」的预期一致;不去改 Rust 侧的历史存储,删除本来就落盘了。
|
2026-10-29 17:21:58 +08:00 |
|
yenharvey
|
95b2e19684
|
feat(phrases): 自定义短语改按权重排
固定位置 1–9 换成可以直接填的权重(1–999,新建 10,可以相同):同一个输入码下权重大的在前,
相同的按列表顺序,都排在普通候选前面;与短语同字的普通候选去掉,不再出两遍。
旧配置的 position 读进来换成权重(第 1 位是 10),保存时原地改成 weight、注释保留。
Android 常用语的输入码上限与 Core 一致(32 个字母),以前存下的超长码转换时跳过,不再让整组常用语挂不上。
|
2026-10-22 12:23:34 +08:00 |
|
yenharvey
|
a20a38acaf
|
docs(user): 用户文档按用户要做的事重新分组
功能越加越多,原来按早期设置页搭的结构塞不下:几个大页(按键、拼音方案、主题)越写越长,同一功能散在几页。
现在分为开始使用、打字、学语言、个性化、AI 服务、各平台、隐私与帮助、进阶八组,一个功能只在一页讲全,别处一句话加链接。
配置键名、文件路径、文件格式只放进阶组,其他页只写「设置 → 某页 → 某项」,面向普通用户不出现实现词。
设置程序的 ⓘ 链接表、各 README、issue 模板与代码注释里指向旧页面的链接一并改到新地址。
|
2026-10-21 20:06:25 +08:00 |
|
yenharvey
|
03c4074f59
|
docs: Android 用户文档、实现要点与移动端统一到 Rust 的计划
- 用户文档:Android 入门页,按键、快捷输入、统计与译词页补手机上的差异
- 设计与笔记:九宫格、语音与滑行、渲染与主题的手机部分,Android 实现要点与 crate 笔记
- 路线图与 contributing:记下 Android 进度,移动端键盘与面板将来统一到 Rust,共享规则不在壳里另写
|
2026-10-20 20:35:18 +08:00 |
|