27 寸隐藏付款码输入框设计
背景
27 寸 RK3568 设备的扫码枪以外接键盘方式上报字符。当前按键转交方案在真机“我的营养”弹框中无响应,需要一个实际获得焦点的输入控件承接系统文本输入链路。
目标
- 仅在27寸键盘模拟扫码模式启用隐藏输入框。
- 自动获取焦点,不弹软键盘,不展示、保存或记录付款码。
- 回车完成一帧后立即停止接收并清空输入,再发起查询。
- 保留现有全局按键组帧链路作为失焦兜底。
- 21.5寸串口扫码保持不变。
方案比较
方案 A:隐藏输入框并保留按键链路兜底(采用)
隐藏 EditText 负责27寸主输入路径,现有 KeyboardWedgeScannerHub 负责失焦兜底,兼容文本输入和硬件按键两类派发方式。
方案 B:可见输入框
会改变布局并暴露个人动态付款码,不采用。
方案 C:继续仅依赖全局按键拦截
当前真机已经无响应,无法覆盖文本输入链路,不采用。
组件设计
隐藏输入控件
- 尺寸使用
@dimen/adaptive_size_1,透明但保持可聚焦。
- 单行输入,关闭建议、自动填充、光标和内容保存。
- 默认禁用,仅由27寸扫码控制器启用。
键盘模拟扫码控制器
KeyboardWedgeScannerController 负责输入框和 Hub 的完整生命周期。启动时清空、启用、禁止软键盘、注册监听并请求焦点;收到回车后先停止两条输入路径,再回调完整付款码;停止时解除监听、清空文本、清除焦点并禁用输入框。
识别弹框
FaceRecognitionPop 在键盘模拟模式下把隐藏输入框传给控制器;串口模式继续使用 SerialPaycodeScannerController。现有 resolvePaycode() 继续负责停扫、查询和跳转。
数据流
- 扫码枪向隐藏输入框写入字符并发送回车。
- 控制器读取非空文本,并在回调前停止输入框与 Hub。
- 识别弹框取得单次请求执行权并查询人员。
- 成功时进入营养报告;失败时提示并关闭弹框。
焦点与异常处理
- 页面恢复时启动控制器并请求焦点。
- 页面暂停、销毁、返回或扫码完成时统一停止。
- 空输入不提交;输入框失焦时由 Hub 链路兜底。
- 完成扫码后输入框禁用、Hub 监听解除,不会产生第二次请求。
测试与验证
- 增加纯 Java 输入提交规则测试。
- 运行键盘组帧、输入策略和设备模式测试。
- 使用 JDK 8 执行
:app:testDebugUnitTest assembleDebug。
- 真机验证27寸单次请求、失败关闭、重新进入可重扫,并回归21.5寸串口扫码。
范围外事项
- 不展示付款码输入框或付款码内容。
- 不修改后端、生产网关或设备配对数据。
- 不修改串口测试页。
- 不自动安装 APK,不执行 Git 写操作。