Commit f683506
feat: 实现书签新建、分享新建功能 (#73)
* feat: 实现书签分享功能,包含FAB和完整的创建流程
- 新增 createBookmark API 支持 POST /bookmarks 接口
- 实现 AddBookmarkViewModel 遵循 MVVM 架构模式
- 创建 AddBookmarkScreen 包含表单验证和标签选择
- 在所有书签列表页面添加 Material Design 3 FABs
- 复用 LabelEditDialog 进行标签编辑
- 支持异步书签创建处理 (状态码 202)
- 修复按钮交互问题:统一提交入口和加载状态显示
- 添加完整的单元测试覆盖
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat(bookmark): 优化书签列表FAB滚动行为并重构创建书签API
refactor(api): 修改创建书签返回类型为void
style: 移除冗余注释并调整滚动阈值
test: 更新mock文件以匹配API变更
* test(ui): 添加滚动控制器提供者和FAB动画的测试用例
* feat(分享): 添加接收分享内容功能
实现从其他应用接收文本和URL分享的功能,包括:
- 添加receive_sharing_intent依赖
- 配置AndroidManifest.xml接收分享Intent
- 创建ShareIntentService处理分享内容
- 在主布局中显示分享内容悬浮窗
- 升级Java版本至17以支持新功能
* feat(书签): 实现从分享文本中提取URL并自动填充的功能
- 添加处理分享文本的方法,能够提取URL并更新ViewModel
- 修改路由逻辑以支持通过query参数传递分享文本
- 改进表单控制器与ViewModel的双向绑定
- 移除不再使用的ShareOverlay组件
- 添加相关测试用例验证URL提取逻辑
* feat(bookmark): 添加AI标签推荐和自动网页内容获取功能
实现基于OpenRouter API的AI标签推荐功能,包括:
1. 新增WebContentService服务用于获取网页内容
2. 新增AiTagRecommendationRepository处理标签推荐逻辑
3. 扩展AddBookmarkViewModel支持自动获取内容和标签推荐
4. 更新UI展示推荐标签和获取状态
5. 添加相关测试用例
* feat(书签): 添加推荐标签消费状态管理
添加_hasConsumedRecommendations状态控制推荐标签显示逻辑
修复URL输入框错误状态显示问题
添加内容获取和标签推荐失败的错误监听
优化推荐标签UI交互逻辑
* Enhances AddBookmarkViewModel tests
Improves the AddBookmarkViewModel tests by using Mockito code generation for mock classes, instead of manual mock implementations.
Adds tests for AI availability status and URL validation.
Refactors the URL validation tests to await asynchronous operations and fixes form clearing logic.
These changes improve the reliability and coverage of the AddBookmarkViewModel tests.
* feat(ai标签): 添加AI标签设置功能并优化标签推荐逻辑
实现AI标签设置页面,支持选择目标语言
重构标签推荐逻辑,使用系统提示词和JSON格式响应
将翻译设置整合到AI设置页面中
* feat: 添加AI标签目标语言设置功能
- 在设置仓库中添加保存和获取AI标签目标语言的方法
- 实现AI标签设置视图模型,支持语言选择和保存
- 为AI标签推荐仓库添加目标语言支持
- 添加相关单元测试验证功能
- 更新项目规则文档,添加Mockito null safety错误处理说明
* refactor(bookmarks): 重构书签列表存储方式,使用ID列表替代完整模型列表
修改书签视图模型,将直接存储书签模型列表改为存储书签ID列表,通过ID从仓库获取完整模型。这提高了性能并减少了内存占用,同时需要更新相关测试用例以适应新的实现方式。
* refactor(ui): 重构滚动控制器和FAB的共享逻辑
重构LabelEditDialog以支持更灵活的标签选择
简化书签创建API的响应处理
更新测试用例以适应重构后的组件
将ScrollControllerProvider整合到MainLayout中
移除冗余的滚动控制器管理代码
* fix(web_content_service): 完善URL格式验证逻辑
添加对https协议和空主机名的检查,确保URL验证更严格
* refactor(web内容): 引入WebContentRepository替换直接使用WebContentService
将WebContentService的使用重构为通过WebContentRepository接口,遵循仓库模式分离业务逻辑与数据源
更新相关测试和依赖注入配置以适配新的仓库层
* fix: 修复内容获取状态更新逻辑
将_isContentFetched状态更新移到标题更新之前,确保状态及时更新
* feat: 实现全局SnackBar支持并优化书签获取逻辑
添加全局ScaffoldMessengerKey以支持页面导航后显示SnackBar
重构书签获取逻辑使用getCachedBookmark替代直接访问bookmarks列表
更新测试用例以适配新的书签获取方式
* fix: 修复API响应状态码检查及异步标签加载问题
- 在ReadeckApiClient中增加201状态码作为有效响应
- 将标签加载方法改为异步执行
- 更新测试中的虚拟返回值以匹配实际类型
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 4caf993 commit f683506
File tree
58 files changed
+9372
-172
lines changed- .trae/rules
- android
- app
- src/main
- lib
- config
- data
- repository
- ai_tag_recommendation
- bookmark
- settings
- web_content
- service
- routing
- ui
- bookmarks
- view_models
- widget
- core
- ui
- daily_read/widgets
- settings
- view_models
- widgets
- test
- ui
- bookmarks
- view_models
- widget
- core/ui
- daily_read
- view_models
- widgets
- routing
- settings/view_models
- unit/data
- repository
- ai_tag_recommendation
- bookmark
- service
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
58 files changed
+9372
-172
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
615 | 615 | | |
616 | 616 | | |
617 | 617 | | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
38 | | - | |
| 37 | + | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
43 | 50 | | |
44 | 51 | | |
45 | 52 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
27 | 41 | | |
28 | 42 | | |
29 | 43 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
6 | 25 | | |
7 | 26 | | |
8 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
12 | 15 | | |
13 | 16 | | |
14 | 17 | | |
| |||
22 | 25 | | |
23 | 26 | | |
24 | 27 | | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
25 | 31 | | |
26 | 32 | | |
27 | 33 | | |
| |||
34 | 40 | | |
35 | 41 | | |
36 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
37 | 49 | | |
38 | 50 | | |
39 | 51 | | |
| |||
Lines changed: 243 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
391 | 391 | | |
392 | 392 | | |
393 | 393 | | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
394 | 417 | | |
395 | 418 | | |
396 | 419 | | |
| |||
0 commit comments