style_dark_theme 分支更新总结
生成时间:2026-06-11
业务仓库:/Users/liang/AndroidStudioProjects/ZhctWeightingTableYoukate
当前分支:style_dark_theme
基线提交:a73b342 #VWCG-1043 第一版提交:适配硬件;变更网络变化状态监听方式;变更crash拦截和处理方式
范围说明
当前分支尚未产生独立提交,style_dark_theme、main、master、origin/master 都指向同一个基线提交 a73b342。本总结按当前工作区差异统计,包含已暂存的新文件和未暂存修改。
变更规模约为:
- Java/XML/资源等共 49 个已修改文件,约 3648 行新增、201 行删除。
- 另有 24 个已暂存新增文件,包括深色主题 Fragment、自定义 View、深色背景/图标资源和深色主题布局。
1. 首页深色主题模块
核心变更集中在首页取餐前、取餐中页面的深色主题替换。
- 新增
fragment/dark/DarkPickBeforeFragment,作为打餐前深色页面。 - 新增
fragment/dark/DarkPickOngoingNoPriceFragment,作为无价格展示模式下的打餐中深色页面。 - 新增
fragment/dark/DarkPickOngoingWithPriceFragment,作为带价格/余额展示模式下的打餐中深色页面。 HomeActivity中打餐前页面统一切换为DarkPickBeforeFragment。HomeActivity中打餐中页面按STYLE_HOME_DISPLAY分流:style == 2使用无价格深色页,其他使用带价格深色页。- Fragment 提交方式调整为
commitAllowingStateLoss(),降低页面切换时状态已保存导致的提交异常风险。 - 原有
HomePickOngoingRingFragment、HomePickOngoingRingNoPriceFragment、HomePickOngoingRingBalanceSplitFragment不再作为本次首页主链路入口。
2. 取餐前菜品与营养展示模块
深色打餐前页面补齐了菜品基础信息、价格、功能标签、三大营养素供能比和微量营养素展示。
DarkPickBeforeFragment从 MMKV 读取当前菜品名称、图片、价格、功能标签和营养数据并刷新 UI。- 支持按展示模式隐藏价格区或展示菜品图片。
- 支持展示碳水、蛋白质、脂肪供能比。
- 支持展示膳食纤维、VB1、VC、VB2、钙、铁等每 100g 营养数值。
- 监听
DISH_INFO_UPDATE事件,菜品信息变化后刷新深色页面。 - 保留打餐前重量变动提醒逻辑,继续使用灯光、语音和
WarnPop提醒用户先放餐盘。
3. 打餐中取餐人、金额与营养建议模块
深色打餐中页面承接取餐人信息展示、重量动态展示、金额动态计算和营养建议状态计算。
- 根据
STAFF_INFO_UPDATE事件刷新取餐人姓名、余额、补贴余额、累计消费等信息。 - 使用当前称重差值计算本次取餐重量,过滤刚进入页面的初始采样和小范围波动。
- 按单价动态计算本次消费金额,并更新账户余额、现金余额、补贴余额。
- 基于取餐重量动态计算能量、碳水、蛋白质、蔬菜种类、水果种类等建议状态。
DishInfo新增energyStatus,用于区分能量偏低、合适、偏高,并驱动不同背景和颜色展示。- 营养建议计算使用 RxJava 放到 IO 线程,结果回主线程刷新 UI。
- 未绑定餐盘时清空人员信息并提示“请先绑定餐盘”。
4. 自定义 View 与文本显示工具模块
为深色主题新增了一组可复用 UI 组件。
- 新增
PickBeforeShowNutrientItemView:封装打餐前单个营养素标题和值展示。 - 新增
ShowNutrientSupplyPercentView:封装三大营养素供能比标题、进度条、百分比展示。 - 新增
RoundedProgressBar:支持圆角进度条、自定义进度色和背景色。 - 新增
RoundedImageView:支持全圆角和仅右上角圆角图片裁剪。 - 新增
DiffSizeShowUtils:支持一个字符串中主体数字和单位使用不同字号展示。 attrs.xml补充上述自定义 View 的 XML 属性。
5. 标题栏与基础 Activity 模块
全局页面底色和标题栏做了深色主题适配。
BaseActivity页面背景由home_bac切换为bac_dark_theme。styles.xml的android:windowBackground同步切换为bac_dark_theme。- 标题栏 logo、网络状态图标、时间、返回/刷新按钮尺寸整体放大。
- 标题栏新增设备编号展示位
title_layout_terminal_number_view。 BaseActivity新增updateTitleTerminalNumber(),从Constants.TERMINAL_NUMBER读取设备编号并控制显示/隐藏。SetActivity在配对、解绑、配对失败等设备编号变化节点主动刷新标题栏设备编号。
6. 设置页与版本更新模块
设置页新增检查版本更新能力,并调整调试入口展示。
SetActivity点击版本信息时改为调用getLastVersionInfo()。- 新增
/p/api/getNewVersion接口调用链:CPTNetworkRequest、CPTService、NetworkService。 - 版本接口入参包含当前版本号、设备类型和设备编号。
- 获取新版本后支持弹出自定义更新对话框,展示版本号和更新内容。
- 支持强制更新:
forceTag == 1时隐藏取消按钮且弹框不可取消。 - 点击确认更新会通过浏览器打开下载链接。
- 增加版本号
v前缀裁剪逻辑,用于和当前版本号比较。 - 设置页隐藏独立扫码调试入口,把称体调试标题改为“秤体和扫码调试”。
7. 硬件称重、扫码与灯带模块
硬件模块本次主要增强采样间隔配置、扫码过滤和灯带控制幂等。
YoukateHardwareManager新增默认采样间隔DEFAULT_INTERVAL_MS = 100。- 新增
WEIGHER_INTERVAL_MS本地配置项,保存称体采样间隔。 - 新增
setIntervalAndSave()、getSavedIntervalPreset()、getSavedIntervalMs()等方法。 - 称体初始化成功后不再固定使用
MS_100,改为读取已保存的采样间隔。 - 支持 50ms、100ms、150ms、200ms、250ms 采样间隔映射。
cleanScanCode()增加码长校验,不满足Constants.CODE_LENGTH_NUMBER时返回空码。HomeActivity的空扫码帧结束阈值从 5 帧改为 3 帧。LightController增加红灯/绿灯最后状态缓存和锁,重复设置同一状态时直接跳过,减少 GPIO 重复调用。- 大量文案从“优卡特”统一为“称体”,降低设备品牌耦合表达。
8. 调试弹窗模块
称体调试弹窗改成更贴近当前 SDK 能力的配置面板。
DebugWeigherPop隐藏旧初始化、标定、滤波、鉴别率等当前 SDK 不支持的按钮区域。- 新增采样间隔单选项:50ms、100ms、150ms、200ms、250ms。
- 调试结果显示从数字状态改为中文状态:稳定、不稳定、量程溢出。
- 扫码为空时显示“无”,并和重量信息分行展示。
- 弹窗宽度从 553dp 调整到 700dp,适配新增采样间隔选项。
- 关闭弹窗时仍释放
YoukateHardwareManager。
9. 网络接口与数据模型模块
本次接口和数据模型主要为深色营养展示、版本更新服务。
GetDishDetailResponse新增carbohydrateRatio、proteinRatio、fatRatio,对应服务端三大营养素供能比字段。DishInfoUtils在保存菜品详情时同步保存三大营养素供能比到 MMKV。Constants新增三大营养素供能比 key。GetLastedVersionInfoResponse承载版本更新接口返回值:版本号、下载链接、更新内容、是否强制更新、设备类型。CPTNetworkRequest新增POST /p/api/getNewVersion。CPTService和NetworkService补齐版本接口服务方法。
10. 资源、布局与视觉资产模块
深色主题引入了新的背景、图标和布局资源。
- 新增深色全局背景:
bac_dark_theme.png。 - 新增打餐中能量状态背景:
bac_pick_ongoing_energy.png、bac_pick_ongoing_energy_low.png、bac_pick_ongoing_energy_middle.png、bac_pick_ongoing_energy_high.png。 - 新增取餐重量、用户姓名、能量图标、营养项背景等资源。
- 新增首页左右区域背景 XML:
home_frg_left_bac.xml、home_frg_right_bac.xml、home_frg_right_light_bac.xml。 - 新增深色主题布局:
- fragment_dark_pick_before_layout.xml
- fragment_dark_pick_ongoing_no_price_layout.xml
- fragment_dark_pick_ongoing_with_price_layout.xml
colors.xml新增供能比颜色和取餐重量颜色。dimens.xml新增深色主题标题栏、菜品名称、价格、右侧面板、能量卡片等尺寸。strings.xml新增无单位营养素文案、余额类型、本次累计、消费、耗时日志标题等文案。
11. 旧页面与周边布局微调模块
部分原有页面和布局做了适配或文案调整。
- 原有环形取餐页面、菜品列表/菜单、营养建议 item 等布局有小幅尺寸和样式调整。
- 更新弹框布局
view_update_dialog_custom.xml支持展示更新内容滚动区域。 title_layout.xml增加设备编号、放大标题栏元素、调整按钮 padding。activity_set.xml隐藏独立扫码调试入口。dish_suggest_item_ring_layout.xml等资源有小幅显示调整,以配合深色主题。
12. 构建说明与文档模块
文档和构建配置主要做命名统一。
README.md将“优卡特扫码秤/优卡特硬件适配/优卡特 SDK”统一改为“称体扫码秤/称体硬件适配/称体 SDK”。app/build.gradle中 AAR 依赖注释同步从“优卡特扫码秤依赖”改为“称体扫码秤依赖”。
需要重点回归的风险点
- 当前深色主题改动规模较大,首页取餐前、取餐中、餐盘离开上传链路需要完整实机回归。
HomeActivity不再进入原有环形页面,需确认所有STYLE_HOME_DISPLAY场景都符合产品预期,特别是style == 3的现金/补贴拆分展示。- 版本更新入口依赖
/p/api/getNewVersion返回字段,需用真实服务端数据验证version_number、url、content、is_renew。 cleanScanCode()现在直接过滤非 6 位码,需确认设备实际扫码帧不会带额外前后缀或临时空帧。- 采样间隔支持持久化后,需实机确认不同间隔下重量刷新频率、稳定状态判断和串口负载。
LightController缓存灯带状态后,需确认外部 GPIO 状态异常时不会因为本地缓存导致无法恢复。ShowNutrientSupplyPercentView对供能比限定 0-100,需确认服务端供能比不会返回超过 100 的异常或累计值。