Files
ring-health-app/app
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
..