docs(creator): 채널 홈 스크롤 구현 검증을 기록한다
This commit is contained in:
@@ -765,7 +765,7 @@
|
|||||||
|
|
||||||
### Phase 6: sticky tab-bar와 scroll 상태 구현
|
### 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`
|
- `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"`
|
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"`
|
||||||
- 기대 결과:
|
- 기대 결과:
|
||||||
- scroll 상태 모델 미구현으로 RED 실패한다.
|
- 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`
|
- `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"`
|
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelScrollStateTest"`
|
||||||
- 기대 결과:
|
- 기대 결과:
|
||||||
- scroll 상태 테스트가 PASS한다.
|
- 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`
|
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeActivity.kt`
|
||||||
- 작업:
|
- 작업:
|
||||||
@@ -804,6 +809,11 @@
|
|||||||
- 상단에서 이미지가 status bar 영역까지 표시된다.
|
- 상단에서 이미지가 status bar 영역까지 표시된다.
|
||||||
- 스크롤 시 tab-bar가 title-bar 아래에 고정된다.
|
- 스크롤 시 tab-bar가 title-bar 아래에 고정된다.
|
||||||
- 프로필 이미지가 절반 이상 사라지고 tab-bar가 title-bar에 가까워지면 title-bar가 black으로 전환된다.
|
- 프로필 이미지가 절반 이상 사라지고 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개 탭이 가로 폭을 초과해도 표시/스크롤이 가능하다.
|
- 7개 탭이 가로 폭을 초과해도 표시/스크롤이 가능하다.
|
||||||
- 홈 외 탭을 눌러도 crash가 발생하지 않는다.
|
- 홈 외 탭을 눌러도 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: 최종 검증과 문서 기록
|
### Phase 8: 최종 검증과 문서 기록
|
||||||
@@ -958,3 +988,7 @@
|
|||||||
- 2026-06-15: 사용자 요청에 따라 탭 바 아래 홈 컨텐츠를 전부 삭제 후 Figma `296:14895`의 `SectionTitle`, `Contents`, `Feed`, `ListComment`, `SNS` 컴포넌트 기준으로 다시 구성하는 Phase 5R을 추가했다. 각 홈 섹션을 하나의 Task로 분리했고, 현재 API 응답에 없는 `화보` 섹션은 이번 재구성 구현 범위에서 제외한다고 명시했다. 이번 단계는 문서 수정만 수행했으며 구현/빌드/테스트는 실행하지 않았다.
|
- 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: 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: 코드 리뷰에서 커뮤니티 카드가 `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은 기존 경고로 이번 변경과 무관하다.
|
||||||
|
|||||||
Reference in New Issue
Block a user