From e6cb94179b2a0f4bea01634e5c827a1829c89c4b Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 30 Jun 2026 17:43:29 +0900 Subject: [PATCH] =?UTF-8?q?docs(home):=20=ED=8C=94=EB=A1=9C=EC=9E=89=20?= =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EB=B2=84=ED=8A=BC=EC=9D=84=20=EA=B8=B0=EB=A1=9D?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/20260625_메인_홈_팔로잉_탭/plan-task.md | 54 ++++++++++++++++++++ docs/20260625_메인_홈_팔로잉_탭/prd.md | 3 ++ 2 files changed, 57 insertions(+) diff --git a/docs/20260625_메인_홈_팔로잉_탭/plan-task.md b/docs/20260625_메인_홈_팔로잉_탭/plan-task.md index 58bc091f..ec68c47f 100644 --- a/docs/20260625_메인_홈_팔로잉_탭/plan-task.md +++ b/docs/20260625_메인_홈_팔로잉_탭/plan-task.md @@ -582,6 +582,58 @@ --- +### Phase 8: 팔로잉 크리에이터 전체 버튼 후속 추가 + +- [x] **Task 8.1: PRD 반영과 RED 테스트 추가** + - 수정: + - `docs/20260625_메인_홈_팔로잉_탭/prd.md` + - `docs/20260625_메인_홈_팔로잉_탭/plan-task.md` + - `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt` + - 작업: + - 팔로잉 크리에이터 RecyclerView 마지막 item에 `전체` 버튼을 항상 추가하는 후속 요구사항을 문서화한다. + - `전체` 버튼 layout이 `wrap_content`, creator item과 동일한 높이, `paddingHorizontal=16dp`, `@color/soda_400`를 갖는지 source test로 고정한다. + - adapter가 creator item과 all item view type을 분리하고 마지막 item count를 보장하는지 source test로 고정한다. + - `전체` 버튼 클릭이 기존 `FollowingCreatorActivity`로 연결되는지 source test로 고정한다. + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"` + - Expected: 구현 전 RED 실패. + - Result: RED 확인. `following creators list appends all button as last item`가 `item_home_following_creator_all.xml` 누락으로 실패했다. + +- [x] **Task 8.2: 팔로잉 크리에이터 전체 버튼 구현** + - 수정: + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeFollowingCreatorAdapter.kt` + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt` + - `app/src/main/res/layout/item_home_following_creator_all.xml` + - 작업: + - `HomeFollowingCreatorAdapter`에 creator/all view type을 추가한다. + - `submitItems()`에 1개 이상 creator가 들어오면 adapter 마지막 item으로 `전체` 버튼을 표시한다. + - `전체` 버튼은 `width=wrap_content`, creator item과 동일한 높이, `paddingHorizontal=16dp`, `textColor=@color/soda_400`를 XML에 명시한다. + - `전체` 버튼 클릭 시 `ensureMainV2NavigationAllowed` 안에서 `FollowingCreatorActivity`를 시작한다. + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"` + - Expected: PASS. + - Result: PASS. adapter creator/all view type, 마지막 `전체` item, `FollowingCreatorActivity` 이동 연결, `전체` layout token이 source test로 검증됐다. + +- [x] **Task 8.3: 후속 변경 통합 검증** + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"` + - Expected: 팔로잉 관련 local unit/source test가 모두 PASS. + - Run: `./gradlew :app:mergeDebugResources` + - Expected: layout/resource merge PASS. + - Run: `./gradlew :app:compileDebugKotlin` + - Expected: Kotlin compile PASS. + - Run: `./gradlew :app:ktlintCheck` + - Expected: ktlint PASS 또는 기존 unrelated failure만 발생. + - Run: `git diff --check` + - Expected: whitespace error 없음. + - 검증 기록: + - 2026-06-30 팔로잉 크리에이터 `전체` 버튼 후속 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"` PASS. + - 2026-06-30 팔로잉 크리에이터 `전체` 버튼 후속 검증: `./gradlew :app:mergeDebugResources`는 최초 sandbox 실행에서 Gradle wrapper lock 권한 오류로 실패했고, 승인 실행 재시도에서 PASS. + - 2026-06-30 팔로잉 크리에이터 `전체` 버튼 후속 검증: `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` PASS. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. + - 2026-06-30 팔로잉 크리에이터 `전체` 버튼 높이 보정 후 재검증: creator item 전체 높이에 맞추기 위해 invisible nickname spacer를 추가했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`, `./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. `mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. + +--- + ## Verification Log - 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. @@ -594,3 +646,5 @@ - 2026-06-26 최근 소식 Feed 위젯 재사용 후속 검증: 최근 소식 chevron 제거와 `FeedCommunityView`/`FeedRankView`/`FeedContentView` 재사용을 source test로 고정했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. - 2026-06-30 최근 소식 ranking/content 후속 검증: Figma `24:5717`, `1229:27212` 기준으로 ranking 문장형 message와 content feed `88dp` 이미지/간격을 RED 테스트로 고정한 뒤 GREEN 확인했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest" --tests "kr.co.vividnext.sodalive.v2.widget.feed.FeedViewTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `git diff --check` PASS. `./gradlew :app:ktlintCheck`는 이번 변경과 무관한 `CreatorRankingTopCardView.kt:11` 기존 unused import로 FAIL. - 2026-06-30 content feed clipping 위치 수정 검증: `docs/agent-guides/code-style.md`의 XML `android:clipToOutline` 금지 규칙에 맞춰 `view_feed_content.xml` 속성을 제거하고 `FeedContentView` Kotlin 코드에서 root `clipToOutline`/`outlineProvider`를 설정했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.feed.FeedViewTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `git diff --check` PASS. +- 2026-06-30 팔로잉 크리에이터 `전체` 버튼 후속 검증: 팔로잉 크리에이터 RecyclerView 마지막에 `전체` item을 추가하고 `FollowingCreatorActivity` 이동을 연결했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"` RED/GREEN, `./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. `mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. +- 2026-06-30 팔로잉 크리에이터 `전체` 버튼 높이 보정 후 재검증: `전체` item root는 `wrap_content` 높이로 두고 invisible nickname spacer로 creator item 전체 높이를 맞췄다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`, `./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. `mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. diff --git a/docs/20260625_메인_홈_팔로잉_탭/prd.md b/docs/20260625_메인_홈_팔로잉_탭/prd.md index f3cb5a3d..34ea9901 100644 --- a/docs/20260625_메인_홈_팔로잉_탭/prd.md +++ b/docs/20260625_메인_홈_팔로잉_탭/prd.md @@ -181,6 +181,9 @@ Figma `24:5682` 기준 상단 title bar와 tab bar는 기존 홈 화면 구조 #### Requirements - profile image와 creator nickname을 표시한다. - item 터치 시 해당 크리에이터 채널로 이동한다. +- `followingCreators`가 1명 이상이면 가로 RecyclerView의 마지막 item으로 `전체` 버튼을 항상 표시한다. +- `전체` 버튼 item은 `width=wrap_content`, creator item 전체 높이와 동일한 높이, `paddingHorizontal=16dp`, `textColor=@color/soda_400`로 표시한다. +- `전체` 버튼 터치 시 기존 전체 팔로잉 크리에이터 목록 화면으로 이동한다. - 리스트가 비어 있으면 섹션을 숨긴다. - 이미지 URL이 비어 있거나 로드 실패하면 기존 홈 creator profile placeholder 정책을 따른다. - 기존 `HomeCreatorProfileAdapter`, `HomeRecentActivityCreatorAdapter`, `HomeCreatorProfileImageLoader` 재사용 가능성을 우선 검토한다.