SettingsScreen & Configuration
本文档涵盖了 SettingsScreen UI 组件和 AppConfig 单例,它们共同管理 MagicWord 中的应用程序范围配置。设置系统提供了用于配置 AI 集成参数、个性化选项、系统首选项以及独特的 Key-Kit 身份验证机制(简化多参数 API 配置)的用户界面。
有关更新检查和下载功能的信息,请参阅 更新系统。
架构概览
配置系统遵循具有即时 UI 响应性的三层持久化模型。系统使用 DisposableEffect 在用户离开设置屏幕时触发配置持久化,确保所有更改自动保存。
AppConfig 单例
AppConfig 是应用程序范围配置的单一真实来源,作为 Kotlin object (单例) 实现。
配置属性:
apiKey(String): AI 服务 API 认证密钥。modelName(String): AI 模型标识符 (默认: "Qwen/Qwen2.5-7B-Instruct")。serverUrl(String): AI 服务基础 URL (通过 Key-Kit 设置)。userPersona(String): AI 个性化的用户上下文。saveLocationId(Int): 新单词导入的目标词库 ID (-1 = 当前词库)。
初始化与持久化:
init(Context): 在应用启动时从 SharedPreferences 加载配置。saveConfig(): 将内存中的更改原子地提交到 SharedPreferences。
Key-Kit 验证系统
Key-Kit 系统将多参数 API 配置的复杂性抽象为单个验证密钥,减少了设置过程中的用户摩擦。
实现细节:
- 动态 Retrofit 客户端: 构建针对
https://mag.upxuu.com/的临时实例。 - 验证请求: 发送
VerifyKitRequest(kitKey)到/verify-kit端点。 - 批量更新: 如果有效,更新
apiKey,modelName,baseUrl。 - 重新加载触发: 调用
AppConfig.reload(context)刷新基础 URL。 - UI 状态: 仅在
!isVerifyingKit时启用按钮。
配置类别
AI 配置部分
- Key-Kit 输入: 用于批量凭据更新的单行文本框。
- API Key 字段: 只读显示 (可手动覆盖)。
- 模型名称字段: 可编辑文本框。
个性化部分
- 用户角色 (User Persona): 多行文本框,传递给 AI 以获取个性化示例/助记符。
- 保存位置: 下拉菜单选择目标词库。特殊条目 "跟随当前" 设置为 -1。
系统首选项部分
- 启用日志: 开关 ("enable_log")。
- 自动更新: 开关 ("auto_update")。
这两个设置持久化到 "app_settings" SharedPreferences 文件(与 AppConfig 分开)。
链接与关于部分
可点击的 ListItem 组件:
- 文档: 跳转到文档网站。
- GitHub 仓库: 跳转到源码。
- 开发者博客: 跳转到博客。
- 日志列表: 导航到日志查看器。
- 关于: 导航到关于对话框。
持久化机制
两层 SharedPreferences 架构:
- app_config: AI 配置和核心设置。
- app_settings: UI 状态和系统偏好。
保存触发器: saveAllConfig() 函数由 onDispose 触发(导航返回、配置更改、后台运行),确保自动持久化。
更新管理集成
设置屏幕通过 UpdateManager 提供更新检查 UI。
- 版本显示: ListItem 显示当前版本。
- 点击操作: 触发
checkUpdate()。 - 状态: 显示 "Checking..." 或版本号。
日志管理 UI
LogListScreen 组件:
- 获取日志:
LogUtil.getAllLogFiles()。 - 显示列表: LazyColumn 显示日志文件。
- 操作: 点击查看详情,点击分享图标调用
shareLogFile。 - 分享实现: 使用 Android
FileProvider安全地向外部应用公开日志文件。
状态管理模式
- 本地状态初始化: 所有可编辑设置使用 "read-on-mount" 模式,创建配置的本地副本。
- 跨组件依赖: 保存位置下拉菜单依赖于
LibraryViewModel.allLibraries。
UI 布局结构
使用 Divider 组件在视觉上分隔逻辑部分。部分标题使用 MaterialTheme.typography.titleSmall。
相关组件
- UpdateDialog: 显示发布说明和更新操作。
- AboutDialog: 显示版本和作者信息。
- LogDetailDialog: 只读文本查看器显示日志内容。