diff --git a/docs/20260617_크리에이터_채널_라이브_탭/plan-task.md b/docs/20260617_크리에이터_채널_라이브_탭/plan-task.md index 02fb1665..2c59bd8d 100644 --- a/docs/20260617_크리에이터_채널_라이브_탭/plan-task.md +++ b/docs/20260617_크리에이터_채널_라이브_탭/plan-task.md @@ -453,7 +453,7 @@ ### Phase 6: 본인 채널 하단 CTA와 라이브 시작 진입 연결 -- [ ] **Task 6.1: 본인 CTA 노출과 inset 처리 구현** +- [x] **Task 6.1: 본인 CTA 노출과 inset 처리 구현** - 수정: - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/live/CreatorChannelLiveFragment.kt` - `app/src/main/res/layout/fragment_creator_channel_live.xml` @@ -468,8 +468,15 @@ - `./gradlew :app:compileDebugKotlin` - 기대 결과: - CTA resource와 inset 코드가 컴파일된다. + - 검증 기록: + - 2026-06-18: Figma `665:19359`, `665:19371`을 확인해 본인 채널 하단 CTA가 검정 하단 영역 위 14dp inset, `soda_400` capsule, `ic_new_create_live`, `라이브 시작하기` label로 구성됨을 확인했다. 기존 `fragment_creator_channel_live.xml`의 CTA 골격과 `bg_creator_channel_owner_fab`, `ic_new_create_live`, `creator_channel_live_start_button` 리소스를 재사용했다. + - 2026-06-18: `CreatorChannelLiveFragmentLayoutTest`에 owner CTA source/layout 계약 테스트를 추가했다. production 구현 전 실행은 신규 assertion까지 도달하기 전에 기존 KSP unit-test cache 손상으로 `:app:kspDebugUnitTestKotlin FAILED`, `java.io.UTFDataFormatException`이 발생해 `app/build/kspCaches/debugUnitTest`, `app/build/generated/ksp/debugUnitTest` 생성물 캐시를 삭제 후 재검증했다. + - 2026-06-18: `CreatorChannelLiveFragment`에 `Host.isCreatorChannelOwner()`, `onCreatorChannelOwnerChanged(isOwner)`, `bindOwnerCta()`를 추가해 본인 채널에서만 `layoutCreatorChannelLiveOwnerCta`를 표시하고 타인 채널 또는 본인 여부 로딩 전에는 숨기도록 했다. + - 2026-06-18: `ViewCompat.setOnApplyWindowInsetsListener(binding.layoutCreatorChannelLiveOwnerCta)`로 `WindowInsetsCompat.Type.navigationBars()` bottom inset을 받아 CTA bottom margin에 `14dp + navigationBottomInset`을 적용하고, CTA 표시 시 `rvCreatorChannelLiveReplays` bottom padding을 `102dp + navigationBottomInset`으로 조정해 마지막 item이 CTA에 가려지지 않도록 했다. CTA 미표시 시 기존 32dp bottom padding으로 복원한다. + - 2026-06-18: `./gradlew :app:mergeDebugResources` 실행 결과 `BUILD SUCCESSFUL`로 통과했다. + - 2026-06-18: `./gradlew :app:compileDebugKotlin` 단독 재실행 결과 `BUILD SUCCESSFUL`로 통과했다. 병렬 Gradle 실행 중 한 차례 extension import 해석 실패가 발생했으나 동일 compile 명령 단독 재실행에서 통과했으며, 기존 deprecation/annotation 경고는 Phase 6 변경과 무관하다. -- [ ] **Task 6.2: 기존 라이브 시작 플로우 연결** +- [x] **Task 6.2: 기존 라이브 시작 플로우 연결** - 확인: - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt` - `app/src/main/java/kr/co/vividnext/sodalive/live/room/create/LiveRoomCreateActivity.kt` @@ -482,6 +489,20 @@ - 라이브 생성 완료 후 기존 홈 refresh/라이브룸 진입 정책과 충돌하지 않도록 처리한다. - 검증: - 라이브 시작 진입 대상 Activity/Fragment와 전달 extra를 계획 문서 해당 Task의 `검증 기록`에 남긴다. + - 검증 기록: + - 2026-06-18: `CreatorChannelLiveFragment.Host`에 `onCreatorChannelLiveStartClicked()`를 추가하고 CTA 클릭 시 `layoutCreatorChannelLiveOwnerCta.isEnabled = false` 후 host callback을 호출하도록 연결했다. `onResume()`에서 CTA enabled 상태를 복원해 라이브 생성 화면에서 돌아온 뒤 다시 클릭 가능하다. + - 2026-06-18: `CreatorChannelActivity.onCreatorChannelLiveStartClicked()`는 기존 `onOwnerFabLiveClicked()`를 재사용한다. 진입 대상은 `LiveRoomCreateActivity`이며, 기존 `liveRoomCreateLauncher.launch(Intent(this, LiveRoomCreateActivity::class.java))` 경로를 그대로 사용하므로 별도 extra는 추가하지 않는다. + - 2026-06-18: 라이브 생성 완료 후 기존 정책과 동일하게 `RESULT_OK`에서 `homeActionDelegate?.refreshHome()`를 호출하고, `Constants.EXTRA_ROOM_ID`, `Constants.EXTRA_ROOM_CHANNEL_NAME` 결과에 따라 `CreatorChannelLiveCoordinator.enterLiveRoom(roomId)` 또는 `creator_channel_live_created_message` toast를 사용한다. + - 2026-06-18: `CreatorChannelActivitySourceTest`에 live tab owner CTA가 header 본인 여부를 Fragment로 전달하고 기존 라이브 생성 플로우를 재사용하는 source 계약 테스트를 추가했다. + - 2026-06-18: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragmentLayoutTest" --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` 재실행 결과 `BUILD SUCCESSFUL`로 통과했다. + - 2026-06-18: `./gradlew :app:ktlintCheck` 실행 결과 `BUILD SUCCESSFUL`로 통과했다. 기존 `.editorconfig`의 `disabled_rules` deprecation 경고는 Phase 6 변경과 무관하다. + +#### Phase 6 코드 리뷰/검증 기록 +- 2026-06-18: Phase 6 변경 범위를 코드 리뷰했다. `CreatorChannelActivity`의 `currentHeader?.isOwner == true` 기반 owner 상태 전달, `CreatorChannelLiveFragment`의 owner CTA visibility/inset/list bottom padding/click 중복 방지, 기존 `onOwnerFabLiveClicked()` 재사용 경로를 확인했으며 차단 이슈는 발견하지 못했다. +- 2026-06-18: fresh verification으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragmentLayoutTest" --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`를 실행해 `BUILD SUCCESSFUL in 27s`로 통과했다. 최초 sandbox 실행은 `~/.gradle` wrapper lock 파일 권한 제한으로 실패해 권한 승인 후 재실행했다. +- 2026-06-18: fresh verification으로 `./gradlew :app:mergeDebugResources`를 실행해 `BUILD SUCCESSFUL in 1s`로 통과했다. 최초 sandbox 실행은 `~/.gradle` wrapper lock 파일 권한 제한으로 실패해 권한 승인 후 재실행했다. +- 2026-06-18: fresh verification으로 `./gradlew :app:compileDebugKotlin`을 실행해 `BUILD SUCCESSFUL in 1s`로 통과했다. +- 2026-06-18: fresh verification으로 `./gradlew :app:ktlintCheck`를 실행해 `BUILD SUCCESSFUL in 11s`로 통과했다. Gradle deprecation 경고는 기존 빌드 설정 경고로 Phase 6 변경과 직접 관련 없다. ---