docs: refresh handoff for next model - final layout conventions + next-round prompt

This commit is contained in:
ZXCLI
2026-09-09 17:42:41 +08:00
parent add3d06713
commit 456285c71b
+53 -5
View File
@@ -56,7 +56,7 @@ android/app/src/main/kotlin/com/mag160c/thermal/
├─ ui/theme/Theme.kt M3 动态取色(Android12+ ├─ ui/theme/Theme.kt M3 动态取色(Android12+
├─ ui/live/ ★实时画面(最核心) ├─ ui/live/ ★实时画面(最核心)
│ ├─ LiveViewModel.kt 状态机/演示模式/多点测温/追踪开关/拍照/录像/inset上报 │ ├─ LiveViewModel.kt 状态机/演示模式/多点测温/追踪开关/拍照/录像/inset上报
│ ├─ LiveScreen.kt 稳定单分支布局:顶栏控制条(恒顶部,适配挖孔屏)+SurfaceView │ ├─ LiveScreen.kt 稳定单分支相机布局:顶栏4控制项+底部快门区(相册/拍照/录像)+SurfaceView
│ └─ LiveRenderer.kt SurfaceView 软件渲染:图像恒90°旋转(3:4竖)钉在竖屏框架固定区域, │ └─ LiveRenderer.kt SurfaceView 软件渲染:图像恒90°旋转(3:4竖)钉在竖屏框架固定区域,
│ 文字恒屏幕水平;色标条/圆圈标记/中心温OSD │ 文字恒屏幕水平;色标条/圆圈标记/中心温OSD
├─ ui/gallery/ 相册页(MediaStore DCIM/MAG160C 扫描 + 内嵌JPEG缩略图 + 运行时媒体权限) ├─ ui/gallery/ 相册页(MediaStore DCIM/MAG160C 扫描 + 内嵌JPEG缩略图 + 运行时媒体权限)
@@ -164,9 +164,19 @@ git -C C:\Project\MAG160C commit -m "android: ..."
## 7. 当前状态与待办 ## 7. 当前状态与待办
**已完成**:核心管线移植(字节级验证)、USB 层、实时画面(竖图固定+顶栏控制+底栏导航+ **已完成**:核心管线移植(字节级验证)、USB 层、实时画面(相机式布局:
圆圈标记+大色标+演示模式)、拍照 MDT 容器→MediaStore、MP4 录像、媒体库、离线分析查看器 顶栏4控制项 FFC/变倍/追踪/调色板 + 底部快门区 相册/拍照/录像 + 底导航)
PDF 报告、任务解析、设置页、Android16 沉浸(状态栏隐藏+挖孔适配+fullSensor)、乱码多次修复。 图标文字按物理持机朝向补偿旋转(加速度计)、演示模式、拍照 MDT 容器→MediaStore、
MP4 录像、媒体库、离线分析查看器、PDF 报告、任务解析、设置页、Android16 沉浸
(状态栏隐藏+竖屏锁定+挖孔安全区)、乱码多次修复。
**布局约定(最终,勿回退)**
- Activity **锁定竖屏**`portrait`),构图钉死手机竖屏框架:顶栏/热像区域/快门区/底导航
绝对位置永不随手机物理旋转变化(屏显方向永远对应镜头方向)。
- 图标/文字持机朝向补偿:`ui/DeviceOrientation`(加速度计,真机约定 y=+9.81=0°;
模拟器是反的重力约定)→ `rotationZ=-φ`Compose/`canvas.rotate(-φ)`Canvas)。
- 顶栏 `uiTopPx` 必须挂在 `safeDrawing` inset **之前**(包含挖孔安全区,否则真机热像
顶端被顶栏盖住);`uiBottomPx` = 底导航高 + 快门区高。
**待办**(记录在 session_state.md): **待办**(记录在 session_state.md):
1. 真机 USB 实测:温度绝对值标定、FFC/录像/MDT 保存端到端。 1. 真机 USB 实测:温度绝对值标定、FFC/录像/MDT 保存端到端。
@@ -183,4 +193,42 @@ PDF 报告、任务解析、设置页、Android16 沉浸(状态栏隐藏+挖
- C 参考实现(Kotlin 管线的蓝本):`csdk/src/mag160c_render.c`、`mag160c_temp.c`、`mag160c_ir.c` - C 参考实现(Kotlin 管线的蓝本):`csdk/src/mag160c_render.c`、`mag160c_temp.c`、`mag160c_ir.c`
- PC 参考工具:`analysis/render_offline.c`、`analysis/gen_kotlin_tables.py` - PC 参考工具:`analysis/render_offline.c`、`analysis/gen_kotlin_tables.py`
- 预览截图:`analysis/preview/preview_*.png` - 预览截图:`analysis/preview/preview_*.png`
- APK 产物:`build-artifacts/mag160c-app-debug.apk` - APK 产物:`build-artifacts/mag160c-app-debug.apk`
## 9. 下一轮提示词(交付新模型直接用)
> 你是本项目的续任开发者。请先完整阅读 `C:\Project\MAG160C\docs\android_app\HANDOFF_DEVELOPMENT.md`
> 和 `C:\Project\MAG160C\docs\android_app\session_state.md`、`docs\android_app\reverse_apk_features.md`、
> `C:\Project\MAG160C\analysis\protocol_spec.md`,再继续开发。
> 项目根 `C:\Project\MAG160C` 是 git 仓库,源码在 `android\`Gradle 工程,package
> `com.mag160c.thermal`)。Android 16 已适配,目标是一个 MAG160C 热像仪(160×120, 15fps,
> USB VID 0x833C PID 1)统一 APP。
>
> 当前已完成到第 9 轮反馈修复:核心渲染管线 Kotlin 移植(逐字节验证)、USB 层、
> 相机式实时布局(顶栏4控制项+底部快门区+底导航)、图标文字持机朝向补偿旋转、
> 演示模式(无设备用真实管线+DDT渲染合成帧)、拍照MDT存MediaStore、MP4录像、
> 媒体库、离线分析、PDF报告、任务解析、设置页、Android16沉浸(竖屏锁定+挖孔适配)。
>
> 硬性约定(勿回退):① Activity 竖屏锁定 `portrait`,构图钉死手机竖屏框架,
> 屏显方向必须始终对应镜头方向;图标/文字用 `ui/DeviceOrientation`(加速度计,
> 真机约定 y=+9.81=0°)补偿旋转。② 源码全 UTF-8;python 读写必须显式
> `encoding='utf-8'`(本机默认 GBK,裸写会乱码)。③ 图标用双弧圆+直线/矩形。
>
> 下一步建议按 session_state.md「待办」推进:
> 1. 真机 USB 实测——温度绝对值标定(对 DDT 核对 counts→毫度);
> 2. 网络互连远程预览——UDP 广播自动发现 + 手动内网 IP,主机手机插热像仪、
> 局域网另一台手机远程实时预览(自定义轻量协议:控制通道 JSON + 图像流,
> 不走厂商 33596/33597);
> 3. 离线 MDT 温度解码(ConvertResponse2Temperature + 标定参数);
> 4. 厂商 12 调色板精确提取;5. 可见光 PIP 融合、云模块(Retrofit opt-in 预留)。
>
> 构建/提交:
> ```powershell
> cd C:\Project\MAG160C\android; $env:JAVA_HOME="C:\Program Files\Zulu\zulu-21"
> & "C:\Tools\gradle-8.14.3\bin\gradle.bat" :app:assembleDebug --no-daemon
> & "C:\Tools\gradle-8.14.3\bin\gradle.bat" test --no-daemon
> git -C C:\Project\MAG160C add -A; git -C C:\Project\MAG160C commit -m "android: ..."
> ```
> 环境:`C:\Tools\gradle-8.14.3`、JDK Zulu 21、SDK `C:\Users\ZXC\AppData\Local\Android\Sdk`、
> AVD `Medium_Phone_API_36.1`。注意:git 工作树里有大量与本任务无关的脏文件
> `.tools/``IR_Camera_SDK/``csdk/``analysis/` 等),**不要提交它们**,只提交你的改动。