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

237 lines
5.9 KiB
Markdown
Raw Normal View History

# 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.