514e5ec9e23b5c2bc7d2a1b71832655a5cf40411
三块改动同批落地,互相咬合(详情页未开启分支依赖开关联动,睡眠页依赖前两者), 拆开提交会得到编译不过的中间态,故合并为一次。 详情页专属化(spec §6.1) - feature/detail/pages/ 七个指标各一个文件,各自决定放几张卡; MetricDetailScreen 只剩页头 + 周/月切换 + 按 metric 分派 - 新增 MetricRangeBar(心率区间条)、MetricThresholdStrip(血氧阈值带)、 MetricDeviationBar(体温偏离条)、ChartAxisLabels(三图共用的 X 轴标签行) - MetricBarChart 增 valueRange / bandRange,均值参考线泛化为 referenceLine - 修:窄区间指标(血氧 95–99、体温 36.1–36.9)柱子被抹平成一样高,整张图无信息量 - 修:头图当前值与趋势图末点各生成各的,改为末点取自 todaySummary 功能开关联动(spec §6.3) - MetricType 显式带 switchId,null 表示常开(计步、体温) - MockHealthDataRepository 订阅 functionSettings,概览/历史/睡眠全部由开关算出 - 未开启的指标在概览里为 null;详情页整页走共用的 MetricDisabledCard 且不画图 - 修:血压卡因「未开启」不可点击,说明页成为死代码,用户无从知道怎么开启 - 修:压力开关默认关着而 todaySummary 一直给出 stress = 34 睡眠时段图(spec §6.2) - 新增 SleepSession:MetricPoint 只装得下一个 Double,装不下「几点到几点」 - 新增 SleepWindowChart:每晚一行,圆角条从入睡横到醒来;横轴锚在 20:00 跨零点 (不能用 timestamp % 86400000,那是 UTC 余数,东八区会整体平移八小时), 轴范围由数据算出并取整到刻度线;只用一个颜色,不假装知道分期位置 - 睡眠页撤掉柱状图(条长即时长,与时段图重复),改画时段图 + 分期时长图例 - 今日睡眠时长、睡眠历史点、分期条全部由 SleepSession 派生,不再各生成各的 验证:44 个单测通过;装机核对近 7 天 / 近 30 天 / 关闭睡眠开关三种状态
ring-health-app
智能戒指健康 App(原生 Android / Kotlin + Jetpack Compose)。
- 设计文档:见
ring-health-docs仓库superpowers/specs/ - 当前阶段:M1 静态页面(数据来自 Mock,未接入蓝牙 SDK)
页面清单(M1)
| 页面 | 路由 |
|---|---|
| 健康首页 | home |
| 运动 | workout |
| 运动历史 | workout/history |
| 设备 | device |
| 设备设置 | device/settings |
| 我的 | profile |
| 指标详情(步数/心率/睡眠/血氧/压力/体温/血压) | detail/{metric} |
页面路由的唯一定义处是
core/navigation/Routes.kt,上表与其保持一致。 M1 的验收状态见docs/verification-m1.md。
构建
./gradlew assembleDebug # 产物在 app/build/outputs/apk/debug/
./gradlew installDebug # 安装到已连接设备(需接好设备或已启动模拟器)
./gradlew test # 单元测试
installDebug需要一台已连接的设备或正在运行的模拟器。M1 使用的机器两者都没有, 因此本机实际可执行的是./gradlew assembleDebug与./gradlew :app:testDebugUnitTest。
要求:JDK 17、Android SDK(platform 36 / build-tools 36.1.0)。
Languages
Kotlin
100%