cuiluzheng
|
6af1078ca5
|
fix: 首页三件套字号 30sp 改 26sp,label 含单位避免窄格里换行
第一版 value 行 + 单位同行 + 30sp 字号在窄格里换行成两截:「8,426」一行 + 「步」一行,「327」+「千」+「卡」也各换一行,「47」+「分钟」同样问题 —— 整张图被切成 6 段,视觉上不像三件套、像六个数。
改法:label 含单位(卡路里(千卡)、活动(分钟)),value 行只摆数字,字号降到 26sp —— 三件套格子约 110dp 宽,26sp + 5 位数字 100,000 装得下,再留余量给目标那行小字。
KDoc 注释一并更新,标注 M1 验证阶段肉眼发现的坑。
|
2026-09-11 09:52:09 +08:00 |
|
cuiluzheng
|
841f9f1542
|
feat: 四个 Tab 收口 — 首页三件套 / 运动类型网格 / 设备空态 / 我的四个真子页
PROGRESS.md §3.2 报告的三个结构性问题(设备页 + 更多设置重复、运动页两个入口同数据、「我的」四个死链接)本批一并收口。用户原话:「现在就是要 APP 页面完整成熟,后期再做后端接口,我的任务只是前端」。
首页(HomeScreen)
- HealthSummary 加 activeMinutes: Int(M3 接 SDK 后由真实活动汇总接口填入)
- MockDataProvider 演示值 47 分钟
- 删 StepsCard(步数大环 + 距离/千卡 横排),换为 TodaySummaryCard:横排 3 列「步数 / 卡路里 / 活动时长」
- 三列等宽,无主导项,步数下挂目标;步数一格整格可点进详情
- 三件套单格内 30sp + tnum,宽字符数字不会跳
- 三列之间 1dp 浅灰竖线(不用 core 的 DividerColor,那个是卡片间分割线)
运动页(WorkoutScreen)
- 加 SportType 枚举(户外跑步 / 健走 / 户外骑行 / 室内跑步 / 跳绳 / 自由训练)
- 删 StartWorkoutCard,换为 SportTypeGrid:横排 6 个运动类型入口,可滑
- 每格:80dp 圆角方块 + 浅 MetricGreen 底 + 深 MetricGreen 图标 + 类型名下方
- 点任意类型仍弹 Snackbar「将在接入戒指后开放」(一致行为)
- 图标背景用 MetricGreen.copy(alpha=0.12f) 而不是小米那种饱和度极高的大色块 —— spec §7.1「颜色是有含义的不能当装饰用」
设备页(DeviceScreen)
- DeviceContent 加分支:!state.device.connected 时显示 DeviceEmptyState
- 空态:圆形 NFC 图标 + 「未连接戒指」+ 「连接戒指后即可查看电量、固件与监测设置」+ 「扫一扫」+ 「按型号添加」两按钮
- 已连态完全保留
- 加 Preview @Preview(name = "未连") 验证空态
- Mock 始终 connected,所以生产路径仍走已连;M2 接 SDK 后未连时自动落空态
我的(ProfileScreen + 4 个新子页)
- 4 个死链接(单位设置 / 通知权限 / 检查更新 / 帮助与反馈)全部挂上 onClick
- 加 4 条路由:PROFILE_SETTINGS / PROFILE_NOTIFICATIONS / PROFILE_ABOUT / PROFILE_HELP
- 新增 4 个子页:
- SettingsScreen:单位卡(距离/体重,只读)+ 通知卡(健康/设备/营销三个 Switch,演示值)
- NotificationsScreen:权限状态徽章 + 引导文案 + 「请求权限」+ 「前往系统设置」按钮
- AboutScreen:App 版本 / 固件版本 / 设备型号 + 「检查更新」按钮(弹 Snackbar「已是最新版本」)
- HelpScreen:4 条 FAQ 折叠卡(整卡可点切换展开)+ 「联系我们」邮箱卡
- tabRouteFor 把 4 条新路由归到 PROFILE Tab,子页栈顶时底栏仍高亮「我的」
校验
- ./gradlew :app:testDebugUnitTest → 44 个用例全绿
- ./gradlew :app:assembleDebug → APK 出包成功
- 装机截屏:PROGRESS.md 提到的 ringtest AVD 已不存在,现存的 Medium_Phone AVD 配错系统镜像路径(指向 android-36.1 但本机只装了 android-36),按 ledger Ruling R21 跳过运行时验证,交人工
未做(已记录的边界)
- 通知开关不持久化:阶段一切换只走 remember,离页即丢;M2 接 SDK 时换 StateFlow
- 「请求权限」不真发系统弹窗:阶段一按下后只切演示状态;M2 接 SDK 时用 NotificationManagerCompat.requestPermissions
- 「前往系统设置」不真跳:同上,阶段一只占位
——共 14 文件,+10 修改 / +4 新建。
|
2026-09-11 08:55:38 +08:00 |
|
cuiluzheng
|
fba26fc372
|
feat: 睡眠详情页支持按分期染色(演示仅昨晚带分期序列)
- SleepSession 增加可选 stages: List<SleepSegment>?;为 null 走原行为
- SleepSegment(stage, startOffsetMinute, endOffsetMinute) —— 相对 sleepStart 的分钟偏移
- MockDataProvider.demoLastNight() 填入真实分期序列,深睡/浅睡/清醒各期时长与累计值严格对齐
- SleepWindowChart 新增 StageTints(deep, light, awake, track);stages 非空时画轨道 + 子矩形
- AWAKE 跳出 MetricBlue 色族用暖粉 Color(0xFFE8B4A8),中途醒显眼;track 用极浅蓝作 rail
- 头图分期条 / 图例自动跟着 AWAKE_TINT 走,两处口径一致
- 仅昨晚一条带 stages,其他 6 晚单色原样保留 ——
这是为了演示视觉效果,不是生产数据形态;M2 接入真机后逐步补全其他夜晚
|
2026-09-10 17:25:48 +08:00 |
|
cuiluzheng
|
514e5ec9e2
|
feat: 详情页专属化 + 功能开关联动 + 睡眠时段图
三块改动同批落地,互相咬合(详情页未开启分支依赖开关联动,睡眠页依赖前两者),
拆开提交会得到编译不过的中间态,故合并为一次。
详情页专属化(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 天 / 关闭睡眠开关三种状态
|
2026-09-10 16:49:17 +08:00 |
|
cuiluzheng
|
e5f935625e
|
docs: 补录模拟器实测结果,关闭 M1 运行时验收缺口(含 consumeWindowInsets 像素级验证)
|
2026-09-10 14:14:18 +08:00 |
|
cuiluzheng
|
77de7808cb
|
docs: 补充终审修复轮的验证状态与 M2 交接接缝
|
2026-09-10 13:37:15 +08:00 |
|
 cuiluzhengandClaude Code
|
5fe0d4a420
|
fix: 修正终审发现的详情页配色、空态与血压卡可点击等问题
- 详情页柱状图改用指标语义色(新增 MetricType→色板映射),此前恒定绿色
- 详情页无数据时渲染空态文案,不再画全 0 柱状图与三行 0.0
- 首页「未开启」指标卡不再可点击,与详情页内容保持一致
- 压力卡单位位显示等级文案(如「34 正常」),接上原先无人调用的 stressLevelLabelRes
- NavHost 补 consumeWindowInsets,避免详情页 TopAppBar 重复叠加状态栏内边距
- README 注明 installDebug 需要设备/模拟器
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 13:18:51 +08:00 |
|
 cuiluzhengandClaude Code
|
9c233e5750
|
docs: 补充 M1 验收记录与页面清单
Task 14 收尾(几乎不含生产代码改动):
- 清扫三条孤儿字符串:`placeholder_workout_history` / `placeholder_device_settings` /
`placeholder_metric_detail`。grep 全 `app/src` 确认三者均无调用点后删除;
顺带逐条核对了 `strings.xml` 其余字符串,除 manifest 引用的 `app_name` 外全部有调用点,
未发现别的漏接线(不是顺手一起删,是先查清才决定)。
- 按 ledger R31,给 `MockRingDeviceRepository.setFunctionEnabled` 补中文 KDoc,
写明「必须返回新列表」及其原因(`DeviceViewModel.stateIn(initialValue=…)` 在构造时
冻结 List 引用,原地改写会让 `DeviceViewModelTest` 第一条用例退化成自我确认)。
验证:`./gradlew :app:testDebugUnitTest` 21 项全绿(FormattersTest 7 + MockDataProviderTest 5
+ HomeViewModelTest 1 + WorkoutViewModelTest 1 + DeviceViewModelTest 2 +
MetricDetailViewModelTest 3 + RoutesTest 2);`./gradlew clean assembleDebug` BUILD SUCCESSFUL,
产物 app-debug.apk(18,907,329 字节)。
新增 `docs/verification-m1.md` 记录 M1 验收。**人工验收全表标注「未执行 —— 无设备」**:
本机无模拟器镜像、无连接真机(`adb devices` 为空;`~/.android/avd` 下两个 AVD 只是指向
已删除旧 SDK 的空壳,不可启动),IDE Preview 亦无法打开。记录中含覆盖缺口声明:
M1 全部运行时行为目前只有编译期与单元测试保证,`assembleDebug` 成功不代表界面正确或不会崩溃。
README 补 M1 页面清单表,路由与 `core/navigation/Routes.kt` 逐条核对一致;
并核对 `profile_check_update_desc` 的手抄版本号 `0.1.0` 与 build.gradle.kts 的
`versionName` 一致(计划 3682 行交办项)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 12:54:40 +08:00 |
|
 cuiluzhengandClaude Code
|
0e17502334
|
fix: 重写详情页 ViewModel 用例使其具备鉴别力并修正 Preview 夹具
审查指出第 3 条用例的唯一断言与 stateIn 的 initialValue 逐字相等(ledger R30 同类缺陷),
且三条用例都没有把构造函数的 metric 与 observeMetricHistory 的查询参数绑起来。
重写为「SLEEP 指标查到的是睡眠区间的数据」:点数断言杀掉「管线从不发射」,
取值区间断言(330~510,与步数 3000~12000 不相交)杀掉 metric 被写成常量的泄漏;
metric 回显断言保留但注释写明其无鉴别力。变异测试已证:把第 43 行的 metric 换成
MetricType.STEP 后该用例失败、另两条仍绿,回退后 3/3 通过。
顺带按 Minor 意见修正 previewPoints:KDoc 原文「贴近区间下限」不实,且步数夹具
7500~7572 在柱状图里渲染成齐平一排。改为带 step 形参,睡眠 330→480、步数 3200→11000,
两个 Preview 的 metric 分支覆盖不变。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 12:43:04 +08:00 |
|
 cuiluzhengandClaude Code
|
01689b24fc
|
feat: 实现指标详情子页(周/月切换 + 趋势图)
替换 MetricDetailPlaceholder 为真实详情页:范围切换、柱状趋势图、平均/最高/最低摘要,
睡眠指标额外渲染深睡/浅睡/清醒分期条与入睡/起床时间。
新增 MetricDetailViewModel(flatMapLatest 重新订阅数据源)与其 3 条 JVM 测试、
RoutesTest(锁住路由模板与 Routes.detail() 拼串)、Formatters.formatDecimal 与其测试。
接入 RingHealthApp 的 DETAIL_PATTERN,参数无法解析时直接抛而不是静默兜底。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 12:27:00 +08:00 |
|
cuiluzheng
|
88e88cf0ba
|
feat: 实现我的页
纯静态入口列表(头像卡 + 应用设置 / 关于 两组入口),无 ViewModel、无状态。
新增 12 条 profile_* 文案资源,颜色统一走设计系统 TextSecondary。
|
2026-09-10 12:17:11 +08:00 |
|
cuiluzheng
|
7170a49664
|
fix: 收窄 SettingRow 可见性并强化设备 ViewModel 测试的数据管线断言
|
2026-09-10 11:32:55 +08:00 |
|
cuiluzheng
|
20fe2bce66
|
feat: 实现设备页与设备设置子页(可交互开关)
|
2026-09-10 11:27:27 +08:00 |
|
cuiluzheng
|
58573f4657
|
fix: 统一运动历史空态文字颜色并补充页面预览与顺序断言
|
2026-09-10 11:20:51 +08:00 |
|
cuiluzheng
|
031aea0fa2
|
feat: 实现运动页与运动历史子页
|
2026-09-10 11:12:28 +08:00 |
|
cuiluzheng
|
4805b027e0
|
fix: 补全 HomeContentPreview 的中文 KDoc(同类函数注释一致)
|
2026-09-10 11:09:02 +08:00 |
|
cuiluzheng
|
7eeb9f8e26
|
feat: 实现健康首页(今日大环 + 指标卡片,含 ViewModel 测试)
|
2026-09-10 11:02:14 +08:00 |
|
cuiluzheng
|
6d3cb1b418
|
feat: 新增底部四 Tab 导航骨架与路由表
|
2026-09-10 10:54:05 +08:00 |
|
cuiluzheng
|
2fba18bc7e
|
fix: 确定性测试改为断言绝对时间戳,并补充设备刷新语义说明
|
2026-09-10 10:50:19 +08:00 |
|
cuiluzheng
|
fda104041a
|
feat: 新增 Mock 数据层与依赖容器(含单元测试)
|
2026-09-10 10:43:02 +08:00 |
|
 cuiluzhengandClaude Code
|
bf373a2a5a
|
feat: 新增数值格式化工具(含单元测试)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 10:35:33 +08:00 |
|
cuiluzheng
|
ea8897f901
|
feat: 新增领域模型与仓库接口
|
2026-09-10 10:27:32 +08:00 |
|
cuiluzheng
|
75a6749619
|
feat: 新增通用 UI 组件(卡片/环形进度/指标块/分段条/柱状图)
|
2026-09-10 10:23:56 +08:00 |
|
cuiluzheng
|
8c245c099b
|
feat: 新增设计系统(颜色/字体/浅色主题)
|
2026-09-10 10:20:04 +08:00 |
|
cuiluzheng
|
3cbcafd4e2
|
fix: 文案改用字符串资源,补齐 .gitignore/.gitattributes 与依赖降级依据
|
2026-09-10 10:17:12 +08:00 |
|
cuiluzheng
|
2a90c18317
|
chore: 初始化 Android 工程骨架(Compose + Gradle 8.14/AGP 8.13.1)
|
2026-09-10 09:36:55 +08:00 |
|