人脸授权码输入焦点修复记录
变更日期
2026-09-03
问题现象
设置页打开人脸识别授权弹框后,只能删除后两段授权码;前两段无法继续删除,也无法点击后重新输入。
根因
- 原分段监听器只支持输入满 4 位后向下一段跳转。
- 只有第 4 段拥有“删空后回到上一段”的特殊处理,第 2、3 段删空后不会继续向前移动焦点。
- 焦点切换时会把非当前输入框设为不可聚焦,导致用户无法点击前面的输入框修改内容。
- 原实现通过向下一段追加空格触发监听,并把后 3 段长度设为 5;该占位方式与仅允许字母数字的输入过滤规则存在冲突。
修复内容
CustomFaceActivationPop.java
- 四段输入统一绑定同一套前进、回退和点击聚焦逻辑。
- 任一非首段删空时,焦点立即退到上一段末尾,可连续退格删除完整旧授权码。
- 当前空段收到退格键时,同样退到上一段。
- 任一段输入满 4 位后自动进入下一段,最后一段保持当前焦点。
- 不再禁用非当前输入框,四段均可直接点击编辑。
- 删除空格占位触发逻辑,焦点下划线改为跟随真实焦点状态。
FaceActivationInputNavigator.java
新增不持有 Android View 的分段焦点计算类,统一前进与回退边界。
custom_input_face_activation_layout.xml
四段输入长度统一限制为 4 位,不再为占位空格预留第 5 位。
FaceActivationInputNavigatorTest.java
- 覆盖四段连续退格边界。
- 覆盖满 4 位自动前进和最后一段不越界。
验证
- 修复前:
emptySegment_deleteMovesBackwardAcrossEveryBoundary 在第 3 段退到第 2 段的断言失败。
- 修复后:隔离运行 JUnit,结果为
OK (2 tests)。
- 项目内目标单测通过:
./gradlew :app:testDebugUnitTest --tests com.cpt.aidishrecognition.view.FaceActivationInputNavigatorTest。
- Debug 安装包构建通过:
./gradlew :app:assembleDebug。
- 真机软键盘与触摸焦点交互待安装后人工验收。
影响范围
- 仅修改设置页人脸授权码四段输入弹框及其焦点导航测试。
- 不修改授权码格式、百度 SDK 激活调用、设置保存逻辑和支付流程。
Git 状态
本次未执行暂存、提交或推送。