diff --git a/docs/android_app/HANDOFF_DEVELOPMENT.md b/docs/android_app/HANDOFF_DEVELOPMENT.md index 2e022c2..860b6ba 100644 --- a/docs/android_app/HANDOFF_DEVELOPMENT.md +++ b/docs/android_app/HANDOFF_DEVELOPMENT.md @@ -56,7 +56,7 @@ android/app/src/main/kotlin/com/mag160c/thermal/ ├─ ui/theme/Theme.kt M3 动态取色(Android12+) ├─ ui/live/ ★实时画面(最核心) │ ├─ LiveViewModel.kt 状态机/演示模式/多点测温/追踪开关/拍照/录像/inset上报 -│ ├─ LiveScreen.kt 稳定单分支布局:顶栏控制条(恒顶部,适配挖孔屏)+SurfaceView +│ ├─ LiveScreen.kt 稳定单分支相机布局:顶栏4控制项+底部快门区(相册/拍照/录像)+SurfaceView │ └─ LiveRenderer.kt SurfaceView 软件渲染:图像恒90°旋转(3:4竖)钉在竖屏框架固定区域, │ 文字恒屏幕水平;色标条/圆圈标记/中心温OSD ├─ ui/gallery/ 相册页(MediaStore DCIM/MAG160C 扫描 + 内嵌JPEG缩略图 + 运行时媒体权限) @@ -164,9 +164,19 @@ git -C C:\Project\MAG160C commit -m "android: ..." ## 7. 当前状态与待办 -**已完成**:核心管线移植(字节级验证)、USB 层、实时画面(竖图固定+顶栏控制+底栏导航+ -圆圈标记+大色标+演示模式)、拍照 MDT 容器→MediaStore、MP4 录像、媒体库、离线分析查看器、 -PDF 报告、任务解析、设置页、Android16 沉浸(状态栏隐藏+挖孔适配+fullSensor)、乱码多次修复。 +**已完成**:核心管线移植(字节级验证)、USB 层、实时画面(相机式布局: +顶栏4控制项 FFC/变倍/追踪/调色板 + 底部快门区 相册/拍照/录像 + 底导航)、 +图标文字按物理持机朝向补偿旋转(加速度计)、演示模式、拍照 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): 1. 真机 USB 实测:温度绝对值标定、FFC/录像/MDT 保存端到端。 @@ -183,4 +193,42 @@ PDF 报告、任务解析、设置页、Android16 沉浸(状态栏隐藏+挖 - C 参考实现(Kotlin 管线的蓝本):`csdk/src/mag160c_render.c`、`mag160c_temp.c`、`mag160c_ir.c` - PC 参考工具:`analysis/render_offline.c`、`analysis/gen_kotlin_tables.py` - 预览截图:`analysis/preview/preview_*.png` -- APK 产物:`build-artifacts/mag160c-app-debug.apk` \ No newline at end of file +- 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/` 等),**不要提交它们**,只提交你的改动。 \ No newline at end of file