docs(home): 팔로잉 empty 문구 계획을 기록한다
This commit is contained in:
@@ -780,7 +780,59 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Phase 12: 전체 empty 문구 중앙 표시
|
||||||
|
|
||||||
|
- [x] **Task 12.1: 문서와 source test로 empty 문구 계약 고정**
|
||||||
|
- 수정:
|
||||||
|
- `docs/20260625_메인_홈_팔로잉_탭/prd.md`
|
||||||
|
- `docs/20260625_메인_홈_팔로잉_탭/plan-task.md`
|
||||||
|
- `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt`
|
||||||
|
- 작업:
|
||||||
|
- 기존 `screen_home_following_empty` string resource를 재사용한다는 계약을 문서화한다.
|
||||||
|
- `fragment_v2_main_home.xml`에 `tv_home_following_empty`가 있고 `@string/screen_home_following_empty`를 사용하는지 source test로 고정한다.
|
||||||
|
- empty `TextView`가 팔로잉 탭 전체 영역에서 가운데 배치되고 텍스트도 가운데 정렬되는지 source test로 고정한다.
|
||||||
|
- `HomeFollowingUiState.Empty`는 empty 문구를 표시하고, `Content`, `LoginRequired`, `Error`는 숨김 경로를 갖는지 source test로 고정한다.
|
||||||
|
- 검증:
|
||||||
|
- Run: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`
|
||||||
|
- Expected RED: 구현 전 `tv_home_following_empty`와 empty visibility 분기 부재로 실패한다.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-07-13: 기존 `screen_home_following_empty` string resource를 재사용해 전체 empty 문구를 표시하는 요구사항을 PRD와 계획 문서에 추가했다. `HomeFollowingFragmentSourceTest`에 `tv_home_following_empty` id, string 재사용, 중앙 정렬 속성, `HomeFollowingUiState.Empty` 전용 표시 분기를 고정하는 source test를 추가했다.
|
||||||
|
|
||||||
|
- [x] **Task 12.2: 다국어 string과 empty UI 구현**
|
||||||
|
- 수정:
|
||||||
|
- `app/src/main/res/values/strings.xml`
|
||||||
|
- `app/src/main/res/values-en/strings.xml`
|
||||||
|
- `app/src/main/res/values-ja/strings.xml`
|
||||||
|
- `app/src/main/res/layout/fragment_v2_main_home.xml`
|
||||||
|
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`
|
||||||
|
- 작업:
|
||||||
|
- 기존 `screen_home_following_empty` 값을 한국어/영어/일본어 문구로 갱신한다.
|
||||||
|
- 팔로잉 탭 content 영역에 `tv_home_following_empty`를 추가하고 중앙 배치/중앙 정렬한다.
|
||||||
|
- `HomeFollowingUiState.Empty`에서 empty 문구를 표시하고 섹션 adapter는 비운다.
|
||||||
|
- `HomeFollowingUiState.Content`, `LoginRequired`, `Error`에서는 empty 문구를 숨긴다.
|
||||||
|
- 검증:
|
||||||
|
- Run: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`
|
||||||
|
- Expected GREEN: source test PASS.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-07-13: `values`, `values-en`, `values-ja`의 기존 `screen_home_following_empty` 값을 한국어/영어/일본어 2줄 문구로 갱신했다. `fragment_v2_main_home.xml`에 `tv_home_following_empty`를 추가하고 `@string/screen_home_following_empty`, `match_parent`, `gravity=center`, `textAlignment=center`, 기본 `gone`을 적용했다. `HomeMainFragment`에서는 `HomeFollowingUiState.Empty`만 empty 문구를 표시하고, `Content`, `LoginRequired`, `Error`는 숨기도록 분기했다.
|
||||||
|
|
||||||
|
- [x] **Task 12.3: empty 문구 회귀 검증 기록**
|
||||||
|
- 검증:
|
||||||
|
- Run: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`
|
||||||
|
- Expected: 팔로잉 관련 local unit/source test PASS.
|
||||||
|
- Run: `./gradlew --no-daemon :app:mergeDebugResources`
|
||||||
|
- Expected: string/layout resource merge PASS.
|
||||||
|
- Run: `./gradlew --no-daemon :app:compileDebugKotlin`
|
||||||
|
- Expected: Kotlin compile PASS.
|
||||||
|
- Run: `git diff --check`
|
||||||
|
- Expected: whitespace error 없음.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-07-13: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew --no-daemon :app:mergeDebugResources`, `./gradlew --no-daemon :app:compileDebugKotlin`, `git diff --check` 모두 PASS. Gradle 실행 중 기존 deprecation warning만 출력됐다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Verification Log
|
## Verification Log
|
||||||
|
- 2026-07-13 Phase 12 전체 empty 문구 중앙 표시 검증: 팔로잉 탭 전체 empty 상태에서 기존 `screen_home_following_empty` 리소스를 재사용해 `아직 팔로잉 소식이 없어요.\n관심 있는 크리에이터를 팔로우해 보세요.` 문구를 중앙 표시하도록 구현했다. 영어는 `No following updates yet.\nFollow creators you are interested in.`, 일본어는 `フォロー中のお知らせはまだありません。\n気になるクリエイターをフォローしてみましょう。`로 갱신했다. `HomeFollowingUiState.Empty`에서만 empty 문구가 보이고 `Content`, `LoginRequired`, `Error`에서는 숨김 처리된다. 검증으로 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew --no-daemon :app:mergeDebugResources`, `./gradlew --no-daemon :app:compileDebugKotlin`, `git diff --check` 모두 PASS. Gradle 실행 중 기존 deprecation warning만 출력됐다.
|
||||||
- 2026-07-12 Phase 11 검증: 최근 소식 `COMMUNITY_POST` 상세 이동 계약을 source test로 추가하고 `HomeMainFragment.onFollowingNewsClick()`에서 `HomeFollowingNewsUiItem.Community`만 `CreatorChannelCommunityDetailActivity.newIntent(requireContext(), postId)`로 이동하도록 구현했다. RED 시도: 구현 전 targeted test `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"`는 120초/300초 timeout으로 assertion 결과까지 도달하지 못했지만, 당시 production은 no-op 상태였고 새 source test는 `ensureMainV2NavigationAllowed`와 상세 이동 호출 문자열을 요구하도록 추가되어 실패 조건을 고정했다. GREEN: 동일 targeted test PASS. 회귀 검증 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew --no-daemon :app:compileDebugKotlin`, `git diff --check` PASS. `./gradlew --no-daemon :app:ktlintCheck`는 이번 변경과 무관한 기존 legacy/source 위반(`explorer/profile/creator_community` package underscore, `LiveRoomActivity.kt` formatting, `NicknameUpdateViewModel.kt` indentation 등)으로 FAIL. 실기기 수동 QA는 `adb devices` 결과 연결된 device가 없어 blocked.
|
- 2026-07-12 Phase 11 검증: 최근 소식 `COMMUNITY_POST` 상세 이동 계약을 source test로 추가하고 `HomeMainFragment.onFollowingNewsClick()`에서 `HomeFollowingNewsUiItem.Community`만 `CreatorChannelCommunityDetailActivity.newIntent(requireContext(), postId)`로 이동하도록 구현했다. RED 시도: 구현 전 targeted test `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"`는 120초/300초 timeout으로 assertion 결과까지 도달하지 못했지만, 당시 production은 no-op 상태였고 새 source test는 `ensureMainV2NavigationAllowed`와 상세 이동 호출 문자열을 요구하도록 추가되어 실패 조건을 고정했다. GREEN: 동일 targeted test PASS. 회귀 검증 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew --no-daemon :app:compileDebugKotlin`, `git diff --check` PASS. `./gradlew --no-daemon :app:ktlintCheck`는 이번 변경과 무관한 기존 legacy/source 위반(`explorer/profile/creator_community` package underscore, `LiveRoomActivity.kt` formatting, `NicknameUpdateViewModel.kt` indentation 등)으로 FAIL. 실기기 수동 QA는 `adb devices` 결과 연결된 device가 없어 blocked.
|
||||||
- 2026-06-25 Phase 1-3 구현 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS.
|
- 2026-06-25 Phase 1-3 구현 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS.
|
||||||
- 2026-06-25 Phase 1-3 코드 리뷰 및 재검증: blocking finding 없음. `./gradlew :app:mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, 나머지 검증 명령도 PASS.
|
- 2026-06-25 Phase 1-3 코드 리뷰 및 재검증: blocking finding 없음. `./gradlew :app:mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, 나머지 검증 명령도 PASS.
|
||||||
|
|||||||
@@ -287,6 +287,17 @@ Figma `24:5682` 기준 상단 title bar와 tab bar는 기존 홈 화면 구조
|
|||||||
- `COMMUNITY_POST`가 아닌 최근 소식 item은 이번 작업 범위에서 기존처럼 이동하지 않는다.
|
- `COMMUNITY_POST`가 아닌 최근 소식 item은 이번 작업 범위에서 기존처럼 이동하지 않는다.
|
||||||
- legacy `CreatorCommunityAllActivity`나 `Constants.EXTRA_COMMUNITY_POST_ID` 직접 extra 조립 경로는 사용하지 않는다.
|
- legacy `CreatorCommunityAllActivity`나 `Constants.EXTRA_COMMUNITY_POST_ID` 직접 extra 조립 경로는 사용하지 않는다.
|
||||||
|
|
||||||
|
#### 2026-07-13 전체 empty 문구 Requirements
|
||||||
|
- `isLoginRequired = false`이고 `followingCreators`, `onAirLives`, `recentChats`, `monthlySchedules`, `recentNews`가 모두 비어 있는 `HomeFollowingUiState.Empty` 상태에서는 팔로잉 탭 본문 중앙에 empty 문구를 표시한다.
|
||||||
|
- empty 문구는 기존 `screen_home_following_empty` string resource를 재사용해 수정한다.
|
||||||
|
- 한국어 기본 문구는 `아직 팔로잉 소식이 없어요.\n관심 있는 크리에이터를 팔로우해 보세요.`로 표시한다.
|
||||||
|
- 영어 문구는 `No following updates yet.\nFollow creators you are interested in.`로 표시한다.
|
||||||
|
- 일본어 문구는 `フォロー中のお知らせはまだありません。\n気になるクリエイターをフォローしてみましょう。`로 표시한다.
|
||||||
|
- empty 문구 `TextView`는 팔로잉 탭 content 영역 전체의 가운데에 배치하고, 텍스트도 가운데 정렬한다.
|
||||||
|
- `HomeFollowingUiState.Content`에서는 empty 문구를 숨기고 기존 섹션별 visibility 정책을 유지한다.
|
||||||
|
- `HomeFollowingUiState.LoginRequired`와 `Error`는 이번 범위에서 empty 문구를 표시하지 않고 기존처럼 섹션을 숨긴다.
|
||||||
|
- API/DTO/mapper 계약과 팔로잉 크리에이터 `전체` 버튼 노출 정책은 변경하지 않는다.
|
||||||
|
|
||||||
#### 2026-06-30 후속 수정 Requirements
|
#### 2026-06-30 후속 수정 Requirements
|
||||||
- `CREATOR_RANKING` 최근 소식 본문은 순위 숫자만 단독 표시하지 않고, Figma `24:5717` 기준으로 크리에이터 이름과 순위를 포함한 문장형 메시지를 표시한다.
|
- `CREATOR_RANKING` 최근 소식 본문은 순위 숫자만 단독 표시하지 않고, Figma `24:5717` 기준으로 크리에이터 이름과 순위를 포함한 문장형 메시지를 표시한다.
|
||||||
- ranking 문장 안의 순위 텍스트는 기존 `FeedRankTextStyler` highlight range로 강조한다.
|
- ranking 문장 안의 순위 텍스트는 기존 `FeedRankTextStyler` highlight range로 강조한다.
|
||||||
|
|||||||
Reference in New Issue
Block a user