Skip to content

fix: 修复 Android IME 可打印 ASCII 输入兼容性 - #81

Merged
Axixi2233 merged 1 commit into
Axixi2233:masterfrom
GBitCat:feature/ime-ascii-input
Aug 26, 2026
Merged

fix: 修复 Android IME 可打印 ASCII 输入兼容性#81
Axixi2233 merged 1 commit into
Axixi2233:masterfrom
GBitCat:feature/ime-ascii-input

Conversation

@GBitCat

@GBitCat GBitCat commented Aug 24, 2026

Copy link
Copy Markdown

背景

Android 系统软键盘可能通过两种路径提交字符:未知键的文本提交,以及带有可翻译键码的虚拟键事件。Linux 版 Sunshine 的 UTF-8 注入在部分应用中可能停留在 U+ Unicode 组合状态;同时,KEYCODE_PLUS 等虚拟键事件会绕过文本兼容路径,使 + 因缺少 Shift 而退化为 =

修改内容

EXT-IME-ASCII-INPUT

  • 将全部 95 个可打印 ASCII 字符(U+0020U+007E)映射为标准 US/QWERTY 键码及必要的 Shift 修饰位。
  • 同时接管 IME 文本提交和 Android 虚拟键盘产生的可打印 ASCII 单键事件,修复 @ 显示为 U++ 输入为 =,以及其他 Shift 符号可能丢失修饰位的问题。
  • 吞掉已经作为完整标准按键发送的虚拟键 KeyUp,避免重复释放或重复输入。
  • 在发送第一个按键包之前完整映射并翻译整段提交;任一字符不支持时整段回退原 UTF-8 路径,避免部分发送后重复回退。
  • 非 ASCII、控制字符、空输入和混合不支持内容保持项目原有 UTF-8 行为。
  • 扩展位于独立的 extensions.input 包,不依赖软键盘按键栏或视频视口扩展。

兼容性说明

扩展边界

  • 新增文件使用 EXTENSION DEVELOPMENT [EXT-IME-ASCII-INPUT] [ADDED]
  • Game.java 接入点使用成对的 [MODIFIED] BEGIN/END 标记。
  • dev/extensions/EXT-IME-ASCII-INPUT.md 独立登记扩展边界,便于单独审查和后续维护。

验证

在 Ubuntu 26.04 开发容器中,从上游 master 的干净分支执行:

gradle --no-daemon testNonRootDebugUnitTest assembleNonRootDebug

结果:

  • 构建成功。
  • 10 个 JVM 单元测试通过,0 失败;其中 7 个测试覆盖 ASCII 扩展。
  • 逐项验证全部 95 个可打印 ASCII,以及全部 21 个需要 Shift 的 US/QWERTY 符号。
  • git diff --check 通过。

@Axixi2233
Axixi2233 merged commit 9a93437 into Axixi2233:master Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants