From 1ce974938d0146b95837a69a06069a0fb25349dd Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 15 Jun 2026 19:10:54 +0900 Subject: [PATCH] =?UTF-8?q?docs(creator):=20=EC=B1=84=EB=84=90=20=ED=99=88?= =?UTF-8?q?=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EA=B5=AC=ED=98=84=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=EC=9D=84=20=EA=B8=B0=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan-task.md | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/docs/20260611_크리에이터_채널_홈_탭/plan-task.md b/docs/20260611_크리에이터_채널_홈_탭/plan-task.md index 94150710..f8d6f1c0 100644 --- a/docs/20260611_크리에이터_채널_홈_탭/plan-task.md +++ b/docs/20260611_크리에이터_채널_홈_탭/plan-task.md @@ -765,7 +765,7 @@ ### Phase 6: sticky tab-bar와 scroll 상태 구현 -- [ ] **Task 6.1: scroll 상태 계산 RED 테스트 작성** +- [x] **Task 6.1: scroll 상태 계산 RED 테스트 작성** - 생성: - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelScrollStateTest.kt` - 작업: @@ -776,8 +776,10 @@ - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"` - 기대 결과: - scroll 상태 모델 미구현으로 RED 실패한다. + - 검증 기록: + - 2026-06-15: `CreatorChannelScrollStateTest`를 추가하고 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"`를 실행해 `Unresolved reference 'CreatorChannelScrollState'` 컴파일 오류로 RED 실패를 확인했다. -- [ ] **Task 6.2: scroll 상태 계산 모델 구현** +- [x] **Task 6.2: scroll 상태 계산 모델 구현** - 생성: - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelScrollState.kt` - 작업: @@ -789,8 +791,11 @@ - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"` - 기대 결과: - scroll 상태 테스트가 PASS한다. + - 검증 기록: + - 2026-06-15: `CreatorChannelScrollState`를 추가해 title-bar/tab-bar 거리 조건과 프로필 이미지 절반 이상 사라짐 조건을 함께 계산하고, sticky top은 `statusBarHeight + titleBarHeight`로 계산하도록 구현했다. 병렬 Gradle 실행 중 `:app:kspDebugUnitTestKotlin`에서 `zip END header not found`가 한 번 발생했으나, 동시 실행으로 인한 빌드 산출물 경합으로 보고 단일 실행으로 재검증한다. + - 2026-06-15: 단일 재실행으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"`가 `BUILD SUCCESSFUL`로 PASS했다. -- [ ] **Task 6.3: Activity scroll listener 연결** +- [x] **Task 6.3: Activity scroll listener 연결** - 수정: - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeActivity.kt` - 작업: @@ -804,6 +809,11 @@ - 상단에서 이미지가 status bar 영역까지 표시된다. - 스크롤 시 tab-bar가 title-bar 아래에 고정된다. - 프로필 이미지가 절반 이상 사라지고 tab-bar가 title-bar에 가까워지면 title-bar가 black으로 전환된다. + - 검증 기록: + - 2026-06-15: `CreatorChannelHomeActivity`에 `NestedScrollView.setOnScrollChangeListener`를 연결하고, `horizontalTabScrollView.translationY`로 tab-bar를 `statusBarHeight + titleBarHeight` 아래에 고정하며, `CreatorChannelScrollState.shouldUseBlackTitleBar(...)` 결과에 따라 title-bar 배경을 `Color.BLACK`/`Color.TRANSPARENT`로 전환하도록 구현했다. 기존 v2 inset 관례에 맞춰 `ViewCompat.requestApplyInsets(binding.titleBarContainer)`도 추가했다. Figma `296:14890`, `296:14892` 스크린샷으로 상단 header/status bar/title/tab 배치를 확인했다. + - 2026-06-15: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeActivitySourceTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`가 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고와 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다. + - 2026-06-15: reviewer gate에서 `horizontal_tab_scroll_view`가 `rv_home_sections`보다 먼저 선언된 sibling이라 `translationY` sticky 상태에서 RecyclerView 컨텐츠에 가려질 수 있다는 FAIL을 받았다. `horizontal_tab_scroll_view`에 `android:elevation="1dp"`를 추가하고 `CreatorChannelHomeActivitySourceTest`에 elevation source 계약을 추가했다. + - 2026-06-15: elevation 보강 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeActivitySourceTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`가 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다. --- @@ -843,6 +853,26 @@ - 7개 탭이 가로 폭을 초과해도 표시/스크롤이 가능하다. - 홈 외 탭을 눌러도 crash가 발생하지 않는다. +- [ ] **Task 7.3: 기존 크리에이터 채널 진입점을 신규 화면으로 전환** + - 확인: + - `app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt` + - 기존 코드에서 `UserProfileActivity`를 `Intent`로 여는 호출부 전체 + - 신규 `CreatorChannelHomeActivity.newIntent(context, creatorId)` 계약 + - 작업: + - 현재 크리에이터 채널 확인을 위해 기존 `UserProfileActivity`로 이동하던 크리에이터 채널 진입 로직을 `CreatorChannelHomeActivity`로 이동하도록 변경한다. + - `creatorId`를 이미 가지고 있는 호출부는 `CreatorChannelHomeActivity.newIntent(context, creatorId)`를 사용한다. + - 호출부가 `creatorId`가 아닌 다른 식별자만 가지고 있으면 추측 변환하지 말고 해당 호출부는 문서에 남기고 제외한다. + - `UserProfileActivity` 자체 삭제나 내부 동작 변경은 하지 않는다. + - 신규 화면 수동 확인 목적의 진입점 전환에 한정하고, 기존 프로필 화면의 다른 기능/딥링크/알림 진입 정책은 변경하지 않는다. + - 검증 명령: + - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeActivitySourceTest"` + - `./gradlew :app:compileDebugKotlin` + - 수동 확인: + - 앱에서 기존 크리에이터 채널 진입 경로를 탭하면 `CreatorChannelHomeActivity`가 열린다. + - 전달된 `creatorId`로 홈 API가 호출되고 신규 크리에이터 채널 화면이 표시된다. + - 기대 결과: + - 기존 크리에이터 채널 확인 경로가 신규 크리에이터 채널 홈 화면으로 연결된다. + --- ### Phase 8: 최종 검증과 문서 기록 @@ -958,3 +988,7 @@ - 2026-06-15: 사용자 요청에 따라 탭 바 아래 홈 컨텐츠를 전부 삭제 후 Figma `296:14895`의 `SectionTitle`, `Contents`, `Feed`, `ListComment`, `SNS` 컴포넌트 기준으로 다시 구성하는 Phase 5R을 추가했다. 각 홈 섹션을 하나의 Task로 분리했고, 현재 API 응답에 없는 `화보` 섹션은 이번 재구성 구현 범위에서 제외한다고 명시했다. 이번 단계는 문서 수정만 수행했으며 구현/빌드/테스트는 실행하지 않았다. - 2026-06-15: Phase 5R.4 공지 섹션 재구성으로 Figma `296:14915` 기준 `SectionTitle`, `ic_pin` Notice label, 프로필/작성자/날짜, 본문, 선택 썸네일을 가진 공지 전용 가로 feed card를 추가했다. 공지는 최대 3개까지 표시하고, item width는 402dp 기준 최대 346dp 및 작은 화면 비율 축소로 계산한다. RED로 공지 row/custom thumbnail 부재와 기존 374dp width 계산 실패를 확인한 뒤 구현했으며, `CreatorChannelHomeActivitySourceTest` 공지 단일 테스트 2개, `kr.co.vividnext.sodalive.v2.creator.channel.*`, `:app:mergeDebugResources`, `:app:compileDebugKotlin`, `:app:ktlintCheck`, `git diff --check`가 모두 PASS했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고는 기존 설정 경고로 이번 변경과 무관하다. - 2026-06-15: 코드 리뷰에서 커뮤니티 카드가 `setFeedSize(374dp 기준)` 호출 후 `LinearLayout.LayoutParams.MATCH_PARENT`로 덮여 실제 폭 계산이 적용되지 않는다는 지적을 확인했다. `CreatorChannelHomeSectionAdapter.bindCommunities()`에서 `communityWidthDp`를 한 번 계산해 `FeedSize.rootWidthDp`와 row `layoutParams.width`에 동일하게 적용하도록 수정하고, `CreatorChannelHomeActivitySourceTest`가 `communityWidthDp.dp()` 계약을 검증하도록 갱신했다. +- 2026-06-15: Phase 6 진행으로 `CreatorChannelScrollStateTest`를 먼저 추가해 `CreatorChannelScrollState` 미구현 RED 실패를 확인한 뒤, 순수 scroll 상태 모델과 `CreatorChannelHomeActivity` scroll listener를 구현했다. 검증으로 `CreatorChannelScrollStateTest`, `CreatorChannelHomeActivitySourceTest`, `:app:mergeDebugResources`, `:app:compileDebugKotlin`, `:app:ktlintCheck`, `git diff --check`가 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다. 병렬 Gradle 실행 중 `zip END header not found`가 한 차례 있었으나 단일 재실행에서 성공했다. +- 2026-06-15: 사용자 요청에 따라 기존 `UserProfileActivity`로 이동하던 크리에이터 채널 진입점을 신규 `CreatorChannelHomeActivity`로 전환하는 작업을 Phase 7의 `Task 7.3`으로 추가했다. 이번 단계는 계획 문서 추가만 수행했으며 해당 진입점 전환 구현/빌드/테스트는 아직 실행하지 않았다. +- 2026-06-15: Phase 6 reviewer gate에서 sticky tab-bar가 `RecyclerView`보다 앞선 sibling이라 draw order상 컨텐츠에 가려질 수 있다는 blocking issue를 확인했다. `horizontal_tab_scroll_view`에 `android:elevation="1dp"`를 추가해 sticky tab-bar가 홈 컨텐츠 위에 그려지도록 수정하고 source test 계약을 보강했다. +- 2026-06-15: Phase 6 reviewer gate 차단 이슈 수정 후 `CreatorChannelHomeActivitySourceTest`, `CreatorChannelScrollStateTest`, `:app:mergeDebugResources`, `:app:compileDebugKotlin`, `:app:ktlintCheck`, `git diff --check`를 재실행해 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고와 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다.