docs(creator): 라이브 정렬 팝업 검증을 기록한다

This commit is contained in:
2026-06-18 00:12:14 +09:00
parent 8213d2de42
commit 0d11839a96

View File

@@ -412,7 +412,7 @@
### Phase 5: 정렬 컨텍스트 메뉴 구현 ### Phase 5: 정렬 컨텍스트 메뉴 구현
- [ ] **Task 5.1: Sort popup 구현** - [x] **Task 5.1: Sort popup 구현**
- 생성 후보: - 생성 후보:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/live/ui/CreatorChannelLiveSortPopup.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/live/ui/CreatorChannelLiveSortPopup.kt`
- `app/src/main/res/layout/view_creator_channel_live_sort_menu.xml` - `app/src/main/res/layout/view_creator_channel_live_sort_menu.xml`
@@ -425,8 +425,13 @@
- 새 정렬 선택 시 ViewModel에 정렬 변경을 전달한다. - 새 정렬 선택 시 ViewModel에 정렬 변경을 전달한다.
- 검증: - 검증:
- 작은 화면에서 메뉴가 화면 밖으로 벗어나지 않도록 위치 보정 기준을 코드에 남긴다. - 작은 화면에서 메뉴가 화면 밖으로 벗어나지 않도록 위치 보정 기준을 코드에 남긴다.
- 검증 기록:
- 2026-06-17: Figma `290:9041` 기준으로 `view_creator_channel_live_sort_menu.xml`, `bg_creator_channel_live_sort_popup.xml`, `bg_creator_channel_live_sort_selected.xml`을 추가했다. Popup 배경은 `gray_900` fill, `gray_700` 1dp stroke, `radius_14`로 구성하고, 선택 row는 `gray_800` 배경으로 표시한다.
- 2026-06-17: `CreatorChannelLiveSortPopup`을 추가해 `ContentSort.entries`와 기존 `toSortOptionUiModel(selectedSort)`/`toLabelResId()` 매핑을 재사용하도록 했다. `PopupWindow``isOutsideTouchable = true`, `isFocusable = true`로 외부 터치 dismiss를 지원하고, 같은 정렬 선택은 dismiss만 수행하며 새 정렬 선택은 `viewModel.changeSort(sort)`로 전달한다.
- 2026-06-17: 작은 화면에서 popup 오른쪽이 visible display frame 밖으로 나가는 경우 `calculateHorizontalOffset()`으로 음수 x offset을 계산해 `showAsDropDown()`에 전달하도록 위치 보정 기준을 코드에 남겼다.
- 2026-06-17: `CreatorChannelLiveFragment``layoutCreatorChannelLiveSortButton` 클릭 시 현재 `Content` 상태의 `selectedSort`로 popup을 표시하고, `onDestroyView()`에서 `sortPopup?.dismiss()`로 window leak을 방지한다.
- [ ] **Task 5.2: Sort 동작 테스트 보강** - [x] **Task 5.2: Sort 동작 테스트 보강**
- 수정: - 수정:
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/live/CreatorChannelLiveViewModelTest.kt` - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/live/CreatorChannelLiveViewModelTest.kt`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/live/CreatorChannelLiveMapperTest.kt` - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/live/CreatorChannelLiveMapperTest.kt`
@@ -438,6 +443,11 @@
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.*"` - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.*"`
- 기대 결과: - 기대 결과:
- sort 관련 테스트가 PASS한다. - sort 관련 테스트가 PASS한다.
- 검증 기록:
- 2026-06-17: production 구현 전 `CreatorChannelLiveFragmentLayoutTest`에 popup layout/resource/source wiring 테스트를 먼저 추가했다. RED 실행 결과 `view_creator_channel_live_sort_menu`, `layout_creator_channel_live_sort_options` 미존재로 `:app:compileDebugUnitTestKotlin FAILED`가 발생해 실패를 확인했다.
- 2026-06-17: 기존 `CreatorChannelLiveMapperTest``ContentSort`별 label resource 매핑을 이미 검증하고, 기존 `CreatorChannelLiveViewModelTest`는 정렬 변경 첫 페이지 재로딩 및 같은 정렬 재선택 no-op을 이미 검증하고 있어 중복 테스트를 추가하지 않았다.
- 2026-06-17: 구현 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragmentLayoutTest"` 실행 결과 `BUILD SUCCESSFUL`로 통과했다.
- 2026-06-17: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck` 실행 결과 모두 `BUILD SUCCESSFUL`로 통과했다. 기존 `.editorconfig``disabled_rules` deprecation 경고와 기존 Kotlin deprecation/annotation 경고는 Phase 5 변경과 무관하다.
--- ---
@@ -658,3 +668,7 @@
- 2026-06-17: Live pager 연결 보정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation 경고가 계속 출력되었다. - 2026-06-17: Live pager 연결 보정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation 경고가 계속 출력되었다.
- 2026-06-17: 리뷰 지적 2건 보정. Live 탭 API는 Live 탭 선택 시점 lazy load로 변경했고, Empty/Error는 Live page root와 Activity page minimumHeight 보정으로 탭 viewport 중앙 정렬을 보장했다. 최종 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragmentLayoutTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:mergeDebugResources` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS. 초기 병렬 RED 확인 중 Kotlin incremental cache 경합 로그가 출력됐으나 daemon 정리 후 순차 검증은 모두 통과했다. - 2026-06-17: 리뷰 지적 2건 보정. Live 탭 API는 Live 탭 선택 시점 lazy load로 변경했고, Empty/Error는 Live page root와 Activity page minimumHeight 보정으로 탭 viewport 중앙 정렬을 보장했다. 최종 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragmentLayoutTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:mergeDebugResources` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS. 초기 병렬 RED 확인 중 Kotlin incremental cache 경합 로그가 출력됐으나 daemon 정리 후 순차 검증은 모두 통과했다.
- 2026-06-17: 추가 리뷰 지적 2건 보정. `ViewPager2.offscreenPageLimit`을 복구해 Home 탭의 `HomeActionDelegate` 기반 상단 액션/refresh 경로를 유지하고, Live load-more 성공 시 첫 페이지의 current live/count/sort metadata를 보존하도록 변경했다. 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLivePaginationTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation 경고가 계속 출력되었다. - 2026-06-17: 추가 리뷰 지적 2건 보정. `ViewPager2.offscreenPageLimit`을 복구해 Home 탭의 `HomeActionDelegate` 기반 상단 액션/refresh 경로를 유지하고, Live load-more 성공 시 첫 페이지의 current live/count/sort metadata를 보존하도록 변경했다. 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLivePaginationTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation 경고가 계속 출력되었다.
- 2026-06-17: Phase 5 코드 리뷰 및 검증. Figma `290:9041` 컨텍스트 메뉴와 스크린샷을 재확인해 `gray_900` 배경, `gray_700` stroke, `radius_14`, 선택 row `gray_800`, 16sp medium, 12/8 padding 기준이 구현에 반영됐음을 확인했다. PRD/계획의 서버 정렬 계약은 `ContentSort` 5개 옵션이므로 Figma의 `추천순` row는 이번 범위에서 제외했다.
- 2026-06-17: Phase 5 코드 리뷰에서 수정 필요 결함은 발견하지 못했다. `CreatorChannelLiveSortPopup`은 외부 터치 dismiss, 같은 정렬 재선택 dismiss-only, 새 정렬 선택 시 `viewModel.changeSort(sort)` 전달, 우측 화면 밖 보정, `onDestroyView()` dismiss 경로를 갖는다.
- 2026-06-17: Phase 5 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragmentLayoutTest"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.live.*"` PASS, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Live*"` PASS, `./gradlew :app:mergeDebugResources` PASS, `./gradlew :app:compileDebugKotlin` PASS, `./gradlew :app:ktlintCheck` PASS를 확인했다.
- 2026-06-17: 추가 상위 회귀 검증 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"` 최초 실행은 drawable 3개 추가 후 resource id 캐시가 맞지 않아 `CreatorChannelHomeMapperTest`, `CreatorChannelTitleBarStateTest`의 drawable id assertion이 3씩 밀려 실패했다. 해당 클래스들을 `--rerun-tasks`로 강제 재컴파일하자 통과했고, 이후 동일 채널 전체 회귀 명령을 순차 재실행해 `BUILD SUCCESSFUL`로 통과했다. 병렬 `--rerun-tasks` 중 Kotlin incremental cache 경합 로그가 출력됐으나 최종 순차 검증은 통과했다.