docs(creator): 채널 홈 소개 활동 SNS 검증을 기록한다
This commit is contained in:
@@ -710,7 +710,7 @@
|
|||||||
- 2026-06-15: reviewer gate에서 `latestFanTalk == null` 리바인드 시 이전 ViewHolder의 프로필/본문이 남을 수 있다는 FAIL을 받았다. RED로 `layout_fantalk_latest_row`, null 시 row 숨김, 본문 빈 문자열, placeholder 초기화 계약을 추가한 뒤, `bindFanTalk()`에서 최신 팬Talk 유무에 따라 row visibility와 값을 명시적으로 초기화했다. 수정 후 focused source test와 creator channel 전체 테스트, 리소스/컴파일/ktlint/diff check가 PASS했다.
|
- 2026-06-15: reviewer gate에서 `latestFanTalk == null` 리바인드 시 이전 ViewHolder의 프로필/본문이 남을 수 있다는 FAIL을 받았다. RED로 `layout_fantalk_latest_row`, null 시 row 숨김, 본문 빈 문자열, placeholder 초기화 계약을 추가한 뒤, `bindFanTalk()`에서 최신 팬Talk 유무에 따라 row visibility와 값을 명시적으로 초기화했다. 수정 후 focused source test와 creator channel 전체 테스트, 리소스/컴파일/ktlint/diff check가 PASS했다.
|
||||||
- 2026-06-15: 사용자 후속 요청으로 팬Talk가 없을 때 표시할 empty UI Figma `304:17362`를 반영했다. 기존에는 `totalCount=0`, `latestFanTalk=null`이면 FanTalk section을 생성하지 않았지만, empty card 표시를 위해 mapper가 항상 FanTalk section을 포함하도록 변경했다. `item_creator_channel_home_fantalk.xml`에는 `layout_fantalk_empty`를 추가하고, `당신의 첫 응원을\n기다리고 있어요!` 문구와 `ic_new_fantalk_plus` 아이콘, `응원 남기기` 흰색 capsule 버튼을 배치했다. `bindFanTalk()`는 최신 팬Talk가 있으면 total/latest row를 표시하고 empty UI를 숨기며, 없으면 total/latest row를 숨기고 empty UI를 표시하도록 변경했다.
|
- 2026-06-15: 사용자 후속 요청으로 팬Talk가 없을 때 표시할 empty UI Figma `304:17362`를 반영했다. 기존에는 `totalCount=0`, `latestFanTalk=null`이면 FanTalk section을 생성하지 않았지만, empty card 표시를 위해 mapper가 항상 FanTalk section을 포함하도록 변경했다. `item_creator_channel_home_fantalk.xml`에는 `layout_fantalk_empty`를 추가하고, `당신의 첫 응원을\n기다리고 있어요!` 문구와 `ic_new_fantalk_plus` 아이콘, `응원 남기기` 흰색 capsule 버튼을 배치했다. `bindFanTalk()`는 최신 팬Talk가 있으면 total/latest row를 표시하고 empty UI를 숨기며, 없으면 total/latest row를 숨기고 empty UI를 표시하도록 변경했다.
|
||||||
|
|
||||||
- [ ] **Task 5R.10: 소개 섹션 재구성**
|
- [x] **Task 5R.10: 소개 섹션 재구성**
|
||||||
- 수정 예정:
|
- 수정 예정:
|
||||||
- `CreatorChannelHomeSectionAdapter.kt`
|
- `CreatorChannelHomeSectionAdapter.kt`
|
||||||
- `item_creator_channel_home_introduce.xml`
|
- `item_creator_channel_home_introduce.xml`
|
||||||
@@ -719,11 +719,13 @@
|
|||||||
- `SectionTitle(hasRightIcon=false)`
|
- `SectionTitle(hasRightIcon=false)`
|
||||||
- 작업:
|
- 작업:
|
||||||
- `introduce`가 blank이면 섹션을 표시하지 않는다.
|
- `introduce`가 blank이면 섹션을 표시하지 않는다.
|
||||||
- 소개 본문은 카드 배경 없이 16sp regular, white, 362dp 폭 기준으로 표시한다.
|
- 소개 본문은 카드 배경 없이 16sp regular, white로 표시하고, 고정 362dp 폭 대신 `match_parent`와 좌우 `20dp` padding을 사용한다.
|
||||||
- 검증 기준:
|
- 검증 기준:
|
||||||
- 소개 섹션은 `addTextCard` 같은 어두운 카드 배경을 사용하지 않는다.
|
- 소개 섹션은 `addTextCard` 같은 어두운 카드 배경을 사용하지 않는다.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-06-15: Figma `296:14998`을 확인해 소개 섹션이 `SectionTitle(hasRightIcon=false)`와 카드 배경 없는 16sp regular white 본문 텍스트 구조임을 반영했다. RED로 `CreatorChannelHomeActivitySourceTest`에 소개 전용 layout/bind 계약을 추가해 기존 구현이 실패함을 확인했고, 구현 후 `item_creator_channel_home_introduce.xml`에서 공통 `ll_section_items`를 제거하고 `tv_introduce_body` 전용 bind로 변경했다. 후속 수정으로 본문 폭은 고정 `362dp`가 아니라 `match_parent`와 좌우 `@dimen/spacing_20` padding을 사용하도록 source 계약을 갱신했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeActivitySourceTest"`가 PASS했다.
|
||||||
|
|
||||||
- [ ] **Task 5R.11: 활동 섹션 재구성**
|
- [x] **Task 5R.11: 활동 섹션 재구성**
|
||||||
- 수정 예정:
|
- 수정 예정:
|
||||||
- `CreatorChannelHomeSectionAdapter.kt`
|
- `CreatorChannelHomeSectionAdapter.kt`
|
||||||
- `item_creator_channel_home_activity.xml`
|
- `item_creator_channel_home_activity.xml`
|
||||||
@@ -736,8 +738,10 @@
|
|||||||
- Figma에는 화보 row가 있으나 현재 API 응답에 화보 count가 없으므로 이번 범위에서는 표시하지 않는다.
|
- Figma에는 화보 row가 있으나 현재 API 응답에 화보 count가 없으므로 이번 범위에서는 표시하지 않는다.
|
||||||
- 검증 기준:
|
- 검증 기준:
|
||||||
- 활동 row는 `bg_round_corner_16_7_222222` 같은 row 배경을 사용하지 않는다.
|
- 활동 row는 `bg_round_corner_16_7_222222` 같은 row 배경을 사용하지 않는다.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-06-15: Figma `296:15001`을 확인해 활동 섹션이 `SectionTitle(hasRightIcon=false)`와 카드 배경 없는 label/value 16sp row 목록임을 반영했다. 화보 row는 현재 API 응답에 count가 없어 제외하고, 데뷔/라이브 총 진행 수/라이브 누적 진행 시간/라이브 누적 참여자/오디오/시리즈 6개 row만 전용 TextView id로 바인딩했다. 후속 수정으로 row container 폭은 고정 `362dp`가 아니라 `match_parent`와 좌우 `@dimen/spacing_20` padding을 사용하도록 source 계약을 갱신했다. RED로 `CreatorChannelHomeActivitySourceTest`에 활동 전용 layout/bind 계약을 추가해 기존 구현이 실패함을 확인했고, 구현 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeActivitySourceTest"`가 PASS했다.
|
||||||
|
|
||||||
- [ ] **Task 5R.12: SNS 섹션 재구성**
|
- [x] **Task 5R.12: SNS 섹션 재구성**
|
||||||
- 수정 예정:
|
- 수정 예정:
|
||||||
- `CreatorChannelHomeSectionAdapter.kt`
|
- `CreatorChannelHomeSectionAdapter.kt`
|
||||||
- `item_creator_channel_home_sns.xml`
|
- `item_creator_channel_home_sns.xml`
|
||||||
@@ -748,10 +752,14 @@
|
|||||||
- `sns` 매핑 결과가 empty이면 섹션을 표시하지 않는다.
|
- `sns` 매핑 결과가 empty이면 섹션을 표시하지 않는다.
|
||||||
- SNS 제목은 Figma처럼 18sp bold title 영역을 사용한다.
|
- SNS 제목은 Figma처럼 18sp bold title 영역을 사용한다.
|
||||||
- 아이콘 순서는 Instagram, YouTube, X, Kakao Open Chat, Fancimm을 유지한다.
|
- 아이콘 순서는 Instagram, YouTube, X, Kakao Open Chat, Fancimm을 유지한다.
|
||||||
- 각 아이콘은 52dp 원형 이미지, 16dp gap을 기준으로 표시한다.
|
- 각 아이콘은 디바이스 width가 402dp 이상이면 최대 52dp로 표시하고, 402dp 미만에서는 좌우 20dp padding과 16dp gap 4개를 제외한 남은 폭을 5개 아이콘에 균등 배분해 표시한다.
|
||||||
- URL은 기존 안전성 정책처럼 유효한 http/https URL만 사용하고, 열 수 있는 intent만 실행한다.
|
- URL은 기존 안전성 정책처럼 유효한 http/https URL만 사용하고, 열 수 있는 intent만 실행한다.
|
||||||
- 검증 기준:
|
- 검증 기준:
|
||||||
- SNS는 adapter 내부 계산/조립이 아니라 `SNS` 대응 View/layout으로 렌더링된다. 단, 작은 화면 52dp 축소 정책은 기존 요구를 유지할 수 있다.
|
- SNS는 adapter 내부 계산/조립이 아니라 `SNS` 대응 View/layout으로 렌더링된다. 단, 작은 화면에서는 5개 아이콘이 잘리지 않도록 실제 가용 폭 기준으로 크기를 축소한다.
|
||||||
|
- 검증 기록:
|
||||||
|
- 2026-06-15: Figma `296:15022`를 확인해 SNS 섹션이 18sp bold title과 최대 52dp 원형 icon row, 16dp gap 구조임을 반영했다. URL 매핑 순서와 http/https 유효 URL 필터, `resolveActivity()` 확인 후 실행하는 안전 정책은 유지했다. RED로 `CreatorChannelHomeActivitySourceTest`에 SNS 전용 layout/icon row 계약을 추가해 기존 구현이 실패함을 확인했고, 구현 후 `item_creator_channel_home_sns.xml`과 `item_creator_channel_home_sns_icon.xml` 기반 bind로 변경했다. 후속 수정으로 SNS row는 `match_parent`와 좌우 `@dimen/spacing_20` padding을 사용하고, 아이콘 크기는 402dp 이상 52dp, 402dp 미만에서는 `(deviceWidth - 40dp padding - 64dp gaps) / 5`로 계산해 5개 아이콘이 작은 화면에서 잘리지 않도록 했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeActivitySourceTest"`가 PASS했다.
|
||||||
|
- 2026-06-15: 코드 리뷰에서 `roundToInt()` 반올림으로 `screenWidthDp=322` 같은 경계값에서 5개 아이콘 총합이 가용 폭을 초과할 수 있음을 확인했다. SNS 아이콘 크기 계산을 `minOf(52, (width - 40 - 64).coerceAtLeast(0) / 5)` 정수 나눗셈으로 변경하고, 322dp 경계값 source test를 추가했다.
|
||||||
|
- 2026-06-15: reviewer gate에서 클릭 가능한 SNS 아이콘이 `contentDescription` 없이 렌더링되는 접근성 blocking issue를 확인했다. `CreatorChannelSnsUiItem.label`을 `button.contentDescription`에 연결하고, `item_creator_channel_home_sns_icon.xml`의 `@null` contentDescription을 제거했으며 source 계약을 추가했다.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user