docs(chat): empty state 요구를 기록한다

This commit is contained in:
2026-07-11 22:01:56 +09:00
parent 2a2315ecbc
commit 0c111aaf47
2 changed files with 22 additions and 1 deletions

View File

@@ -485,6 +485,26 @@
- 실패가 있었다면 실패 원인과 후속 조치
- 검증: 기존 Verification Log를 삭제하거나 덮어쓰지 않고 하단에 새 항목으로 누적한다.
### Phase 11: 채팅 탭 empty state 문구 표시
- [x] **Task 11.1: 탭별 empty state 문구 요구사항 반영**
- Files:
- Modify: `docs/20260609_채팅_탭_페이지/prd.md`
- Modify: `app/src/main/res/layout/fragment_v2_main_chat.xml`
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
- Modify: `app/src/main/res/values/strings.xml`
- Modify: `app/src/main/res/values-en/strings.xml`
- Modify: `app/src/main/res/values-ja/strings.xml`
- Modify: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragmentLayoutTest.kt`
- 작업:
- `ChatRoomListUiState.Empty` 수신 시 검은 빈 화면 대신 현재 선택된 탭에 맞는 empty 문구를 표시한다.
- Content/Loading/Error 상태에서는 empty 문구를 숨기고 기존 목록/오류 처리 정책을 유지한다.
- 검증:
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest" --max-workers=1`
- Expected: empty placeholder layout과 탭별 문구 source 계약 검증이 PASS.
- 검증 기록:
- 2026-07-11: `ChatMainFragmentLayoutTest`에 empty placeholder layout과 탭별 문구 source 계약 검증을 추가하고, `ChatMainFragment`에서 `ChatRoomListUiState.Empty` 수신 시 현재 filter별 empty 문구를 표시하도록 보정했다. 회귀 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `git diff --check` PASS를 확인했다. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation warning이 출력됐지만 실패는 없었다.
---
## 구현 제외 체크리스트
@@ -536,5 +556,6 @@
- 2026-06-10: 사용자 피드백에 따라 통합 검증 Phase가 마지막에 오도록 Plan-Task 순서를 정리했다. 기존 Phase 9(탭 전환/첫 페이지 로딩 시 스크롤 최상단 이동 처리)를 Phase 8로, 기존 Phase 10(채팅 타이틀바 우측 액션 메뉴 이미지 간격 조정)을 Phase 9로 한 단계씩 당기고, 기존 Phase 8(통합 검증과 문서 기록)을 마지막 Phase 10으로 이동했다. 문서 순서 정정만 수행했으며 빌드/테스트는 실행하지 않았다.
- 2026-06-10: Phase 10 통합 검증을 완료했다. `./gradlew :app:mergeDebugResources``BUILD SUCCESSFUL in 1s`, `./gradlew :app:compileDebugKotlin``BUILD SUCCESSFUL in 1s`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.*"``BUILD SUCCESSFUL in 9s`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.*CapsuleTab*"``BUILD SUCCESSFUL in 5s`, `./gradlew :app:ktlintCheck``BUILD SUCCESSFUL in 3s`로 통과했다. ktlint의 `.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 남아 있다.
- 2026-06-10: 구현 제외 체크리스트를 확인했다. `ChatMainFragment.kt``chatType=AI`가 아닌 item 클릭 시 즉시 return하고 floating button은 빈 listener만 유지한다. `fragment_v2_main_chat.xml`에는 `BottomNavigationView`가 없고, `item_v2_chat_room.xml`에는 unread dot view/binding이 없다. `rg`와 직접 파일 확인으로 WebSocket/SSE, pull-to-refresh, skeleton/shimmer 추가가 없고 `ChatRoomModels.kt`의 API schema 필드명도 `roomId`, `chatType`, `targetName`, `targetImageUrl`, `lastMessage`, `lastMessageAt`, `rooms`, `hasMore`, `nextCursor` 계약을 유지함을 확인했다.
- 2026-07-11: Phase 11 empty state 보정 완료. 전체/AI 채팅/DM 탭별 empty 문구를 `values`, `values-en`, `values-ja`에 추가하고 `fragment_v2_main_chat.xml`의 empty `TextView`, `ChatRoomFilter.emptyMessageResId()`, `ChatMainFragment.bindChatRooms(items, showEmpty)`로 빈 목록 표시를 연결했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomViewModelTest" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `git diff --check` PASS를 확인했다. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation warning이 출력됐지만 실패는 없었다.
---

View File

@@ -80,7 +80,7 @@
#### Edge Cases
- API 요청 `filter``ALL`, `AI`, `DM` 중 하나만 사용한다.
- `chatType``AI`, `DM` 문자열만 사용한다.
- 탭 전환 후 표시할 item이 없으면 목록을 비운다. 별도 empty placeholder는 추가하지 않는다.
- 탭 전환 후 표시할 item이 없으면 탭별 empty placeholder를 표시한다. 전체 탭은 `아직 나눈 대화가 없어요.\n크리에이터와 이야기를 시작해 보세요.`, AI 채팅 탭은 `아직 나눈 대화가 없어요.\nAI 크리에이터와 대화를 시작해 보세요.`, DM 탭은 `아직 나눈 대화가 없어요.\n좋아하는 크리에이터에게 메세지를 보내보세요.`를 표시한다.
- 탭 전환 시점 또는 첫 번째 페이지 로드 시(isAppending = false인 상태) 목록의 스크롤을 최상단으로 이동시킨다.
### Chat Room List