A01/A02/A03 报警独立开关变更记录
变更目标
在现有防逃单报警体系上增加三个相互独立的本地开关,让工作人员可以分别启停 A01 余额不足、A02 未放餐盘取餐、A03 餐盘未绑定报警,并保持原有报警判定、解除码、声光和页面锁定逻辑不变。
代码变更
- 在基础设置页增加“防逃单报警”卡片,提供 A01、A02、A03 三个独立
SwitchButton。
- 新增三个 MMKV 配置键,均按默认开启读取;升级安装和首次启动不需要迁移数据。
- 新增
AlarmSwitchPolicy,集中维护报警类型到配置键的映射,避免三类报警读取串位。
HomeActivity 每次进入前台刷新三个开关。关闭后不锁页、不保存活动快照,也不产生报警触发和解除记录。
- A01 关闭时,命中余额规则后红灯闪 3 次并播放一次余额不足语音,不创建报警状态。
- A02 关闭时,恢复原 1.5 秒
WarnPop、单次放盘语音、红灯闪 3 次和重量变化日志,同时清除新报警检测基线。
- A03 关闭时,恢复原 Toast、单次绑定语音、查询日志和既有上报,并持续闪红灯;确认餐盘拿走、应用退出或更换餐盘时停止。
LightController 为有限次数闪烁增加临时优先级,防止称重线程的绿灯刷新打断 A01/A02 三次红灯;正式报警可抢占短闪。
- 工作人员实际改变开关时写一条本地配置审计日志:
ANTI_ESCAPE_CONFIG|type=A0x|enabled=true/false|source=SETTINGS。页面初始化和重复赋值不写日志。
行为边界
- 三个开关互不影响,关闭一个类型不会改变另外两个类型的报警能力。
- 开关是整套锁屏报警行为的主开关;开启时完整执行页面锁定、循环语音和红灯闪烁。关闭状态的单次普通语音遵守总“语音开关”,上述红灯规则按防逃单提示强制执行。
- A03 关闭状态的持续闪烁使用独立状态标记,只停止自身启动的灯光,不会误停正式报警灯。
- 设置页在活动报警页面锁定期间不可操作,所以配置只影响后续报警;关闭开关不会自动解除已经活动的报警。
- 特殊解除码
888888 的处理规则不变:仅在报警状态解除报警,非报警状态只按现有规则记录后忽略。
- 未增加服务端接口、数据库字段、网络依赖和远程配置。
测试覆盖
- A01、A02、A03 分别映射到独立配置键。
- 对应类型开启时允许触发,关闭时阻止触发,空类型不触发。
- A02 清除基线后必须先建立新的稳定基线,不能沿用旧重量差触发报警。
- 原有三类报警规则、解除码、快照和高频日志精简测试继续回归。
- 代码检查覆盖 A01/A02 红灯三闪、A03 持续闪烁的启动和餐盘拿走/换盘/退出停止,以及普通语音资源释放。
验证结果
- 已执行测试驱动验证:新增开关策略测试在实现前因目标类不存在而失败,实现后通过。
- JDK 8
testDebugUnitTest:53 条测试通过,0 失败、0 错误。
- JDK 8
assembleDebug:通过。
git diff --check:通过。
- 调试包:
app/build/outputs/apk/debug/app-debug.apk。
Git 边界
代码和文档均保留在当前分支工作区,未执行暂存、提交、推送、分支切换或历史改写。