docs(content): 전체 탭 grid 검증을 기록한다

This commit is contained in:
2026-06-25 18:31:46 +09:00
parent 136fdced17
commit 8c5c1dce53

View File

@@ -637,3 +637,43 @@
- PASS: `./gradlew :app:ktlintCheck` - PASS: `./gradlew :app:ktlintCheck`
- PASS: `git diff --check` - PASS: `git diff --check`
- 참고: `./gradlew :app:mergeDebugResources`는 최초 일반 실행에서 Gradle wrapper lock 파일 접근이 샌드박스에서 차단되어 실패했고, 승인 실행으로 재검증해 성공했다. - 참고: `./gradlew :app:mergeDebugResources`는 최초 일반 실행에서 Gradle wrapper lock 파일 접근이 샌드박스에서 차단되어 실패했고, 승인 실행으로 재검증해 성공했다.
- 2026-06-25 전체 탭 카드 동적 grid width 후속 보정:
- 수정 완료: `ContentAllAudioCardAdapter`, `ContentAllSeriesCardAdapter`에서 fixed `setSize(*ContentCardSize.Small)` 호출을 제거하고, `RecyclerView.calculateContentGridItemWidthPx(CONTENT_ALL_GRID_SPAN_COUNT)` 결과를 각 카드의 `setGridItemWidthPx()`에 전달하도록 변경했다.
- 수정 완료: `AudioContentCardView.setGridItemWidthPx()`는 Small typography/gap visual variant를 유지하면서 root/thumbnail/label width를 grid item width로 적용하고 썸네일을 1:1로 유지한다.
- 수정 완료: `SeriesContentCardView.setGridItemWidthPx()`는 Small typography/adult badge/gap visual variant를 유지하면서 root/thumbnail/label width를 grid item width로 적용하고 썸네일 높이를 `round(width * 172 / 122)`로 계산한다.
- 회귀 방지: `ContentMainFragmentSourceTest`에 전체 탭 adapter의 fixed Small 호출 부재와 동적 grid width 계산/API 사용 계약을 추가했다.
- 회귀 방지: `SeriesContentCardViewTest`에 dynamic width가 series thumbnail width와 `122:172` height 및 label width에 적용되는지 검증을 추가했다.
- 회귀 방지: `AudioContentCardViewTest`를 추가해 dynamic width가 audio thumbnail width/height 1:1 및 label width에 적용되는지 검증한다.
- PASS: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest" --tests "kr.co.vividnext.sodalive.v2.widget.SeriesContentCardViewTest" --tests "kr.co.vividnext.sodalive.v2.widget.AudioContentCardViewTest"`
- PASS: `./gradlew :app:mergeDebugResources`
- PASS: `./gradlew :app:compileDebugKotlin`
- PASS: `./gradlew :app:ktlintCheck`
- PASS: `git diff --check`
- 참고: 최초 focused test 실행은 `CONTENT_ALL_GRID_SPAN_COUNT`가 Fragment private companion 상수라 adapter에서 참조할 수 없어 컴파일 실패했고, 상수를 `ContentRecyclerItemLayoutParams.kt`의 공개 UI 상수로 이동한 뒤 재검증해 통과했다.
- 참고: 두 번째 focused test 실행은 소개 섹션 source test가 기존 `android:textSize="16sp"` assertion을 남겨 실패했고, `@style/Typography.Body3` 계약 assertion으로 보정한 뒤 재검증해 통과했다.
- 참고: `ktlintCheck``.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다.
- 2026-06-25: 실제 화면 수동 검증 가능 여부 확인을 위해 `adb devices`를 실행했으나 연결된 device/emulator가 없어 전면 화면 육안 검증은 수행하지 못했다. 이번 후속 보정은 source/widget 테스트와 Gradle 리소스/컴파일/스타일 검증으로 확인했다.
- 2026-06-25 전체 탭 카드 measured-width rebind 후속 보정 예정:
- 범위: `rvContentAllItems`가 측정 전 0폭으로 최초 bind된 경우에도 layout 완료 후 현재 adapter를 재바인딩해 audio/series 카드가 3열 grid 측정 폭을 다시 적용하도록 보정한다.
- 회귀 방지: `ContentMainFragmentSourceTest`에 layout-after-measure rebind source 계약을 추가하고, audio/series 카드 widget 테스트에서 root/card width와 thumbnail `MATCH_PARENT` 계약을 보강한다.
- 수정 완료: `ContentMainFragment`의 전체 탭 grid RecyclerView에 `doOnLayout` 기반 현재 adapter 재바인딩을 추가해 측정 완료 후 `calculateContentGridItemWidthPx(CONTENT_ALL_GRID_SPAN_COUNT)`가 실제 폭으로 다시 계산되도록 보정했다.
- PASS: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest" --tests "kr.co.vividnext.sodalive.v2.widget.AudioContentCardViewTest" --tests "kr.co.vividnext.sodalive.v2.widget.SeriesContentCardViewTest"`
- PASS: `./gradlew :app:mergeDebugResources`
- PASS: `./gradlew :app:ktlintCheck`
- PASS: `git diff --check`
- 참고: 최초 focused test 실행은 `doOnLayout` callback parameter가 `View`로 추론되어 `adapter` 참조 컴파일 오류가 발생했고, `RecyclerView` 명시 캐스팅으로 보정한 뒤 재검증해 통과했다.
- 참고: `ktlintCheck``.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다.
- 참고: `adb devices`에서 연결된 device/emulator가 없어 실제 화면 육안 검증은 수행하지 못했다.
- 2026-06-25 전체 탭 카드 measured grid width 주입 후속 보정:
- 수정 이유: `onBindViewHolder`에서 `holder.itemView.parent as? RecyclerView`로 폭을 찾는 방식은 최초 bind 시점에 parent가 없거나 아직 측정되지 않으면 0폭을 전달해 카드가 기본 Medium/Large 크기에 머물 수 있어 충분하지 않았다.
- 수정 완료: `ContentMainFragment``rvContentAllItems.calculateContentGridItemWidthPx(CONTENT_ALL_GRID_SPAN_COUNT)`로 측정된 3열 item 폭을 계산하고, `doOnLayout` 및 전체 탭 content bind 전에 `ContentAllAudioCardAdapter`/`ContentAllSeriesCardAdapter``setGridItemWidthPx()`로 주입하도록 변경했다.
- 수정 완료: 두 전체 탭 adapter는 양수 폭이 실제로 바뀔 때만 저장 후 `notifyDataSetChanged()`를 호출하고, bind 시 저장된 폭만 카드 `setGridItemWidthPx()`에 전달해 parent 조회 의존성을 제거했다.
- PASS: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest" --tests "kr.co.vividnext.sodalive.v2.widget.AudioContentCardViewTest" --tests "kr.co.vividnext.sodalive.v2.widget.SeriesContentCardViewTest"`
- PASS: `./gradlew :app:mergeDebugResources`
- PASS: `./gradlew :app:ktlintCheck`
- PASS: `git diff --check`
- PASS: device `2cec640c34017ece`에서 debug 앱 실행 후 콘텐츠 `전체 > 오디오`, `전체 > 시리즈`를 탭하고 UI hierarchy 기준 카드 x bounds가 3열 grid 열 안에 들어오는 것을 확인했다.
- 참고: 최초 `ktlintCheck` 실행은 `ContentMainFragmentSourceTest`의 긴 assertion 한 줄로 실패했고, 줄바꿈 보정 후 재실행해 통과했다.
- 참고: `ktlintCheck``.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다.