docs(creator): 채널 홈 탭 전환 계획을 보강한다

This commit is contained in:
2026-06-16 12:20:38 +09:00
parent f667bf1096
commit a21427b549

View File

@@ -22,7 +22,8 @@
- tab-bar 목록은 `홈`, `라이브`, `오디오`, `시리즈`, `커뮤니티`, `팬Talk`, `후원` 순서를 따른다. - tab-bar 목록은 `홈`, `라이브`, `오디오`, `시리즈`, `커뮤니티`, `팬Talk`, `후원` 순서를 따른다.
- `라이브`, `오디오`, `시리즈`, `커뮤니티`, `팬Talk`, `후원` 탭의 상세 컨텐츠와 pagination은 구현하지 않는다. - `라이브`, `오디오`, `시리즈`, `커뮤니티`, `팬Talk`, `후원` 탭의 상세 컨텐츠와 pagination은 구현하지 않는다.
- 홈 API는 `GET /api/v2/creator-channels/{creatorId}/home`을 사용한다. - 홈 API는 `GET /api/v2/creator-channels/{creatorId}/home`을 사용한다.
- 팔로우/알림 변경은 기존 `UserRepository.creatorFollow()` `CreatorFollowNotifyFragment` 사용 패턴을 재사용한다. - 팔로우/알림 변경은 기존 `UserRepository.creatorFollow()` API 사용 패턴을 재사용한다.
- Phase 11 이후 팔로잉 상태의 알림 끄기/팔로우 취소는 `CreatorFollowNotifyFragment`를 띄우지 않고 즉시 API를 호출하는 방식으로 보정한다.
- `대화하기``TalkApi.createChatRoom` 호출 후 반환된 `chatRoomId``ChatRoomActivity`, `DM 보내기``DmChatRoomActivity.newIntentByCreatorId()`로 이동한다. - `대화하기``TalkApi.createChatRoom` 호출 후 반환된 `chatRoomId``ChatRoomActivity`, `DM 보내기``DmChatRoomActivity.newIntentByCreatorId()`로 이동한다.
- title-bar black 전환 기준은 title-bar와 tab-bar의 실제 거리 및 프로필 이미지가 절반 이상 사라졌는지를 함께 사용한다. - title-bar black 전환 기준은 title-bar와 tab-bar의 실제 거리 및 프로필 이미지가 절반 이상 사라졌는지를 함께 사용한다.
- 구현 완료 후 최소 다음 명령을 실행한다. - 구현 완료 후 최소 다음 명령을 실행한다.
@@ -55,13 +56,15 @@
- Phase 8: 필수 참조 - Phase 8: 필수 참조
- 수동 화면 검증은 Figma와 실제 구현 화면을 비교해 PRD Metrics를 확인한다. - 수동 화면 검증은 Figma와 실제 구현 화면을 비교해 PRD Metrics를 확인한다.
- Phase 10: 부분 참조 - Phase 10: 부분 참조
- `TabLayout + ViewPager2 + 탭별 Fragment` 전환은 PRD의 Future Tab Architecture Decision과 기존 AndroidX/Material 사용 패턴을 기준으로 한다.
- Phase 11: 부분 참조
- title-bar 닉네임, tab-bar typography, 더보기 BottomSheet, 팔로우/알림 직접 액션은 PRD와 기존 구현 패턴을 기준으로 한다. - title-bar 닉네임, tab-bar typography, 더보기 BottomSheet, 팔로우/알림 직접 액션은 PRD와 기존 구현 패턴을 기준으로 한다.
- tab-bar item font/size는 Figma `296:14894`를 확인한다. - tab-bar item font/size는 Figma `296:14894`를 확인한다.
- Phase 11: 필수 참조
- 후원 empty UI는 Figma `290:8820`, 활동 영역은 Figma `296:15001`, 홈 컨텐츠 보정은 Figma `296:14895`를 기준으로 한다.
- Phase 12: 필수 참조 - Phase 12: 필수 참조
- 크리에이터 본인 페이지 Floating Button 기본 상태는 Figma `665:19092`, 확장/dim 상태는 Figma `665:19223` 기준으로 한다. - 후원 empty UI는 Figma `290:8820`, 활동 영역은 Figma `296:15001`, 홈 컨텐츠 보정은 Figma `296:14895` 기준으로 한다.
- Phase 13: 필수 참조 - Phase 13: 필수 참조
- 크리에이터 본인 페이지 Floating Button 기본 상태는 Figma `665:19092`, 확장/dim 상태는 Figma `665:19223`을 기준으로 한다.
- Phase 14: 필수 참조
- 최종 수동 검증은 Figma `296:14890`, `296:14894`, `296:14895`, `290:8820`, `296:15001`, `665:19092`, `665:19223`을 함께 대조한다. - 최종 수동 검증은 Figma `296:14890`, `296:14894`, `296:14895`, `290:8820`, `296:15001`, `665:19092`, `665:19223`을 함께 대조한다.
--- ---
@@ -995,11 +998,95 @@
--- ---
### Phase 10: 상단 상태/탭/액션 후속 보강 ### Phase 10: `TabLayout + ViewPager2 + 탭별 Fragment` 컨테이너 전환
> PRD `Future Tab Architecture Decision` 반영 Phase다. 후속 `라이브`, `오디오`, `시리즈`, `커뮤니티`, `팬Talk`, `후원` 탭은 API/목록/UI가 독립적이므로, 기존 단일 Activity 내부 커스텀 tab/홈 RecyclerView 구조를 탭별 Fragment를 담는 컨테이너 구조로 바꾼다.
- [ ] **Task 10.1: 컨테이너 전환 source test와 구조 경계 고정**
- 수정:
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
- 확인:
- `app/src/main/res/layout/activity_creator_channel.xml`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- 기존 프로젝트의 `TabLayout`, `ViewPager2`, `FragmentStateAdapter` 사용 사례
- 작업:
- `activity_creator_channel.xml``TabLayout``ViewPager2`가 존재해야 한다는 source test를 추가한다.
- `CreatorChannelActivity``FragmentStateAdapter` 또는 전용 pager adapter를 사용한다는 source test를 추가한다.
- `CreatorChannelActivity`가 홈 API/홈 section adapter를 직접 소유하지 않고 홈 탭 Fragment로 위임한다는 source test를 추가한다.
- 기존 커스텀 `HorizontalScrollView` tab-bar 또는 동적 tab `TextView` 생성 로직은 제거 대상으로 고정한다.
- 검증 명령:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- 기대 결과:
- 구현 전에는 기존 단일 Activity tab 구조 때문에 RED 실패한다.
- [ ] **Task 10.2: 홈 탭을 `CreatorChannelHomeFragment`로 분리**
- 생성:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeFragment.kt`
- `app/src/main/res/layout/fragment_creator_channel_home.xml`
- 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/main/res/layout/activity_creator_channel.xml`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
- 작업:
- 홈 API observe, 홈 section RecyclerView, 홈 section adapter, 홈 탭 스크롤 컨텐츠를 `CreatorChannelHomeFragment`로 이동한다.
- `CreatorChannelHomeViewModel`, `CreatorChannelHomeUiState`, `CreatorChannelHomeSectionAdapter`, `item_creator_channel_home_*` 이름은 홈 탭 전용 역할이므로 유지한다.
- `CreatorChannelActivity`는 공통 header/title bar/tab container와 Activity-level navigation만 담당한다.
- `creatorId`는 Activity에서 Fragment argument로 전달한다.
- Fragment는 `creatorId > 0`일 때 `viewModel.loadHome(creatorId)`를 호출한다.
- 검증 명령:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin`
- 수동 확인:
- 홈 탭 기본 진입 시 기존 홈 컨텐츠가 동일하게 표시된다.
- [ ] **Task 10.3: 탭별 placeholder Fragment와 pager adapter 추가**
- 생성:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelPagerAdapter.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelPlaceholderFragment.kt`
- 필요 시 `app/src/main/res/layout/fragment_creator_channel_placeholder.xml`
- 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeUiModels.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- 작업:
- pager adapter는 `홈`, `라이브`, `오디오`, `시리즈`, `커뮤니티`, `팬Talk`, `후원` 7개 탭 순서를 유지한다.
- `홈``CreatorChannelHomeFragment`를 생성한다.
- 나머지 6개 탭은 이번 범위에서 API/목록/UI를 구현하지 않고 placeholder Fragment를 연결한다.
- placeholder Fragment는 후속 탭 상세 화면 구현 전까지 crash 없이 비어 있는 상태를 표시하거나 최소 빈 화면으로 유지한다.
- 후속 탭별 Fragment 후보 이름은 PRD와 동일하게 `CreatorChannelLiveFragment`, `CreatorChannelAudioFragment`, `CreatorChannelSeriesFragment`, `CreatorChannelCommunityFragment`, `CreatorChannelFanTalkFragment`, `CreatorChannelDonationFragment`로 둔다.
- 검증 명령:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:compileDebugKotlin`
- [ ] **Task 10.4: `TabLayoutMediator` 연결과 sticky/header 동작 재검증**
- 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/main/res/layout/activity_creator_channel.xml`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
- 작업:
- `TabLayoutMediator``TabLayout``ViewPager2`를 연결한다.
- 탭 label은 기존 `CreatorChannelTab.labelResId`를 사용한다.
- tab item font/size는 Phase 11에서 보정할 수 있도록 custom tab view 또는 `TabLayout` textAppearance 적용 지점을 명확히 둔다.
- 공통 header/title bar/sticky 기준이 ViewPager2 전환 후에도 유지되는지 확인한다.
- 기존 수동 `onTabClicked(tab)` no-op 정책은 ViewPager2 placeholder 연결 정책으로 대체한다.
- ViewPager2 swipe 전환 허용 여부는 PRD Open Question에 맞춰 구현 계획에서 확정하되, 기본은 사용자 입력 swipe를 허용하지 않거나 기존 탭 클릭 UX와 충돌이 적은 방식으로 둔다.
- 검증 명령:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin`
- 수동 확인:
- 7개 탭이 `TabLayout`에 표시된다.
- 홈 탭 컨텐츠가 Fragment 안에서 표시된다.
- 홈 외 탭 선택 시 crash가 없고 placeholder가 표시된다.
- 공통 header와 sticky title/tab 동작이 깨지지 않는다.
---
### Phase 11: 상단 상태/탭/액션 후속 보강
> 2026-06-16 PRD 보강분을 반영하는 Phase다. title-bar sticky 닉네임, tab-bar typography, 더보기 BottomSheet, 팔로우/알림 직접 액션, 본인 페이지 상단 액션 정책을 한 묶음으로 처리한다. > 2026-06-16 PRD 보강분을 반영하는 Phase다. title-bar sticky 닉네임, tab-bar typography, 더보기 BottomSheet, 팔로우/알림 직접 액션, 본인 페이지 상단 액션 정책을 한 묶음으로 처리한다.
- [ ] **Task 10.1: title-bar sticky 닉네임과 tab-bar typography 보정** - [ ] **Task 11.1: title-bar sticky 닉네임과 tab-bar typography 보정**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/main/res/layout/activity_creator_channel.xml` - `app/src/main/res/layout/activity_creator_channel.xml`
@@ -1018,7 +1105,7 @@
- `./gradlew :app:mergeDebugResources` - `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 10.2: 더보기 BottomSheet와 팔로우/알림 직접 액션 보정** - [ ] **Task 11.2: 더보기 BottomSheet와 팔로우/알림 직접 액션 보정**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt`
@@ -1040,7 +1127,7 @@
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 10.3: 크리에이터 본인 페이지 상단 액션 정책 추가** - [ ] **Task 11.3: 크리에이터 본인 페이지 상단 액션 정책 추가**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelHomeModels.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelHomeModels.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeUiModels.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeUiModels.kt`
@@ -1065,7 +1152,7 @@
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 10.4: 본인 페이지 `DM 확인하기` 진입 추가** - [ ] **Task 11.4: 본인 페이지 `DM 확인하기` 진입 추가**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt`
@@ -1080,6 +1167,7 @@
- 작업: - 작업:
- 본인 페이지에서는 `대화하기` 버튼을 표시하지 않는다. - 본인 페이지에서는 `대화하기` 버튼을 표시하지 않는다.
- 본인 페이지에서는 `DM 보내기` 대신 `DM 확인하기` 버튼을 표시한다. - 본인 페이지에서는 `DM 보내기` 대신 `DM 확인하기` 버튼을 표시한다.
- `DM 확인하기` 버튼만 표시되어도 버튼은 가운데 정렬되고, 기존 버튼 영역 높이와 여백은 유지한다.
- `DM 확인하기` 터치 시 `MainActivity`로 이동하거나 기존 MainActivity instance를 재사용해 메인 `대화` 탭을 선택한다. - `DM 확인하기` 터치 시 `MainActivity`로 이동하거나 기존 MainActivity instance를 재사용해 메인 `대화` 탭을 선택한다.
- `ChatMainFragment`는 진입 파라미터를 받아 `ChatRoomFilter.DM`이 선택된 상태로 표시한다. - `ChatMainFragment`는 진입 파라미터를 받아 `ChatRoomFilter.DM`이 선택된 상태로 표시한다.
- 기존 타인 페이지의 `DM 보내기``DmChatRoomActivity.newIntentByCreatorId(context, creatorId)` 이동을 유지한다. - 기존 타인 페이지의 `DM 보내기``DmChatRoomActivity.newIntentByCreatorId(context, creatorId)` 이동을 유지한다.
@@ -1089,11 +1177,11 @@
--- ---
### Phase 11: 홈 탭 섹션 후속 UI/액션 보강 ### Phase 12: 홈 탭 섹션 후속 UI/액션 보강
> 후원 empty, 최신 콘텐츠 터치, 날짜 표시, 오디오/시리즈/활동 영역의 세부 Figma 정합성을 묶어서 처리한다. 섹션 하나당 Phase를 나누지 않고 관련 홈 컨텐츠 보정 Task로 묶는다. > 후원 empty, 최신 콘텐츠 터치, 날짜 표시, 오디오/시리즈/활동 영역의 세부 Figma 정합성을 묶어서 처리한다. 섹션 하나당 Phase를 나누지 않고 관련 홈 컨텐츠 보정 Task로 묶는다.
- [ ] **Task 11.1: 후원 empty UI와 최신 콘텐츠/날짜 표시 보강** - [ ] **Task 12.1: 후원 empty UI와 최신 콘텐츠/날짜 표시 보강**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeMappers.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeMappers.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt`
@@ -1109,6 +1197,7 @@
- `channelDonations`가 비어 있으면 후원 섹션을 숨기지 않고 empty 안내 UI를 표시한다. - `channelDonations`가 비어 있으면 후원 섹션을 숨기지 않고 empty 안내 UI를 표시한다.
- empty card width는 374dp 고정이 아니라 부모 섹션 좌우 여백 안에서 `match_parent`로 처리한다. - empty card width는 374dp 고정이 아니라 부모 섹션 좌우 여백 안에서 `match_parent`로 처리한다.
- empty card는 height 196dp, `gray_900` 배경, 14dp radius, `처음으로 크리에이터를` / `후원해 보세요!`, 흰색 `후원하기` capsule을 표시한다. - empty card는 height 196dp, `gray_900` 배경, 14dp radius, `처음으로 크리에이터를` / `후원해 보세요!`, 흰색 `후원하기` capsule을 표시한다.
- `후원하기` 버튼 터치 동작은 기존 후원 플로우/상세 화면 진입점이 있으면 재사용하고, 없으면 후원 API/화면 확정 필요 항목으로 검증 기록에 남긴다.
- 최신 오디오 row/card 터치 시 `latestAudioContent.audioContentId`로 기존 `AudioContentDetailActivity`에 이동한다. - 최신 오디오 row/card 터치 시 `latestAudioContent.audioContentId`로 기존 `AudioContentDetailActivity`에 이동한다.
- 공지/커뮤니티 게시글 날짜는 API `dateUtc` 원문 대신 기존 앱의 상대 날짜 표시 방식으로 변환한다. - 공지/커뮤니티 게시글 날짜는 API `dateUtc` 원문 대신 기존 앱의 상대 날짜 표시 방식으로 변환한다.
- 검증 명령: - 검증 명령:
@@ -1117,7 +1206,7 @@
- `./gradlew :app:mergeDebugResources` - `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 11.2: 오디오/시리즈 아이템 세부 UI와 터치 액션 보강** - [ ] **Task 12.2: 오디오/시리즈 아이템 세부 UI와 터치 액션 보강**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt`
- `app/src/main/res/layout/item_creator_channel_home_audio.xml` - `app/src/main/res/layout/item_creator_channel_home_audio.xml`
@@ -1140,7 +1229,7 @@
- `./gradlew :app:mergeDebugResources` - `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 11.3: 활동 영역 Figma 정합성과 데뷔 날짜/D+n 버그 수정** - [ ] **Task 12.3: 활동 영역 Figma 정합성과 데뷔 날짜/D+n 버그 수정**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt`
- `app/src/main/res/layout/item_creator_channel_home_activity.xml` - `app/src/main/res/layout/item_creator_channel_home_activity.xml`
@@ -1165,11 +1254,11 @@
--- ---
### Phase 12: 크리에이터 본인 페이지 Floating Button ### Phase 13: 크리에이터 본인 페이지 Floating Button
> 본인 페이지 전용 홈 탭 FAB와 확장 액션을 추가한다. 상단 액션 정책은 Phase 10에서 처리하고, FAB overlay/animation/버튼 액션은 이 Phase에서 처리한다. > 본인 페이지 전용 홈 탭 FAB와 확장 액션을 추가한다. 상단 액션 정책은 Phase 11에서 처리하고, FAB overlay/animation/버튼 액션은 이 Phase에서 처리한다.
- [ ] **Task 12.1: Floating Button 기본/확장 layout 추가** - [ ] **Task 13.1: Floating Button 기본/확장 layout 추가**
- 수정: - 수정:
- `app/src/main/res/layout/activity_creator_channel.xml` - `app/src/main/res/layout/activity_creator_channel.xml`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
@@ -1191,12 +1280,13 @@
- 아이콘은 순서대로 `ic_new_upload_community_post`, `ic_new_upload_audio`, `ic_new_create_live`, `ic_new_x_black`을 사용한다. - 아이콘은 순서대로 `ic_new_upload_community_post`, `ic_new_upload_audio`, `ic_new_create_live`, `ic_new_x_black`을 사용한다.
- 닫기 버튼은 흰색 배경을 사용하고 터치 시 dim과 확장 버튼을 닫는다. - 닫기 버튼은 흰색 배경을 사용하고 터치 시 dim과 확장 버튼을 닫는다.
- dim 뒤 홈 컨텐츠, tab-bar, title-bar 액션이 잘못 터치되지 않게 한다. - dim 뒤 홈 컨텐츠, tab-bar, title-bar 액션이 잘못 터치되지 않게 한다.
- dim 영역 터치도 닫기 동작으로 처리할지, `닫기` 버튼만 닫기 동작으로 처리할지는 구현 시 기존 앱 overlay UX를 확인해 확정하고 검증 기록에 남긴다.
- 검증 명령: - 검증 명령:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:mergeDebugResources` - `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 12.2: Floating Button Spring animation과 하단 inset 보정** - [ ] **Task 13.2: Floating Button Spring animation과 하단 inset 보정**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt` - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
@@ -1210,7 +1300,7 @@
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
- [ ] **Task 12.3: Floating Button 3개 액션 진입점 연결** - [ ] **Task 13.3: Floating Button 3개 액션 진입점 연결**
- 수정: - 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt` - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
@@ -1231,16 +1321,16 @@
--- ---
### Phase 13: 후속 보강 최종 검증과 문서 기록 ### Phase 14: 후속 보강 최종 검증과 문서 기록
- [ ] **Task 13.1: 후속 보강 단위/source 테스트 실행** - [ ] **Task 14.1: 후속 보강 단위/source 테스트 실행**
- 실행: - 실행:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"`
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*"`
- 기대 결과: - 기대 결과:
- 크리에이터 채널 후속 보강 테스트와 기존 홈 진입점 테스트가 `BUILD SUCCESSFUL`로 통과한다. - 크리에이터 채널 후속 보강 테스트와 기존 홈 진입점 테스트가 `BUILD SUCCESSFUL`로 통과한다.
- [ ] **Task 13.2: 리소스/컴파일/린트 검증** - [ ] **Task 14.2: 리소스/컴파일/린트 검증**
- 실행: - 실행:
- `./gradlew :app:mergeDebugResources` - `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin` - `./gradlew :app:compileDebugKotlin`
@@ -1250,7 +1340,7 @@
- `mergeDebugResources`, `compileDebugKotlin`, `git diff --check`는 통과한다. - `mergeDebugResources`, `compileDebugKotlin`, `git diff --check`는 통과한다.
- `ktlintCheck`가 기존 `audio_content` 패키지명 underscore 문제로 실패하면, 이번 변경 파일에서 발생한 실패인지 구분해 검증 기록에 남긴다. - `ktlintCheck`가 기존 `audio_content` 패키지명 underscore 문제로 실패하면, 이번 변경 파일에서 발생한 실패인지 구분해 검증 기록에 남긴다.
- [ ] **Task 13.3: 수동 화면 검증** - [ ] **Task 14.3: 수동 화면 검증**
- 확인: - 확인:
- 타인 페이지에서 팔로우/알림/더보기/대화/DM 동작이 PRD와 일치한다. - 타인 페이지에서 팔로우/알림/더보기/대화/DM 동작이 PRD와 일치한다.
- 본인 페이지에서 팔로우/알림/더보기/대화가 제거되고 `DM 확인하기`와 FAB가 표시된다. - 본인 페이지에서 팔로우/알림/더보기/대화가 제거되고 `DM 확인하기`와 FAB가 표시된다.
@@ -1261,7 +1351,7 @@
- 기대 결과: - 기대 결과:
- 2026-06-16 이후 추가 PRD Metrics를 모두 만족한다. - 2026-06-16 이후 추가 PRD Metrics를 모두 만족한다.
- [ ] **Task 13.4: 검증 기록 누적** - [ ] **Task 14.4: 검증 기록 누적**
- 수정: - 수정:
- `docs/20260611_크리에이터_채널_홈_탭/plan-task.md` - `docs/20260611_크리에이터_채널_홈_탭/plan-task.md`
- `docs/20260611_크리에이터_채널_홈_탭/prd.md` - `docs/20260611_크리에이터_채널_홈_탭/prd.md`
@@ -1354,3 +1444,4 @@
- 2026-06-15: Phase 8 수동 화면 검증 준비로 Figma `296:14890`, `296:14892`, `296:14287`, `296:14288`, `296:14289` 스크린샷을 확인하고, `CreatorChannelHomeActivity.kt`, `activity_creator_channel_home.xml`, `CreatorChannelTitleBarState.kt`, `CreatorChannelScrollState.kt`, `CreatorChannelHomeSectionAdapter.kt`, `CreatorChannelHomeActivitySourceTest.kt`를 대조했다. `./gradlew :app:assembleDebug``BUILD SUCCESSFUL`이었으나, 설치/실행 시점에 연결 기기가 사라져 `adb install -r "app/build/outputs/apk/debug/app-debug.apk"``adb: no devices/emulators found`로 실패했다. 재확인한 `adb devices`에도 기기가 없어 실제 전면 화면 캡처와 스크롤/클릭 육안 검증은 미완료로 남겼다. - 2026-06-15: Phase 8 수동 화면 검증 준비로 Figma `296:14890`, `296:14892`, `296:14287`, `296:14288`, `296:14289` 스크린샷을 확인하고, `CreatorChannelHomeActivity.kt`, `activity_creator_channel_home.xml`, `CreatorChannelTitleBarState.kt`, `CreatorChannelScrollState.kt`, `CreatorChannelHomeSectionAdapter.kt`, `CreatorChannelHomeActivitySourceTest.kt`를 대조했다. `./gradlew :app:assembleDebug``BUILD SUCCESSFUL`이었으나, 설치/실행 시점에 연결 기기가 사라져 `adb install -r "app/build/outputs/apk/debug/app-debug.apk"``adb: no devices/emulators found`로 실패했다. 재확인한 `adb devices`에도 기기가 없어 실제 전면 화면 캡처와 스크롤/클릭 육안 검증은 미완료로 남겼다.
- 2026-06-15: Phase 9 이름 변경으로 `CreatorChannelHomeActivity`/`activity_creator_channel_home.xml`/`ActivityCreatorChannelHomeBinding``CreatorChannelActivity`/`activity_creator_channel.xml`/`ActivityCreatorChannelBinding`으로 정리하고, Manifest와 모든 진입점 및 source test를 새 이름으로 갱신했다. focused source test, 홈 진입점 테스트, 크리에이터 채널 전체 테스트, 리소스 merge, Kotlin compile, `git diff --check`는 통과했다. `ktlintCheck`는 기존 `audio_content` 패키지명 underscore 규칙 위반으로 실패했으며 이번 변경 범위 밖이라 수정하지 않았다. - 2026-06-15: Phase 9 이름 변경으로 `CreatorChannelHomeActivity`/`activity_creator_channel_home.xml`/`ActivityCreatorChannelHomeBinding``CreatorChannelActivity`/`activity_creator_channel.xml`/`ActivityCreatorChannelBinding`으로 정리하고, Manifest와 모든 진입점 및 source test를 새 이름으로 갱신했다. focused source test, 홈 진입점 테스트, 크리에이터 채널 전체 테스트, 리소스 merge, Kotlin compile, `git diff --check`는 통과했다. `ktlintCheck`는 기존 `audio_content` 패키지명 underscore 규칙 위반으로 실패했으며 이번 변경 범위 밖이라 수정하지 않았다.
- 2026-06-16: PRD에 신규 추가된 요구사항을 바탕으로 plan-task 문서를 보강했다. Phase는 섹션 단위로 과도하게 쪼개지 않고 `상단 상태/탭/액션`, `홈 탭 섹션 후속 UI/액션`, `크리에이터 본인 페이지 Floating Button`, `후속 보강 최종 검증`으로 묶었으며, 세부 변경은 Task 체크리스트에 배치했다. 이번 단계는 계획 문서 보강만 수행했으며 구현/빌드/테스트는 실행하지 않았다. - 2026-06-16: PRD에 신규 추가된 요구사항을 바탕으로 plan-task 문서를 보강했다. Phase는 섹션 단위로 과도하게 쪼개지 않고 `상단 상태/탭/액션`, `홈 탭 섹션 후속 UI/액션`, `크리에이터 본인 페이지 Floating Button`, `후속 보강 최종 검증`으로 묶었으며, 세부 변경은 Task 체크리스트에 배치했다. 이번 단계는 계획 문서 보강만 수행했으며 구현/빌드/테스트는 실행하지 않았다.
- 2026-06-16: PRD와 plan-task 재대조 중 `TabLayout + ViewPager2 + 탭별 Fragment` 컨테이너 전환 Phase가 누락되어 있음을 확인하고 Phase 10으로 추가했다. 기존 후속 Phase는 11~14로 밀어 정리했고, `후원하기` 버튼 터치 정책, 본인 페이지 `DM 확인하기` 단독 버튼 정렬/높이 보존, Floating Button dim 영역 닫기 정책 확정 항목도 Task에 보강했다. 이번 단계는 계획 문서 보강만 수행했으며 구현/빌드/테스트는 실행하지 않았다.