初步完成框架
Some checks failed
Android CI / build (push) Has been cancelled

- 实时图传:WebSocket JPEG 帧发送 + 帧率控制 + PC 浏览器预览
- PDF 上传与处理:上传/处理分离,支持 ocrpdf 和 markdown 两种类型
- MinerU 真实接入:markdown 处理 + images ZIP 打包
- OCRmyPDF 接入:ocrpdf 生成可搜索双层 PDF
- 手机端任务管理面板:轮询状态 + SAF 目录选择下载
- PC 管理面板:/dashboard 文件与任务管理
- 网络层:OkHttp 客户端、WebSocket 图传、局域网发现占位

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
MobKBK
2026-06-04 17:03:18 +08:00
parent dd8002009d
commit 1848a88fcf
72 changed files with 6281 additions and 163 deletions

View File

@@ -0,0 +1,195 @@
# UI 扩展修复总结
## 修改文件清单
### 1. SettingsRepository.kt
**变更**:添加了网络协作相关的配置项和枚举类型
**新增内容**
- 7个新的 `stringPreferencesKey`
- `SERVER_HOST` - PC主机地址
- `SERVER_PORT` - PC端口
- `SERVER_DISPLAY_NAME` - PC显示名称
- `LAST_SELECTED_SERVICE_ID` - 上次选择的服务ID
- `STREAM_QUALITY` - 图传质量
- `POST_PROCESS_MODE` - 后处理模式
- `AUTO_DOWNLOAD_PROCESSED_RESULT` - 自动下载处理结果开关
- 7个新的 Flow 属性用于读取这些配置
- 8个新的 suspend fun setter 方法:
- `setServerHost()`
- `setServerPort()`
- `setServerDisplayName()`
- `setLastSelectedServiceId()`
- `setStreamQuality()`
- `setPostProcessMode()`
- `setAutoDownloadProcessedResult()`
- 2个新的 enum 类型:
- `StreamQuality(LOW, BALANCED, HIGH)` - 图传质量档位
- `PostProcessMode(MARKDOWN, OCRPDF)` - 后处理模式
**修复**修复了第231行缺少类闭合括号的问题
---
### 2. SettingsViewModel.kt
**变更**:扩展了 UI 状态数据类和 combine flow
**新增内容**
- 扩展 `SettingsUiState` 数据类添加了12个新字段
- `serverHost: String?`
- `serverPort: Int`
- `serverDisplayName: String?`
- `lastSelectedServiceId: String?`
- `streamQuality: StreamQuality`
- `postProcessMode: PostProcessMode`
- `autoDownloadProcessedResult: Boolean`
- 8个新的 ViewModel 方法与 Repository 的 setter 对接:
- `setServerHost()`
- `setServerPort()`
- `setServerDisplayName()`
- `setLastSelectedServiceId()`
- `setStreamQuality()`
- `setPostProcessMode()`
- `setAutoDownloadProcessedResult()`
**修复**
- 使用 `Array<Any?>` 方式重写了 `combine()` 的 lambda解决了12个参数类型推断失败的问题
- 使用数组索引方式访问组合流的值,避免了 lambda 参数过多导致的编译错误
---
### 3. SettingsScreen.kt
**变更**:添加了网络协作 UI 界面
**新增内容**
- 8个新的 lambda 参数到 `SettingsScreen()` 函数:
- `onServerHostChanged`
- `onServerPortChanged`
- `onStreamQualityChanged`
- `onPostProcessModeChanged`
- `onAutoDownloadChanged`
- `onScanNetworkHostsClick`
- `onTestConnectionClick`
- 新增 "Network Collaboration" 部分 UI包括
- PC 服务器配置(主机地址和端口输入框)
- 当前连接状态显示
- "扫描主机" 和 "测试连接" 按钮
- 图传质量选择(低/均衡/高三档)
- 后处理模式选择Markdown/OCR PDF
- 自动下载处理结果开关
**修复**
- 第309行添加了缺失的 `SettingsContent` 函数结束的闭合括号 `}`
- 第230行移除了 `keyboardType = KeyboardType.Number` 参数,改用基础的 `OutlinedTextField`,避免版本兼容性问题
---
### 4. strings.xml
**变更**:添加了新的本地化字符串资源
**新增内容**
- `settings_section_network` - "Network Collaboration" 标题
- `stream_quality` - "Stream Quality" 选项标题
- `post_process_mode` - "Post Process Mode" 选项标题
这些资源用于 UI 显示,遵循现有的资源命名规范。
---
### 5. MainActivity.kt
**变更**:更新了 `SettingsScreen` 的调用
**新增内容**
- 6个新的回调参数传递到 `SettingsScreen()`
- `onServerHostChanged = { host -> settingsViewModel.setServerHost(host) }`
- `onServerPortChanged = { port -> settingsViewModel.setServerPort(port) }`
- `onStreamQualityChanged = { quality -> settingsViewModel.setStreamQuality(quality) }`
- `onPostProcessModeChanged = { mode -> settingsViewModel.setPostProcessMode(mode) }`
- `onAutoDownloadChanged = { enabled -> settingsViewModel.setAutoDownloadProcessedResult(enabled) }`
- `onScanNetworkHostsClick = { /* TODO */ }`
- `onTestConnectionClick = { /* TODO */ }`
---
## 编译错误修复
### 原始错误
1. **SettingsRepository.kt:231** - 缺少类闭合括号
2. **SettingsScreen.kt:309** - 缺少函数结束括号
3. **SettingsScreen.kt:230** - OutlinedTextField 的 keyboardType 参数不兼容
4. **SettingsViewModel.kt:65** - combine 的 lambda 参数类型推断失败12个参数过多
5. **MainActivity.kt:283** - SettingsScreen 调用缺少新参数
### 修复方案
1. 添加了缺失的闭合括号
2. 使用 Array<Any?> 方式重写 combine 的 lambda 参数,解决类型推断问题
3. 移除了不兼容的 OutlinedTextField 参数
4. 完整更新了所有调用点的参数传递
---
## 后续待办项目
这些是实现计划中的下一步任务:
### P0局域网发现与基础连接
- Task P0-2实现局域网发现基础能力NSD
- Task P0-3补充网络基础设施HTTP 客户端)
### P1实时图传
- Task P1-2实现帧压缩与抽帧策略
- Task P1-3相机页接入图传控制
### P2手机本地 PDF 上传
- Task P2-1实现 PDF 上传客户端
### P3统一处理任务与结果下载
- Task P3-1实现统一任务接口客户端
### P4体验优化
- Task P4-1发现结果去重与缓存
---
## 验证步骤
1. **编译验证**
```bash
./gradlew clean build
```
2. **单元测试**(如果有):
```bash
./gradlew testDebugUnitTest
```
3. **运行应用**
- 打开应用
- 进入设置页面
- 验证新的"Network Collaboration"部分能正常显示
- 验证所有输入框和按钮响应正常
---
## 技术细节
### 为什么使用 Array<Any?> 方式处理 combine
Kotlin 的 combine 函数最多支持约 9 个参数的类型推断,超过这个数量会导致编译器无法自动推断 lambda 参数类型。通过使用数组方式,我们规避了这个限制,同时保持代码的可读性。
### 为什么移除了 keyboardType
某些 Jetpack Compose 版本中,`OutlinedTextField` 可能不支持 `keyboardType` 参数,或者参数名称/位置不同。通过使用基础的 `OutlinedTextField` API我们确保代码与更多版本的 Compose 兼容。
---
## 文件修改统计
- 修改文件数5 个
- 新增代码行数:约 150 行
- 修复编译错误5 处
- 新增功能点20+ 个包括新的参数、方法、UI 元素)