Goal:在 ZhctWeightingTableYoukate 设置页提供 A01、A02、A03 三个独立报警开关;关闭时只抑制锁屏报警,并执行对应的普通提示回退。
Why:让现场工作人员可以按项目需要启停不同防逃单规则,同时保持权限、状态和审计边界清晰。
Target:SetActivity 设置页、MMKV 本地配置、HomeActivity 防逃单报警入口和 A02 重量检测器。
Success criteria:
Non-goals:
Constraints:使用当前 Java 8、MMKV、SwitchButton 和本地日志体系;保留当前分支已有未提交改动;不执行 Git 提交或推送。
Evidence required:规则单测、完整 testDebugUnitTest、assembleDebug、设置页代码检查、Markdown/HTML 方案和变更记录。
Next route:/spec → /plan → /build → 验证。
| 类型 | 设置项 | 默认值 | 关闭后的行为 |
|---|---|---|---|
| A01 | 余额不足报警 | 开 | 不进入报警,复用 WarnPop 显示 1.5 秒“余额不足”,红灯闪 3 次,按普通语音开关播放一次余额不足语音 |
| A02 | 未放餐盘取餐报警 | 开 | 恢复原 1.5 秒提示页、单次放盘语音、红灯闪 3 次和重量变化日志 |
| A03 | 餐盘未绑定报警 | 开 | 恢复原 Toast、单次绑定语音、查询日志和既有上报,持续闪红灯至餐盘拿走 |
三个报警开关控制页面锁定、循环语音、红灯闪烁、活动快照和报警事件记录这一整套行为。开启时完整执行声光报警;关闭后的单次普通语音继续遵守总“语音开关”。
A01 无论开关开启还是关闭,页面都显示当前“余额”和“累计金额”。金额单行水平居中:正式报警页按当前 1600×1000 页面距底边约 240dp;关闭状态 WarnPop 位于“余额不足”标题下方的设计红框区域,字号为 22sp,距图片底边约 22dp。正式报警确认餐盘拿走后继续保留金额,同时显示刷卡处理提示。
关闭状态的灯光按防逃单业务规则强制执行,不受普通“灯光开关”拆分:A01、A02 复用现有红灯三次短闪;A03 复用报警级持续闪烁。A03 连续收到 3 个空扫码帧确认餐盘拿走后停止;应用退出或更换为另一餐盘时也停止。
A01 关闭状态复用 A02 的 WarnPop 页面结构和 1500ms 自动关闭时长,覆盖主文案为“余额不足”,并传入“余额:xx 元 累计:xx 元”明细。未传文案和明细参数时仍显示原“请先放置餐盘!”,已有 WarnPop 正在显示时不叠加第二层。
SwitchButton 视觉规格,三行分别显示 A01、A02、A03。true 读取。HomeActivity 每次进入前台时按 AlarmType 将三个开关刷新到内存,关闭时在创建报警对象前进入普通提示路径。NoTrayPickDetector,由 DarkPickBeforeFragment 恢复原重量变化提示;重新开启后使用新稳定重量建立报警基线。888888 的现有忽略和去重日志逻辑不变。只在工作人员真正改变开关时记录:
ANTI_ESCAPE_CONFIG|type=A01|enabled=false|source=SETTINGS
页面初始化 setChecked 不产生配置日志;关闭报警后遇到匹配条件也不额外写“已抑制”日志,避免 A02 高频重量数据造成日志膨胀。
JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./gradlew testDebugUnitTestJAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./gradlew assembleDebuggit diff --checkutils/Constants.javaactivity/SetActivity.javares/layout/activity_set.xmlres/values/strings.xmlactivity/HomeActivity.javaantiescape/、src/test/.../antiescape/888888 仍按非报警特殊码处理。