docs(home): 장르 크리에이터 수정 검증을 기록한다
This commit is contained in:
@@ -312,6 +312,22 @@
|
|||||||
- 완료 상태에서는 터치해도 callback을 호출하지 않는다.
|
- 완료 상태에서는 터치해도 callback을 호출하지 않는다.
|
||||||
- 검증: `HomeMainFragmentLayoutTest`에 모두 팔로우 기본/완료 상태와 완료 상태 no-op 회귀 테스트를 추가한다.
|
- 검증: `HomeMainFragmentLayoutTest`에 모두 팔로우 기본/완료 상태와 완료 상태 no-op 회귀 테스트를 추가한다.
|
||||||
|
|
||||||
|
- [x] **Task 6.12: 장르의 크리에이터 Figma 정합 추가 수정**
|
||||||
|
- 기준: Figma `24:5611`
|
||||||
|
- 수정: `app/src/main/res/layout/fragment_v2_main_home.xml`
|
||||||
|
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/HomeMainFragment.kt`
|
||||||
|
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeGenreCreatorAdapter.kt`
|
||||||
|
- 생성 후보: `app/src/main/res/layout/item_home_genre_creator_group.xml`
|
||||||
|
- 생성 후보: `app/src/main/res/layout/item_home_genre_creator_profile.xml`
|
||||||
|
- 생성 후보: `app/src/main/res/drawable/bg_home_genre_creator_group.xml`
|
||||||
|
- 구현 내용:
|
||||||
|
- `genreCreators: List<HomeGenreCreatorGroupItem>`를 그룹 단위 page로 표시한다.
|
||||||
|
- 각 장르 page는 `374dp` 폭, `14dp` padding/radius/gap, dark-blue gradient 배경을 적용한다.
|
||||||
|
- 각 page 내부에 장르 제목, 8명 creator profile grid, 모두 팔로우 버튼을 포함한다.
|
||||||
|
- 전체 장르 page 목록은 free scroll이 아니라 `PagerSnapHelper` 기반 banner snapping으로 이동한다.
|
||||||
|
- 빈 creator group은 숨기고 최대 5개 장르 group만 표시한다.
|
||||||
|
- 검증: `HomeMainFragmentLayoutTest`에 genre page 치수/gradient/grid/snap/helper/filtering 회귀 테스트를 추가한다.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Phase 7: FeedCommunityView 추천 페이지 확장
|
### Phase 7: FeedCommunityView 추천 페이지 확장
|
||||||
@@ -470,3 +486,11 @@
|
|||||||
- 2026-06-02: `rv_home_ai_characters` padding을 `14dp`로 맞추고, `HomeAiCharacterAdapter`에서 inflate된 `view_character_chat_thumbnail.xml` root layout params를 유지한 채 `marginEnd`만 `4dp`로 적용했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `lsp_diagnostics`는 Kotlin/XML LSP 미구성으로 실행하지 못해 Gradle compile/test/ktlint로 보완했다.
|
- 2026-06-02: `rv_home_ai_characters` padding을 `14dp`로 맞추고, `HomeAiCharacterAdapter`에서 inflate된 `view_character_chat_thumbnail.xml` root layout params를 유지한 채 `marginEnd`만 `4dp`로 적용했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `lsp_diagnostics`는 Kotlin/XML LSP 미구성으로 실행하지 못해 Gradle compile/test/ktlint로 보완했다.
|
||||||
- 2026-06-04: Figma `24:5611`, 완료 버튼 `24:9092` 기준 장르 크리에이터 모두 팔로우 버튼을 확인해 기본 상태는 `ic_new_follow`, 투명 배경과 흰색 30% stroke, 흰색 텍스트이고 완료 상태는 `ic_new_following`, 흰색 배경, 검은색 텍스트여야 함을 확인했다. `HomeMainFragmentLayoutTest`에 모두 팔로우 기본/완료 상태와 완료 상태 no-op 회귀 테스트를 먼저 추가했고, 구현 전 `bg_home_follow_all_button` 리소스 미존재로 RED 컴파일 실패를 확인했다.
|
- 2026-06-04: Figma `24:5611`, 완료 버튼 `24:9092` 기준 장르 크리에이터 모두 팔로우 버튼을 확인해 기본 상태는 `ic_new_follow`, 투명 배경과 흰색 30% stroke, 흰색 텍스트이고 완료 상태는 `ic_new_following`, 흰색 배경, 검은색 텍스트여야 함을 확인했다. `HomeMainFragmentLayoutTest`에 모두 팔로우 기본/완료 상태와 완료 상태 no-op 회귀 테스트를 먼저 추가했고, 구현 전 `bg_home_follow_all_button` 리소스 미존재로 RED 컴파일 실패를 확인했다.
|
||||||
- 2026-06-04: `bg_home_follow_all_button.xml`을 추가하고 `view_home_follow_all_button.xml`의 기본 상태를 Figma 활성 상태로 변경했다. `HomeFollowAllButtonBinder`는 완료 상태에서 `bg_round_corner_999_white`, 검은 텍스트, `ic_new_following`, `모두 팔로우 완료`를 적용하고 터치 시 callback을 호출하지 않도록 수정했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `./gradlew :app:installDebug`는 연결된 기기가 없어 `No connected devices!`로 실패해 실기기 설치 확인은 수행하지 못했다.
|
- 2026-06-04: `bg_home_follow_all_button.xml`을 추가하고 `view_home_follow_all_button.xml`의 기본 상태를 Figma 활성 상태로 변경했다. `HomeFollowAllButtonBinder`는 완료 상태에서 `bg_round_corner_999_white`, 검은 텍스트, `ic_new_following`, `모두 팔로우 완료`를 적용하고 터치 시 callback을 호출하지 않도록 수정했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `./gradlew :app:installDebug`는 연결된 기기가 없어 `No connected devices!`로 실패해 실기기 설치 확인은 수행하지 못했다.
|
||||||
|
- 2026-06-04: 사용자 추가 요청에 따라 Figma `24:5611` 기준 `장르의 크리에이터` 섹션을 그룹 단위 snapping card 구조로 수정했다. 구현 전 `HomeMainFragmentLayoutTest`에 genre group card/profile/snapping/filtering/follow callback 회귀 테스트를 추가했고, 기존 구현에서 `item_home_genre_creator_group`, `bg_home_genre_creator_group`, `submitGroups` 등 새 계약 미존재로 RED 컴파일 실패를 확인했다. 이후 `HomeGenreCreatorAdapter`를 group page adapter로 변경하고, `HomePagerSnapRecyclerView`, `item_home_genre_creator_group.xml`, `item_home_genre_creator_profile.xml`, `bg_home_genre_creator_group.xml`을 추가해 각 page에 장르 제목, 8명 grid, 모두 팔로우 버튼, dark-blue gradient, `PagerSnapHelper` snapping을 적용했다. targeted 테스트 최초 재실행에서는 null image가 Coil `ImageLoaderProvider`를 요구해 실패했고, nullable image는 drawable을 명시적으로 비우도록 수정한 뒤 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`가 BUILD SUCCESSFUL임을 확인했다. 추가 검증으로 `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. ktlint 최초 실행은 테스트 파일 긴 줄 2곳으로 실패했고 줄바꿈 수정 후 재실행으로 성공했다. `lsp_diagnostics`는 Kotlin/XML LSP 미구성으로 실행하지 못해 Gradle compile/test/ktlint로 보완했다. 실기기 수동 확인은 연결 기기가 없어 수행하지 못했다.
|
||||||
|
- 2026-06-04: 리뷰에서 모든 genre group의 creators가 비어 있을 때 adapter는 빈 목록이 되지만 `ll_home_genre_creator_section`이 `VISIBLE`로 남을 수 있다는 차단 이슈를 확인했다. `HomeMainFragmentLayoutTest`에 `visibleHomeGenreCreatorGroups()` all-empty 회귀 테스트를 추가했고, helper 미구현으로 RED 컴파일 실패를 확인했다. 이후 `HomeRecommendationUiModels.kt`에 visible group helper를 추가하고 `HomeMainFragment.bindGenreCreatorSection()`의 visibility와 submit 기준을 같은 filtered/capped 목록으로 맞췄으며, adapter 자체의 empty/max 5 방어도 유지했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 재실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-04: 장르 크리에이터 group card 폭을 고정 `374dp`가 아니라 현재 화면 가로 크기에서 좌우 여백 `28dp`를 뺀 값으로 계산하도록 수정했다. 구현 전 `HomeMainFragmentLayoutTest`의 group layout 계약을 `match_parent`로 바꾸고 adapter item width가 parent width `402dp - 28dp = 374dp`가 되는 회귀 테스트를 추가했으며, 기존 구현에서 XML `374dp` 고정 및 adapter 폭 미계산으로 RED 실패를 확인했다. 이후 `item_home_genre_creator_group.xml` root width를 `match_parent`로 바꾸고 `HomeGenreCreatorAdapter`에서 parent width 기반 `RecyclerView.LayoutParams`를 설정하도록 변경했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-04: 작은 해상도에서 장르 크리에이터 grid의 profile item/image `75dp` 고정값 때문에 4열 끝부분이 잘릴 수 있어, group card 내부 grid 가용 폭에 맞춰 profile cell 크기를 계산하도록 수정했다. 구현 전 `HomeMainFragmentLayoutTest`에 작은 parent width `360dp` 기준 cell size가 `(360 - 28 - 28 - 14*3) / 4`로 계산되는 회귀 테스트를 추가했고, 기존 `75dp` 고정 구현에서 RED 실패를 확인했다. 이후 `item_home_genre_creator_group.xml`의 grid width를 `match_parent`로 변경하고, `HomeGenreCreatorAdapter`에서 card width, padding, column gap을 기준으로 profile item/image width/height를 동적으로 설정하도록 수정했다. `home_genre_creator_profile_size` dimen은 더 이상 사용하지 않아 제거했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-04: `item_home_genre_creator_profile.xml` 자체에도 profile root와 image가 `75dp`로 고정되어 있어 XML 계약을 `ConstraintLayout` 기반의 가변 cell + 1:1 image ratio로 변경했다. 구현 전 `HomeMainFragmentLayoutTest`의 profile XML 테스트를 root `match_parent`, image `0dp x 0dp`, `layout_constraintDimensionRatio="1:1"` 계약으로 바꿨고 기존 `LinearLayout`/`75dp` XML에서 RED 실패를 확인했다. 이후 root를 `ConstraintLayout`으로 전환하고 image는 parent width를 따르는 1:1 ratio로, nickname은 image 하단에 constraint 되도록 수정했다. adapter에서는 image width/height 직접 덮어쓰기를 제거하고 root cell width만 grid layout params로 설정하게 정리했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-04: 실제 화면에서 장르 크리에이터 grid 우측 끝 이미지가 절반 정도 잘리는 문제를 수정했다. 원인은 profile size 계산 시 group item width가 아직 `MATCH_PARENT`이거나 미측정일 때 display width fallback을 사용해 cell이 과대 계산될 수 있는 점이었다. 구현 전 `HomeMainFragmentLayoutTest`에 group width가 미확정인 상황에서도 parent RecyclerView width `360dp` 기준으로 cell size가 계산되는 회귀 테스트를 추가했고, 기존 display width fallback에서 RED 실패를 확인했다. 이후 `HomeGenreCreatorAdapter.GenreCreatorGroupViewHolder`가 parent RecyclerView를 보관하고, card width가 확정되지 않은 경우 `parent.width - 28dp`를 사용해 profile cell 크기를 계산하도록 수정했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-04: 한국어/영어 장르 suffix의 선행 공백이 실제 기기에서 보이지 않고, 우측 끝 profile image가 일부 잘리는 문제를 추가 수정했다. 일본어에는 공백을 넣으면 안 되므로 title row margin 방식은 사용하지 않고 한국어/영어 string에 `\u0020`를 사용해 선행 공백을 보존했다. `xml:space="preserve"` 시도는 Android resource merge에서 실패해 제거했고, stale incremental resource 산출물(`app/build/intermediates/incremental/debug/packageDebugResources`, `mergeDebugResources`)을 삭제한 뒤 재검증했다. profile cell 크기는 itemView 측정 폭이 parent RecyclerView content 폭보다 크게 잡히는 경우를 방지하도록 parent padding을 제외한 content width로 cap 했다. 구현 전 `HomeMainFragmentLayoutTest`에 parent padding이 있는 상태에서 measured group width가 과대 측정되어도 cell size가 `RecyclerView content width` 기준으로 계산되는 회귀 테스트와 한국어/영어는 선행 공백, 일본어는 선행 공백 없음 테스트를 추가해 RED 실패를 확인했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-06-04: 우측 profile image 잘림 범위가 group card/RecyclerView가 아니라 `item_home_genre_creator_group.xml` 내부 `GridLayout`임을 확인해, profile cell 계산 기준을 `GridLayout`의 실제 측정 width 우선으로 수정했다. 구현 전 `HomeMainFragmentLayoutTest`에 GridLayout width가 `300dp`로 측정된 경우 cell size가 `(300 - 14*3) / 4`로 계산되어야 하는 회귀 테스트를 추가했고, 기존 card width 기준 계산에서 RED 실패를 확인했다. 이후 `HomeGenreCreatorAdapter`의 `calculateProfileSize()`가 `creatorGrid.width`를 우선 사용하고, layout 이후 width가 확정되는 경우 `creatorGrid.post { ... }`에서 다시 바인딩해 재계산하도록 변경했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
|||||||
Reference in New Issue
Block a user