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>
6.1 KiB
6.1 KiB
UI 扩展修复总结
修改文件清单
1. SettingsRepository.kt
变更:添加了网络协作相关的配置项和枚举类型
新增内容:
-
7个新的
stringPreferencesKey:SERVER_HOST- PC主机地址SERVER_PORT- PC端口SERVER_DISPLAY_NAME- PC显示名称LAST_SELECTED_SERVICE_ID- 上次选择的服务IDSTREAM_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: IntserverDisplayName: String?lastSelectedServiceId: String?streamQuality: StreamQualitypostProcessMode: PostProcessModeautoDownloadProcessedResult: 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()函数:onServerHostChangedonServerPortChangedonStreamQualityChangedonPostProcessModeChangedonAutoDownloadChangedonScanNetworkHostsClickonTestConnectionClick
-
新增 "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 */ }
编译错误修复
原始错误
- SettingsRepository.kt:231 - 缺少类闭合括号
- SettingsScreen.kt:309 - 缺少函数结束括号
- SettingsScreen.kt:230 - OutlinedTextField 的 keyboardType 参数不兼容
- SettingsViewModel.kt:65 - combine 的 lambda 参数类型推断失败(12个参数过多)
- MainActivity.kt:283 - SettingsScreen 调用缺少新参数
修复方案
- 添加了缺失的闭合括号
- 使用 Array<Any?> 方式重写 combine 的 lambda 参数,解决类型推断问题
- 移除了不兼容的 OutlinedTextField 参数
- 完整更新了所有调用点的参数传递
后续待办项目
这些是实现计划中的下一步任务:
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:发现结果去重与缓存
验证步骤
-
编译验证:
./gradlew clean build -
单元测试(如果有):
./gradlew testDebugUnitTest -
运行应用:
- 打开应用
- 进入设置页面
- 验证新的"Network Collaboration"部分能正常显示
- 验证所有输入框和按钮响应正常
技术细节
为什么使用 Array<Any?> 方式处理 combine?
Kotlin 的 combine 函数最多支持约 9 个参数的类型推断,超过这个数量会导致编译器无法自动推断 lambda 参数类型。通过使用数组方式,我们规避了这个限制,同时保持代码的可读性。
为什么移除了 keyboardType?
某些 Jetpack Compose 版本中,OutlinedTextField 可能不支持 keyboardType 参数,或者参数名称/位置不同。通过使用基础的 OutlinedTextField API,我们确保代码与更多版本的 Compose 兼容。
文件修改统计
- 修改文件数:5 个
- 新增代码行数:约 150 行
- 修复编译错误:5 处
- 新增功能点:20+ 个(包括新的参数、方法、UI 元素)