diff --git a/app/src/main/res/layout/fragment_v2_main_content.xml b/app/src/main/res/layout/fragment_v2_main_content.xml index c82baaf4..60ed8bb5 100644 --- a/app/src/main/res/layout/fragment_v2_main_content.xml +++ b/app/src/main/res/layout/fragment_v2_main_content.xml @@ -226,28 +226,6 @@ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - - - - - - - + + + + + + + = 0) + assertTrue(newAndHotIndex >= 0) + assertTrue(latestAudioIndex >= 0) + assertTrue(freeAudioIndex >= 0) + assertTrue(pointAudioIndex >= 0) + assertTrue(commentedAudioIndex >= 0) + assertTrue(recommendedAudioIndex >= 0) + assertTrue(originalSeriesIndex < newAndHotIndex) + assertTrue(newAndHotIndex < latestAudioIndex) + assertTrue(latestAudioIndex < freeAudioIndex) + assertTrue(freeAudioIndex < pointAudioIndex) + assertTrue(pointAudioIndex < commentedAudioIndex) + assertTrue(commentedAudioIndex < recommendedAudioIndex) + } + @Test fun `콘텐츠 추천 섹션 타이틀은 Phase 2 대상에만 chevron을 표시한다`() { val source = projectFile( diff --git a/docs/20260623_메인_콘텐츠_추천_탭/plan-task.md b/docs/20260623_메인_콘텐츠_추천_탭/plan-task.md index feded6c3..775e61ce 100644 --- a/docs/20260623_메인_콘텐츠_추천_탭/plan-task.md +++ b/docs/20260623_메인_콘텐츠_추천_탭/plan-task.md @@ -517,3 +517,19 @@ - 2026-06-23: Phase 4~6 코드 리뷰 및 검증을 재수행했다. 배너/오리지널 시리즈/공통 오디오 카드/New&Hot/최근 댓글 adapter, 실제 API 상태 observer, section visibility, 오디오/시리즈/배너 routing, 제외 섹션 미추가 상태를 확인했고 blocking issue는 발견하지 못했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 결과 모두 성공했다. `:app:mergeDebugResources`는 최초 sandbox 실행에서 `~/.gradle` lock 파일 권한으로 실패해 승인 후 재실행했고 성공했다. - 2026-06-23: Phase 7 통합 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`를 순차 실행했고 모두 성공했다. 실제 기기 `SM-G960N - Android 10`에 debug APK를 설치해 콘텐츠 탭 진입, title-bar/tab-bar 고정 영역, 제외 섹션 미표시를 확인했다. 다만 실제 API 응답이 빈 상태여서 non-empty 섹션과 item routing은 실기기에서 확인하지 못했고 기존 source/mapper 테스트와 컴파일 검증으로 대체했다. - 2026-06-25: 리뷰 지적에 따라 `ContentRecyclerItemLayoutParams`의 grid item offset을 left column 여부 기반 계산에서 `spanCount`와 `columnIndex` 기반 계산으로 수정했다. 기본 2열은 기존처럼 인접 gap `4dp + 4dp`를 유지하고, 전체 탭 3열은 1-2열/2-3열 사이 gap이 모두 `8dp`가 되도록 보정했다. 회귀 방지를 위해 `ContentMainFragmentSourceTest`에 3열 spacing 계약을 추가했고, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행해 모두 `BUILD SUCCESSFUL`을 확인했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고와 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다. + +### 2026-07-09 후속 변경: 메인 콘텐츠 추천 섹션 순서 변경 + +- [x] **Task 8.1: 추천 탭 XML 섹션 순서 변경** + - 수정: + - `app/src/main/res/layout/fragment_v2_main_content.xml` + - `app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt` + - 작업: + - 추천 탭 섹션 순서를 `오직 보이스온에서만!` → `New&Hot` → `새로 올라온 오디오` → `무료 오디오` → `포인트 오디오` → `댓글 많은 오디오` → `추천 오디오`로 변경한다. + - adapter, ViewModel, routing 로직은 변경하지 않는다. + - 검증: + - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest"` + - `./gradlew :app:mergeDebugResources` + - `./gradlew :app:compileDebugKotlin` + - 검증 기록: + - 2026-07-09: 먼저 `ContentMainFragmentSourceTest.content 추천 layout은 요청된 섹션 순서로 배치한다`를 추가하고 기존 XML에서 `newAndHotIndex < latestAudioIndex` 조건 실패를 RED로 확인했다. 이후 `fragment_v2_main_content.xml`에서 `New&Hot` 섹션을 `새로 올라온 오디오` 위로 이동했고, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `git diff --check` 결과 모두 성공했다. Gradle deprecation warning과 Agora namespace warning은 기존 경고로 이번 변경과 무관하다.