zhibo/.kiro/specs/android-hot-tab/tasks.md

237 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Implementation Plan
- [x] 1. 修改布局文件添加"热门"Tab
- [x] 1.1 在activity_main.xml的categoryTabs中添加"热门"TabItem放在最左侧
- 在categoryTabs的第一个位置添加TabItem文本为"热门"
- 确保"热门"Tab在"推荐"Tab之前
- _Requirements: 1.1, 1.2, 1.4_
- [x] 1.2 在item_works.xml中添加热门标识ImageView
- 添加id为hotBadge的ImageView
- 设置火焰图标ic_fire_24
- 设置橙红色tint#FF4500
- 默认visibility为gone
- _Requirements: 3.1_
- [x] 2. 修改WorksResponse数据模型
- [x] 2.1 在WorksResponse类中添加isHot和hotTime字段
- 添加Boolean类型的isHot字段
- 添加String类型的hotTime字段
- 添加对应的getter和setter方法
- _Requirements: 2.2, 3.1_
- [x] 3. 修改WorksAdapter显示热门标识
- [x] 3.1 在WorksViewHolder的bind方法中添加热门标识显示逻辑
- 获取hotBadge视图
- 根据works.getIsHot()判断是否显示
- isHot为true时设置visibility为VISIBLE
- isHot为false或null时设置visibility为GONE
- _Requirements: 3.1_
- [ ]* 3.2 编写Property测试热门作品显示热门标识
- **Property 2: 热门作品显示热门标识**
- **Validates: Requirements 3.1**
- [x] 4. 在MainActivity中添加热门作品数据管理
- [x] 4.1 添加热门作品相关成员变量
- 添加hotWorks列表List<WorksResponse>
- 添加currentHotWorksPageint初始值1
- 添加isLoadingHotWorksboolean初始值false
- 添加hasMoreHotWorksboolean初始值true
- _Requirements: 2.1, 5.1_
- [x] 4.2 实现loadHotWorks方法
- 检查isLoadingHotWorks避免重复请求
- 调用ApiService.getHotWorks(page, 20)
- 处理成功响应更新hotWorks列表更新hasMoreHotWorks标志
- 处理失败响应:显示错误提示
- 更新isLoadingHotWorks状态
- _Requirements: 2.1, 2.2, 2.4, 2.5_
- [x] 4.3 实现refreshHotWorks方法
- 重置currentHotWorksPage为1
- 重置hasMoreHotWorks为true
- 调用loadHotWorks(1)
- _Requirements: 4.1, 4.3_
- [x] 4.4 实现loadMoreHotWorks方法
- 检查isLoadingHotWorks和hasMoreHotWorks
- 增加currentHotWorksPage
- 调用loadHotWorks(currentHotWorksPage)
- _Requirements: 5.1, 5.3_
- [x] 4.5 实现updateHotWorksUI方法
- 检查hotWorks是否为空
- 为空时显示空状态视图
- 不为空时转换为FeedItem列表并更新adapter
- _Requirements: 2.2, 2.6_
- [ ]* 4.6 编写Property测试热门Tab仅显示作品内容
- **Property 1: 热门Tab仅显示作品内容**
- **Validates: Requirements 2.3**
- [x] 5. 修改categoryTabs的Tab选择监听器
- [x] 5.1 修改onTabSelected方法处理"热门"Tab
- 获取选中Tab的文本
- 判断是否为"热门"
- 如果是"热门"调用refreshHotWorks()
- 如果是其他分类调用applyCategoryFilterWithAnimation()
- _Requirements: 1.3, 2.1, 4.1_
- [x] 5.2 修改onTabReselected方法处理"热门"Tab
- 判断是否为"热门"
- 如果是"热门"调用refreshHotWorks()刷新数据
- _Requirements: 4.1_
- [x] 6. 修改下拉刷新逻辑
- [x] 6.1 在SwipeRefreshLayout的OnRefreshListener中添加"热门"Tab判断
- 检查currentCategory是否为"热门"
- 如果是"热门"调用refreshHotWorks()
- 如果不是调用fetchDiscoverRooms()
- _Requirements: 4.1, 4.2, 4.3_
- [x] 7. 修改滚动加载更多逻辑
- [x] 7.1 在RecyclerView的OnScrollListener中添加"热门"Tab判断
- 检查是否滚动到底部lastVisible >= total - 4
- 检查currentCategory是否为"热门"
- 如果是"热门"调用loadMoreHotWorks()
- _Requirements: 5.1, 5.2_
- [-] 8. 实现Tab切换时的状态保存和恢复
- [x] 8.1 添加Tab切换时间记录
- 添加lastHotTabLeaveTime成员变量long
- 在切换离开"热门"Tab时记录当前时间
- _Requirements: 6.1, 6.3_
- [ ] 8.2 实现返回"热门"Tab时的状态恢复
- 检查是否有已加载的数据
- 如果有数据且停留时间小于5分钟恢复数据和滚动位置
- 如果停留时间超过5分钟调用refreshHotWorks()
- _Requirements: 6.2, 6.3_
- [x] 9. 添加错误处理和空状态显示
- [x] 9.1 实现showErrorState方法
- 显示错误提示视图
- 提供重试按钮
- 重试按钮点击时调用refreshHotWorks()
- _Requirements: 2.5, 4.4, 5.4_
- [x] 9.2 实现showEmptyState方法
- 显示空状态视图
- 显示"暂无热门作品"文本
- 提供刷新按钮
- _Requirements: 2.6_
- [x] 10. 设置默认选中"热门"Tab
- [x] 10.1 在showDiscoverTab方法中设置默认选中
- 在categoryTabs初始化完成后
- 获取索引为0的Tab"热门"Tab
- 调用tab.select()选中该Tab
- 触发loadHotWorks加载数据
- _Requirements: 1.3_
- [ ]* 11. 编写单元测试
- [ ]* 11.1 测试"热门"Tab位置和顺序
- 测试categoryTabs包含6个Tab
- 测试"热门"Tab在索引0位置
- 测试"推荐"Tab在索引1位置
- _Requirements: 1.1, 1.2, 1.4_
- [ ]* 11.2 测试热门作品加载逻辑
- 测试loadHotWorks调用正确的API
- 测试refreshHotWorks重置页码
- 测试loadMoreHotWorks增加页码
- 测试空数据显示空状态
- 测试错误显示错误提示
- _Requirements: 2.1, 2.4, 2.5, 2.6, 4.1, 5.1_
- [ ]* 11.3 测试WorksAdapter热门标识显示
- 测试isHot=true时hotBadge可见
- 测试isHot=false时hotBadge不可见
- _Requirements: 3.1_
- [ ]* 11.4 测试下拉刷新和加载更多
- 测试下拉刷新触发refreshHotWorks
- 测试滚动到底部触发loadMoreHotWorks
- 测试刷新动画显示和隐藏
- _Requirements: 4.1, 4.2, 4.3, 5.1, 5.2_
- [ ]* 11.5 测试Tab切换状态保存
- 测试切换Tab后数据保留
- 测试返回Tab后数据恢复
- 测试超过5分钟自动刷新
- _Requirements: 6.1, 6.2, 6.3_
- [ ] 12. Checkpoint - 确保所有测试通过
- Ensure all tests pass, ask the user if questions arise.