feat/fix/perf: 字体加载、数字键盘/语音/导航、主题/按键音/候选/设置改进 - #53
Open
SandyYuR wants to merge 13 commits into
Open
Conversation
SandyYuR
force-pushed
the
pr/fx2-integrated
branch
from
August 29, 2026 08:44
4d73bc4 to
17c8cd3
Compare
SandyYuR
marked this pull request as ready for review
August 29, 2026 12:42
SandyYuR
marked this pull request as draft
August 29, 2026 14:36
SandyYuR
force-pushed
the
pr/fx2-integrated
branch
from
August 30, 2026 01:29
17c8cd3 to
0f8c2b5
Compare
SandyYuR
marked this pull request as ready for review
August 30, 2026 03:05
SandyYuR
marked this pull request as draft
August 30, 2026 08:35
SandyYuR
force-pushed
the
pr/fx2-integrated
branch
from
August 30, 2026 15:50
0053e70 to
2eb6299
Compare
SandyYuR
marked this pull request as ready for review
August 31, 2026 08:35
加大并行字体加载并协调 provider 就绪时机,降低键盘启动延迟;键盘刷新延后到新字体缓存就绪后再执行,并以 token 防止过期回调串扰。 同时修正预加载正确性:默认 provider 异步载入期间可能以临时空表算出字号回退值并写入结果缓存,掩盖用户配置值——现仅在 sizeMap 非空时写入缓存。 - 预加载复用单线程执行器,不再每次创建新线程 - clearCache() 后正在进行的加载会提前中止,不继续读取剩余字体文件
在键盘与编辑器状态变化间保留手动数字布局覆盖:NumericLayoutOverrideController 记住 manualKey 供 force() 回落复用,编辑器状态变化不再丢失数字布局设置。 修复 IME/语言切换的回归:onImeUpdate 经 clearForcedLayoutKey 清除层锁存时会回落到先前记住的 manualKey,把新输入法强制压回数字盘(如"中英切换后落在数字区")。现于 onImeUpdate 开头仅清除手动槽位记忆,会话级(数字编辑框)覆盖不受影响,ABC 键显式退出语义不变。 新增 KeyboardInputLifecycleTracker 及单元测试:区分真实输入法/submode 变化与 focus 重启产生的重复事件,重复事件不再误释放手动数字布局。
自定义布局中的 LayoutSwitchKey 可能引用预设选项之外的布局键,NumPadKey 也可能使用预设列表之外的 keysym。此前编辑器按 selectedItemPosition 取预设列表,未知值会被静默替换成第一个选项,再次保存时丢失配置。 现在 spinner 会把当前值作为额外选项保留:SwitchTargetOption 支持无 label 时直接显示 value,NumPadOption 覆写 toString 显示 label,未知值不再丢失。
ThemeManager 新增当前是否为已配置暗色主题的判断与一键日/夜切换(切换后自动停用跟随系统,IME 重建后仍生效)。 ButtonAction 注册 theme_toggle 动作:点击在已配置的亮/暗主题间切换,长按打开主题设置页;并加入可选动作与默认列表,替换原收尾项。新图标 ic_theme_light_dark_24 与字符串(含 zh-rCN:"亮色/暗色主题")随此提交加入。
支持导入、选择、持久化并对用户提供的按键音文件进行一致性排序(InputFeedbacks / AppPrefs / UserConfigFiles / 键盘设置界面均接入)。 播放改用 SoundPool,等待 onLoadComplete 完成后才发声:未就绪或加载失败时清理资源、回退系统按键音,避免无声或出错;相关字段加 @volatile 保证跨线程可见性。
候选栏默认不高亮候选,只有按空格切换候选后高亮才出现;参考 boomker 分支, 候选栏会在未移动选择时就高亮第一个(默认选中)候选项。现将该行为做成可选设置: - AppPrefs 新增 highlight_first_candidate 偏好项,默认关闭(保持原行为) - HorizontalCandidateComponent 分页/非分页候选事件均根据开关决定初始高亮索引 - KeyboardGroupFragment 将开关归入「工具栏与候选栏」分组 - 新增 8 种语言文案(中/英/繁/德/西/日/韩/俄)
Monet 编辑器新增"重置主题颜色"入口(reset_theme_colors),一键恢复默认配色映射。 同时修正 Monet 颜色下按压键高亮直接取映射色的错误表现——现按明暗模式附加透明度(暗色 0.2 / 亮色 0.12),按压反馈与标签可读性恢复正常。
候选栏及候选窗展示的注释(如中州韵的注音/形码拆分)原先与候选词共用 cand_font 及字号。注释通常比候选词更长,按大厂输入法习惯应使用更小 的字号与更易读的字体。新增 fontset 条目 comment_font / comment_font_size: - FontsetEditorActivity 增加 Comment Font 设置项,默认 14sp - CandidateItemUi / LabeledCandidateItemUi 用 TypefaceSpan + AbsoluteSizeSpan 仅为 comment 段应用独立字体与字号,候选词部分不受影响 - 新增 CustomTypefaceSpan 以兼容所有 API 级别 - 水平候选栏、展开候选窗、浮动候选窗均生效 - 新增 FontProviders.resolveCommentTypeface / commentFontSizePx 帮助函数, 统一 5 处重复的注释字体解析与字号换算
透明预设里的颜色(如 keyboardColor、keyShadowColor 默认为 0x00000000)在取色器 中调整色相/饱和度/明度时会一直沿用 alpha=0,预览和实际效果都看不到任何变化, 表现为"怎么调都调不出颜色"。 新增 ThemeColorEditorAlphaState 记录用户是否显式设置过透明度:未显式设置且当前 alpha 为 0 时,HSV 编辑按不透明处理;一旦用户拖动过透明度滑条或手输过 ARGB,就 完全保留其选择(包括故意设置的全透明)。程序化回填 ARGB 输入框不会被误判为用户 编辑。CustomThemeActivity 的内嵌取色器与独立的 ThemeColorEditorActivity 均已接入。 参考 boomker/fcitx5-android@a786eaf
TextKeyboard 布局状态由共享改为每实例持有,避免多实例串扰: - 新增 TextKeyboardLayoutState 并修复其 JVM 签名冲突 - 修复 TextKeyboard 构造期读取布局状态导致点击输入框崩溃 - 加固构造期单槽位,并同步 attach 播种顺序 - 新增 isPreview 标记:设置预览键盘不再接收数字覆盖 (setForcedLayoutKey / setNumericLayoutKey / dismiss / restore)广播, 布局文件变更刷新仍然覆盖预览
语音输入会话结束后恢复会话前的键盘布局;同输入框重启时保留语音布局快照, 不因重启清空用户当前看到的布局。
保留设置界面退出时的兜底保存,避免非 Fragment 配置在离开页面时丢失。 新增选择性保存入口,继续保存输入法配置和非 Rime 插件状态,但跳过 Rime 的用户数据同步。 完整保存逻辑保持不变,关机和导出用户数据仍会保存所有插件状态。
SandyYuR
force-pushed
the
pr/fx2-integrated
branch
from
September 1, 2026 09:17
2eb6299 to
114c48f
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.
概述
本 PR 汇总 fx2 分支领先 fx 分支的改动,按类型整理后共 13 个提交(未包含仅适用于本 fork 的 webeditor Pages 改动)。
改动内容
字体(perf / feat)
数字键盘(fix / refactor)
主题(feat / fix)
设置(fix)
按键音(feat)
候选(feat)
测试
Commits