fix(following): empty 안내 문구를 정리한다
This commit is contained in:
@@ -317,7 +317,7 @@
|
||||
<string name="screen_home_following_ranking_rank_format">%1$d位</string>
|
||||
<string name="screen_home_following_creator_ranking_news_message">%1$sが今週のランキングで%2$sにランクイン!</string>
|
||||
<string name="screen_home_following_content_ranking_news_message">%1$sが今週のランキング%2$sに入りました!</string>
|
||||
<string name="screen_home_following_empty">フォロー中のお知らせはまだありません。\n気になるクリエイターをフォローしてみましょう。</string>
|
||||
<string name="screen_home_following_empty">まだフォローしているクリエイターがいません。\n気になるクリエイターをフォローしてみましょう。</string>
|
||||
<string name="home_recommendation_activity_live">ライブ</string>
|
||||
<string name="home_recommendation_activity_audio">オーディオ</string>
|
||||
<string name="home_recommendation_activity_community">コミュニティ</string>
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
<string name="screen_home_following_ranking_rank_format">%1$d위</string>
|
||||
<string name="screen_home_following_creator_ranking_news_message">%1$s님이 이번 주 랭킹 %2$s에 올랐어요!</string>
|
||||
<string name="screen_home_following_content_ranking_news_message">%1$s 콘텐츠가 이번 주 랭킹 %2$s에 올랐어요!</string>
|
||||
<string name="screen_home_following_empty">아직 팔로잉 소식이 없어요.\n관심 있는 크리에이터를 팔로우해 보세요.</string>
|
||||
<string name="screen_home_following_empty">아직 팔로우한 크리에이터가 없어요.\n관심 있는 크리에이터를 팔로우해 보세요.</string>
|
||||
<string name="home_recommendation_activity_live">라이브</string>
|
||||
<string name="home_recommendation_activity_audio">오디오</string>
|
||||
<string name="home_recommendation_activity_community">커뮤니티</string>
|
||||
|
||||
+2
-2
@@ -119,7 +119,7 @@ class HomeFollowingFragmentSourceTest {
|
||||
|
||||
assertTrue(
|
||||
strings.contains(
|
||||
"<string name=\"screen_home_following_empty\">아직 팔로잉 소식이 없어요.\\n" +
|
||||
"<string name=\"screen_home_following_empty\">아직 팔로우한 크리에이터가 없어요.\\n" +
|
||||
"관심 있는 크리에이터를 팔로우해 보세요.</string>"
|
||||
)
|
||||
)
|
||||
@@ -131,7 +131,7 @@ class HomeFollowingFragmentSourceTest {
|
||||
)
|
||||
assertTrue(
|
||||
stringsJa.contains(
|
||||
"<string name=\"screen_home_following_empty\">フォロー中のお知らせはまだありません。\\n" +
|
||||
"<string name=\"screen_home_following_empty\">まだフォローしているクリエイターがいません。\\n" +
|
||||
"気になるクリエイターをフォローしてみましょう。</string>"
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1544,7 +1544,78 @@
|
||||
|
||||
---
|
||||
|
||||
### Phase 15: 팔로잉 empty 안내 문구 변경
|
||||
|
||||
**Phase 결과:** 팔로잉 탭의 5개 섹션이 모두 비면 기존 중앙 empty UI에 확정된 한국어·일본어 안내 문구가 표시되고, 안내 상태에서도 당겨서 새로고침할 수 있다.
|
||||
|
||||
**선행조건:** Phase 12의 `HomeFollowingUiState.Empty` 중앙 표시와 홈 탭 `SwipeRefreshLayout` 새로고침 경로가 유지되어야 한다.
|
||||
|
||||
**Phase 완료 조건:** `P15-T1`과 `P15-GATE` 완료, 한국어·일본어 문구 변경 및 영어·empty 판정·중앙 표시·새로고침 회귀 검증 기록 누적.
|
||||
|
||||
#### Task 15.1 한국어·일본어 empty 안내 문구 교체
|
||||
|
||||
**Goal 실행 `P15-T1`:** 기존 empty UI와 string key를 재사용해 한국어·일본어 문구의 첫 문장만 확정 문구로 교체한다.
|
||||
|
||||
- **시작 조건:** PRD의 `2026-08-19 팔로잉 empty 안내 문구 변경 Requirements`와 `DEC-20260819-001` 확정.
|
||||
- **완료 증거:** 기존 source test의 한국어·일본어 기대값 RED → 두 locale string resource 최소 변경 → focused test GREEN.
|
||||
- **범위 밖:** 영어 문구, API/DTO/mapper, `HomeFollowingUiState`, `HomeMainFragment`, `fragment_v2_main_home.xml`, 다른 화면의 empty 문구 변경.
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt`
|
||||
- Modify: `app/src/main/res/values/strings.xml`
|
||||
- Modify: `app/src/main/res/values-ja/strings.xml`
|
||||
- Confirm unchanged: `app/src/main/res/values-en/strings.xml`
|
||||
|
||||
**Interfaces:**
|
||||
|
||||
- Consumes: `HomeFollowingUiState.Empty`, `R.string.screen_home_following_empty`, `tv_home_following_empty`의 기존 표시 경로.
|
||||
- Produces: 한국어 `아직 팔로우한 크리에이터가 없어요.\n관심 있는 크리에이터를 팔로우해 보세요.`, 일본어 `まだフォローしているクリエイターがいません。\n気になるクリエイターをフォローしてみましょう。` resource 값.
|
||||
|
||||
- [x] **RED:** `HomeFollowingFragmentSourceTest`의 한국어·일본어 `screen_home_following_empty` 기대값을 확정 문구로 변경하고 영어 기대값은 유지한다.
|
||||
- [x] **RED 확인:** `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`를 실행해 기존 한국어 첫 문장 불일치로 focused test가 실패하는지 확인한다.
|
||||
- [x] **GREEN:** `values/strings.xml`과 `values-ja/strings.xml`의 기존 `screen_home_following_empty` 첫 문장만 확정 문구로 교체한다.
|
||||
- [x] **GREEN 확인:** 같은 focused test를 다시 실행해 한국어·일본어 새 문구와 기존 영어 문구 검증이 통과하는지 확인한다.
|
||||
- [x] **REFACTOR:** 추가 abstraction이나 새 resource key를 만들지 않고 이번 변경이 만든 불필요한 수정만 정리한 뒤 focused test와 `git diff --check`를 다시 실행한다.
|
||||
|
||||
검증 기록:
|
||||
|
||||
- 2026-08-19 RED: `HomeFollowingFragmentSourceTest`의 한국어·일본어 기대값만 확정 문구로 변경하고 영어 기대값은 유지한 뒤 focused test를 실행했다. 기존 한국어 resource 값 불일치로 `HomeFollowingFragmentSourceTest.kt:120` assertion 실패를 확인했다.
|
||||
- 2026-08-19 GREEN: `values/strings.xml`, `values-ja/strings.xml`의 기존 `screen_home_following_empty` 첫 문장만 교체했다. 같은 focused test가 `BUILD SUCCESSFUL`로 통과했고 `git diff --check`도 PASS했다. 새 resource key나 abstraction은 추가하지 않았다.
|
||||
|
||||
#### Task 15.2 empty 표시와 당겨서 새로고침 회귀 검증
|
||||
|
||||
**Goal 실행 `P15-GATE`:** 문구 변경 후에도 기존 5개 섹션 전체 empty 판정, 중앙 empty UI 연결, 팔로잉 당겨서 새로고침 경로가 유지되는지 판정한다.
|
||||
|
||||
- **시작 조건:** `P15-T1` 완료.
|
||||
- **완료 증거:** 아래 local unit/source test, resource merge, Kotlin compile, ktlint와 diff 검증 결과 기록.
|
||||
- **범위 밖:** `app/src/androidTest` 작성·실행, 기기·에뮬레이터 UI 조작, 스크린샷·시각 QA, layout 속성 직접 테스트.
|
||||
- **TDD 예외 사유:** 신규 production 로직이 없는 회귀 검증 Gate이므로 별도 RED/GREEN 구현 단계를 만들지 않는다.
|
||||
- **대체 검증 방법:** 기존 mapper test로 5개 섹션 전체 empty 판정을, source test로 empty string 연결·상태 분기와 홈 탭 refresh routing을 검증하고, Phase 12에서 확정된 layout 파일이 이번 Phase에서 변경되지 않았는지 diff로 확인한다.
|
||||
|
||||
**Files:**
|
||||
|
||||
- Test: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingMapperTest.kt`
|
||||
- Test: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt`
|
||||
- Test: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentSourceTest.kt`
|
||||
- Confirm unchanged: `app/src/main/res/layout/fragment_v2_main_home.xml`
|
||||
- Confirm unchanged: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`
|
||||
|
||||
- [x] `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingMapperTest" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentSourceTest"` PASS.
|
||||
- [x] `./gradlew --no-daemon :app:mergeDebugResources :app:compileDebugKotlin :app:ktlintCheck` PASS.
|
||||
- [x] `git diff --check` PASS.
|
||||
- [x] 이번 Phase의 production 변경이 `values/strings.xml`, `values-ja/strings.xml`의 `screen_home_following_empty` 값으로 한정되고 영어 resource, layout, Kotlin production 파일이 변경되지 않았음을 확인한다.
|
||||
- [x] Task별 검증 결과와 실행 중 확인된 기존 경고를 이 Phase의 검증 기록에 한국어로 누적한다.
|
||||
|
||||
검증 기록:
|
||||
|
||||
- 2026-08-19: mapper·Fragment·홈 refresh routing focused test가 `BUILD SUCCESSFUL`로 통과해 기존 5개 섹션 전체 empty 판정, 중앙 empty string 연결·상태 분기, 팔로잉 당겨서 새로고침 경로를 확인했다. `:app:mergeDebugResources :app:compileDebugKotlin :app:ktlintCheck`와 `git diff --check`도 PASS했다. ktlint에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. 영어 resource, layout, Kotlin production 파일은 변경하지 않았고, 계획에 따라 androidTest·기기 조작·스크린샷·시각 QA는 실행하지 않았다. 명세 및 코드 품질 리뷰는 blocking finding 없이 승인됐다.
|
||||
|
||||
---
|
||||
|
||||
## Verification Log
|
||||
- 2026-08-19 Phase 15 구현 완료: `screen_home_following_empty`의 한국어·일본어 첫 문장만 확정 문구로 변경하고 영어 문구와 기존 empty 판정·중앙 표시·당겨서 새로고침 경로를 유지했다. focused RED는 기존 한국어 resource 불일치로 확인했고 최소 resource 수정 후 GREEN으로 전환했다. mapper·Fragment·refresh routing 회귀, resource merge, Kotlin compile, ktlint, `git diff --check`가 PASS했으며 명세·품질 리뷰에서 확정 발견 사항은 없었다.
|
||||
- 2026-08-19 문서 전용 계획 추가: 사용자 인터뷰를 통해 기존 5개 섹션 전체 empty 판정과 영어 문구를 유지하고, 한국어·일본어 `screen_home_following_empty` 첫 문장만 변경하는 요구사항을 확정했다. 기존 중앙 empty UI와 당겨서 새로고침 경로를 재사용하는 최소 범위로 Phase 15를 추가했으며, 코드·resource·test 구현은 진행하지 않았다. 문서 검증에서 요구사항·Decision·Goal 추적, `git diff --check`, production/test 경로 변경 0건을 확인했다. `./gradlew --no-daemon tasks --all`은 sandbox의 Gradle lock 접근 제한으로 첫 실행이 실패했으나 승인된 동일 명령 재실행은 `BUILD SUCCESSFUL`로 통과했다.
|
||||
- 2026-08-18 Phase 14 구현 완료: 팔로잉 크리에이터 `전체`를 RecyclerView 마지막 item에서 추천 탭 라이브 섹션과 같은 우측 고정 TextView로 변경했다. adapter는 creator item만 표시하고, 기존 로그인 가드와 `FollowingCreatorActivity` 이동을 고정 TextView 클릭에 연결했다. TDD RED/GREEN, 팔로잉 회귀, resource merge, Kotlin compile, ktlint, `git diff --check`, debug APK assemble가 PASS했다. visual QA와 기기 조작은 사용자 요청으로 실행하지 않았고, 사용자가 `app/build/outputs/apk/debug/app-debug.apk`로 팔로잉 크리에이터 목록 스크롤 중 `전체` 고정과 클릭 이동을 수동 확인했다. Phase 14 리뷰에서 Critical/Important finding은 없었다.
|
||||
- 2026-08-18 문서 전용 계획 추가: 팔로잉 크리에이터 `전체` 버튼을 RecyclerView 마지막 item에서 추천 탭 라이브 섹션과 같은 우측 고정 TextView 구조로 변경하는 요구사항을 PRD에 추가하고, 구현은 진행하지 않은 상태로 Phase 14 계획/TASK만 작성했다.
|
||||
- 2026-07-31 이번 Phase 1~13 리뷰 재검증: 현재 working tree의 PRD·계획·production/test 코드와 Phase별 리뷰 보고서 13개를 대조했다. 새 확정 발견 사항은 없고 기존 확정 항목은 모두 각 회귀 수정 Task에서 수정 완료 상태다. Phase 9 보고서 범위를 Task 9.7까지 확장해 production/test `FeedAdapter|FeedImageViews` 호출자 0건과 현재 Feed view/model 직접 재사용을 기록했다. `./gradlew --no-daemon :app:testDebugUnitTest ... :app:mergeDebugResources :app:compileDebugKotlin :app:ktlintCheck` PASS(`BUILD SUCCESSFUL`, 16 suites·120 tests, failures/errors/skipped 0, 46 actionable tasks), `./gradlew --no-daemon tasks --all`, staged/unstaged `git diff --check` PASS. `adb devices`에서 기기 `2cec640c34017ece` 연결은 확인했지만 테스트 계정·API 데이터 기반 팔로잉 화면 조작과 Figma 대조는 수행하지 않아 `REV-P5-001` / Task 5.3 보류를 유지한다. 이번 리뷰에서는 production/test/resource 코드를 수정하지 않았다.
|
||||
|
||||
@@ -316,6 +316,17 @@ Figma `24:5682` 기준 상단 title bar와 tab bar는 기존 홈 화면 구조
|
||||
- 추천 탭과 동일한 구조 기준은 `fragment_v2_main_home.xml`의 `ll_home_live_section`, `rv_home_lives`, `tv_home_live_all` 배치 방식이다.
|
||||
- 이번 요구사항은 팔로잉 크리에이터 섹션의 배치 방식만 변경하며 API/DTO/mapper, 다른 팔로잉 섹션, 최근 소식 라우팅, empty/login/error 정책은 변경하지 않는다.
|
||||
|
||||
#### 2026-08-19 팔로잉 empty 안내 문구 변경 Requirements
|
||||
- `isLoginRequired = false`이고 `followingCreators`, `onAirLives`, `recentChats`, `monthlySchedules`, `recentNews`가 모두 비어 있는 기존 `HomeFollowingUiState.Empty` 판정 조건을 유지한다.
|
||||
- `followingCreators`만 비어 있는 상태를 별도 empty 조건으로 추가하지 않는다. 팔로우한 크리에이터가 없으면 나머지 네 섹션도 비어 있는 서버 동작을 전제로 한다.
|
||||
- 기존 `screen_home_following_empty` string resource와 `tv_home_following_empty`를 재사용한다.
|
||||
- 한국어 문구는 `아직 팔로우한 크리에이터가 없어요.\n관심 있는 크리에이터를 팔로우해 보세요.`로 표시한다.
|
||||
- 일본어 문구는 `まだフォローしているクリエイターがいません。\n気になるクリエイターをフォローしてみましょう。`로 표시한다.
|
||||
- 영어 문구 `No following updates yet.\nFollow creators you are interested in.`은 변경하지 않는다.
|
||||
- 안내 문구는 기존처럼 팔로잉 탭 본문 가운데에 표시하고 텍스트를 가운데 정렬한다.
|
||||
- 안내 문구가 표시된 상태에서도 기존 `SwipeRefreshLayout` 경로로 당겨서 새로고침할 수 있어야 하며, 새 `Empty` 응답을 받으면 refresh 상태를 종료하고 안내 문구를 계속 표시한다.
|
||||
- API/DTO/mapper, `HomeFollowingUiState`, 팔로잉 section visibility, layout 구조, `Content`·`LoginRequired`·`Error` 처리는 변경하지 않는다.
|
||||
|
||||
#### 2026-06-30 후속 수정 Requirements
|
||||
- `CREATOR_RANKING` 최근 소식 본문은 순위 숫자만 단독 표시하지 않고, Figma `24:5717` 기준으로 크리에이터 이름과 순위를 포함한 문장형 메시지를 표시한다.
|
||||
- ranking 문장 안의 순위 텍스트는 기존 `FeedRankTextStyler` highlight range로 강조한다.
|
||||
@@ -389,3 +400,11 @@ PRD 작성 전 확인한 `v2` 패키지 하위 재사용 후보는 다음과 같
|
||||
- 로그인 유도 화면의 정확한 디자인, 문구, CTA, 로그인 완료 후 복귀 정책은 아직 정해지지 않았다.
|
||||
- `PHOTO_CONTENT`의 `화보` label은 임시 정책이며 이후 기획 변경 가능성이 있다.
|
||||
- 각 섹션의 “더보기” chevron 실제 이동 목적지는 아직 만들지 않는다. 이번 범위에서는 터치 액션 연결까지만 지정한다.
|
||||
|
||||
---
|
||||
|
||||
## 12. Decision Log
|
||||
|
||||
| 날짜 | ID | 상태 | 결정 | 근거 | 영향 요구사항·계획 |
|
||||
|---|---|---|---|---|---|
|
||||
| 2026-08-19 | `DEC-20260819-001` | 확정 | 기존 5개 섹션 전체 empty 판정을 유지하고 한국어·일본어 안내 문구의 첫 문장만 변경하며 영어 문구는 유지한다. | 사용자 인터뷰에서 서버가 팔로우한 크리에이터가 없을 때 5개 섹션을 모두 빈 배열로 반환하는 동작을 전제로 확정했다. | `2026-08-19 팔로잉 empty 안내 문구 변경 Requirements`, `P15-T1`, `P15-GATE` |
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# Phase 15 팔로잉 empty 안내 문구 리뷰
|
||||
|
||||
## 1. 리뷰 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 리뷰 대상 | Phase 15 / Task 15.1~15.2 |
|
||||
| 기준 commit 또는 working tree | 현재 working tree |
|
||||
| 리뷰 일자 | 2026-08-19 |
|
||||
| 리뷰어 | Sisyphus, Oracle |
|
||||
| 기준 문서 | `prd.md`, `plan-task.md`의 Phase 15 |
|
||||
| 리뷰 상태 | 판정 완료 |
|
||||
|
||||
## 2. 리뷰 목적과 범위
|
||||
|
||||
- 한국어·일본어 empty 문구가 확정 요구사항과 일치하는지 확인한다.
|
||||
- 영어 문구와 기존 empty 판정·중앙 표시·refresh 경로가 유지되는지 확인한다.
|
||||
- `HomeFollowingFragmentSourceTest.kt`, `values/strings.xml`, `values-ja/strings.xml` 변경만 검토한다.
|
||||
- androidTest, 기기·에뮬레이터 조작, 스크린샷·시각 QA는 Phase 15 계획에 따라 제외한다.
|
||||
|
||||
## 3. 판정 기준
|
||||
|
||||
- PRD `2026-08-19 팔로잉 empty 안내 문구 변경 Requirements`
|
||||
- `DEC-20260819-001`, `P15-T1`, `P15-GATE`
|
||||
- 범위 밖 Kotlin production, layout, 영어 resource 변경 여부
|
||||
|
||||
## 4. 검토한 근거
|
||||
|
||||
- 한국어: `app/src/main/res/values/strings.xml:319`
|
||||
- 일본어: `app/src/main/res/values-ja/strings.xml:320`
|
||||
- 영어 유지: `app/src/main/res/values-en/strings.xml:320`
|
||||
- 다국어 및 상태 분기 테스트: `HomeFollowingFragmentSourceTest.kt:107`
|
||||
- 전체 empty 판정: `HomeFollowingMapperTest`
|
||||
- refresh routing: `HomeMainFragmentSourceTest`
|
||||
|
||||
| 명령 | 결과 | 핵심 증거 |
|
||||
|---|---|---|
|
||||
| Phase 15 focused test RED | 실패 | 기존 한국어 resource 불일치 assertion |
|
||||
| Phase 15 focused test GREEN | 성공 | `BUILD SUCCESSFUL` |
|
||||
| mapper·Fragment·refresh focused tests | 성공 | `BUILD SUCCESSFUL` |
|
||||
| `:app:mergeDebugResources :app:compileDebugKotlin :app:ktlintCheck` | 성공 | 기존 `disabled_rules` deprecation warning만 출력 |
|
||||
| `git diff --check` | 성공 | whitespace 오류 없음 |
|
||||
|
||||
## 5. 발견 사항 요약
|
||||
|
||||
확정 발견 사항 없음.
|
||||
|
||||
## 6. 발견 사항 상세
|
||||
|
||||
명세 적합성 및 코드 품질 검토에서 blocking finding이 확인되지 않았다. `contains` 기반 resource 검증은 XML 재포맷에 민감하지만 기존 테스트 방식이며 Phase 15에서 새로 발생한 위험은 아니다.
|
||||
|
||||
## 7. 확정 항목의 plan·goal 전환
|
||||
|
||||
전환 항목 없음.
|
||||
|
||||
## 8. 리뷰 종료 판정
|
||||
|
||||
| 판정 항목 | 결과 | 근거 |
|
||||
|---|---|---|
|
||||
| 리뷰 범위 전체 확인 | 충족 | Phase 15 변경 파일과 요구사항 대조 완료 |
|
||||
| 후보 항목 판정 완료 | 충족 | 확정 발견 사항 없음 |
|
||||
| 확정 항목 plan 반영 | 해당 없음 | 전환할 발견 사항 없음 |
|
||||
| 검증 명령과 결과 기록 | 충족 | focused test, 회귀, build, lint, diff PASS |
|
||||
|
||||
**최종 결론:** 확정 발견 사항 없음
|
||||
|
||||
**남은 항목:** 없음
|
||||
|
||||
## 9. 수정 후 검증 기록
|
||||
|
||||
추가 수정 항목 없음.
|
||||
Reference in New Issue
Block a user