DishManagementActivity 菜谱识别切换同步实施记录
当前页面已移除全部菜品基础目录的强制前置同步;模式切换会立即更新学习记录、
AI SDK 特征和页面列表,并且只在完整成功后保存目标配置。
变更目标
- 移除当前页面的全部菜品基础目录强制同步。
- 页面进入后先显示本地学习记录。
- 打开/关闭菜谱识别时立即更新学习记录、AI SDK 特征和页面列表。
- 同步成功后才保存目标配置,失败恢复原模式和原数据。
业务代码变更
DishManagementActivity.java
- 初始化后立即绑定本地列表,不再等待网络同步。
- 删除
DishCatalogRepository.syncAllAsync()前置链路。 - 同步入口显式传入目标模式和同步原因。
- 打开模式先获取最新菜谱并过滤学习记录,关闭模式恢复全部学习记录。
- 模式切换成功后才写入配置,失败时静默恢复 RadioGroup。
- 同步期间禁用开关和同步入口。
- 最新菜谱完整
DishBean优先用于名称、价格和搜索。 - SDK 未激活时保留目标模式请求,激活后继续对应同步。
- 页面销毁后不再提交 UI 同步结果。
DishManagementSyncPolicy.java
- 关闭模式允许全部学习记录。
- 打开模式只允许菜谱编码集合内的学习记录。
- 空菜谱过滤全部学习记录。
- 六个菜谱分类合并为按菜品编码索引的完整菜品 Map。
DishManagementSyncPolicyTest.java
新增 4 项测试,覆盖全量放行、菜谱过滤、空菜谱和 UUID/数字 ID 菜品映射。
实际变更文件
app/src/main/java/com/cpt/aidishrecognition/activity/DishManagementActivity.javaapp/src/main/java/com/cpt/aidishrecognition/utils/DishManagementSyncPolicy.javaapp/src/test/java/com/cpt/aidishrecognition/utils/DishManagementSyncPolicyTest.javadocs/2026-07-23-dish-management-menu-switch-sync-plan.md/.htmldocs/dish_menu_recognition_flow_2026-04-29.md/.html
本次未修改 strings.xml;该文件原有的其他任务改动保持不变。
验证结果
| 验证项 | 结果 |
|---|---|
| 测试驱动红灯 | 策略类不存在时测试编译失败,确认新测试能够约束行为 |
| 聚焦测试 | DishManagementSyncPolicyTest 通过 |
| 完整单元测试 | 29 项,0 失败,0 错误,0 跳过 |
| Debug 构建 | BUILD SUCCESSFUL |
| APK | app/build/outputs/apk/debug/app-debug.apk |
| 差异检查 | 本次业务文件通过 |
未执行项
当前通过 ADB 检测到 3 台在线设备,但用户未指定本次安装和回归目标,
因此没有擅自安装 APK。
- 从“不打开”切换到“打开”。
- 从“打开”切换到“不打开”。
- 断网时恢复原选项和原数据。
- SDK 未激活后的恢复流程。
- 空菜谱下形成空学习数据。
结论
代码已按方案实施,自动化测试和 Debug 构建通过。 真机业务回归待指定目标设备后执行。