Files
sodalive-android/docs/20260225_채널후원영역및전체보기구현.md

6.4 KiB

20260225 채널 후원 영역 및 전체보기 구현

작업 목표

  • 크리에이터 채널에 채널 후원 섹션을 추가한다.
  • 채널 후원하기 UI는 라이브 후원하기 UI와 동일한 흐름/스타일을 따른다.
  • 채널 후원 전체보기 페이지를 별도로 추가한다.
  • API 연동은 /explorer/profile/channel-donation의 POST/GET 요구사항을 반영한다.

구현 체크리스트

  • 기존 라이브 후원 다이얼로그/아이콘/문구 스타일 재사용 지점 확인
  • ExplorerApi/ExplorerRepository에 채널 후원 POST/GET API 추가
  • UserProfileViewModel에 채널 후원 조회/후원하기 액션 추가
  • kr.co.vividnext.sodalive.explorer.profile.channel_donation 패키지에 전체보기 Activity/ViewModel/Adapter 생성
  • 크리에이터 채널(UserProfileActivity)에 채널 후원 섹션 UI 추가
  • 섹션 상단 제목 - 전체보기 및 총 개수 노출
  • 가로 아이템 리스트 폭을 줄여 좌/우 아이템 일부가 보이도록 구성
  • 채널 후원하기 텍스트 버튼 스타일 적용(배경 #525252, radius 16dp, 흰색 텍스트, 선물 아이콘)
  • 아이템 UI 적용(프로필 이미지, 닉네임, 시간, 내용)
  • createdAt(UTC)을 기기 타임존으로 변환해 OO분전/OO시간전/OO일전 표시
  • 내용 텍스트에서 OO캔 색상 #FDCA2F, 나머지 #CFD8DC, 글자 크기 16sp 적용
  • 문자열/리소스 추가 및 기존 다국어 리소스 반영
  • LSP 진단, 테스트/빌드 실행 및 결과 확인

검증 기록

  • 2026-02-25

    • 무엇/왜/어떻게: 채널 후원 API(POST/GET) 연동, 프로필 채널 후원 섹션 및 후원 버튼(라이브 후원 다이얼로그 재사용), 채널 후원 전체보기 페이지를 추가하고 아이템 시간/문구 스타일을 요구사항대로 반영했다.
    • 실행 명령: ./gradlew :app:testDebugUnitTest
    • 결과: 성공(BUILD SUCCESSFUL), 신규 변경으로 인한 테스트 실패 없음.
    • 실행 명령: ./gradlew :app:assembleDebug
    • 결과: 성공(BUILD SUCCESSFUL), 디버그 빌드 정상 완료.
    • 참고: 현재 실행 환경의 LSP 도구는 .kt 확장 LSP 서버가 구성되어 있지 않아 LSP 진단 대신 Gradle 컴파일/테스트로 정합성을 검증했다.
  • 2026-02-25 (후속 요구사항 반영)

    • 무엇/왜/어떻게: 채널 후원 섹션 위치를 최신 콘텐츠 아래로 이동하고, 프로필 페이지는 GetCreatorProfileResponse.channelDonationList만 사용하도록 변경했다. 후원 0건 시 빈 문구 노출/전체보기 숨김, 프로필 페이지 개수 제거, 비밀후원 전달, 채널 후원 메시지 100자 제한, OO캔을 후원했습니다. 문구 강조, 라이브룸 채팅 후원과 동일한 배경색 규칙을 적용했다.
    • 실행 명령: ./gradlew --no-daemon :app:assembleDebug
    • 결과: 성공(BUILD SUCCESSFUL), 디버그 빌드 정상 완료.
    • 실행 명령: ./gradlew --no-daemon :app:testDebugUnitTest
    • 결과: 성공(BUILD SUCCESSFUL), 단위 테스트 통과.
    • 참고: 일반 daemon 모드에서 Kotlin incremental cache 충돌로 실패가 발생해 --no-daemon으로 재검증했다.
  • 2026-02-25 (힌트 최대 글자수/국제화 및 중복 문구 수정)

    • 무엇/왜/어떻게: 채널 후원 UI에서는 메시지 힌트를 최대 100자로 표시하도록 변경하고(라이브는 기존 1000 유지), 힌트 문자열을 %d 포맷 기반 국제화 리소스로 분리했다. 또한 채널 후원 리스트 문구는 서버 message 원문을 그대로 표시하도록 바꿔 OO캔을 후원했습니다. 중복이 생기지 않게 수정하고, 원문 안의 OO캔 구간만 색상 강조하도록 반영했다.
    • 실행 명령: ./gradlew --no-daemon :app:testDebugUnitTest
    • 결과: 성공(BUILD SUCCESSFUL), 단위 테스트 통과.
    • 실행 명령: ./gradlew --no-daemon :app:assembleDebug
    • 결과: 성공(BUILD SUCCESSFUL), 디버그 빌드 정상 완료.
    • 참고: 1회 실행에서 리소스 패키징 일시 오류(NoSuchFileException)가 있었으나 재실행 시 정상 통과했다.
  • 2026-02-25 (채널 후원 아이템 길이 제한/전체보기 터치 동작)

    • 무엇/왜/어떻게: 채널 후원 아이템에서 긴 메시지로 인한 UI 깨짐을 막기 위해 message를 최대 30자 + ...로 표시하도록 변경했다. 크리에이터 채널 페이지 아이템에는 터치 이벤트를 추가하지 않았고, 채널 후원 전체보기 페이지 아이템은 터치 시 전체 message를 다이얼로그로 확인할 수 있게 적용했다.
    • 실행 명령: ./gradlew --no-daemon :app:assembleDebug
    • 결과: 성공(BUILD SUCCESSFUL), 디버그 빌드 정상 완료.
    • 실행 명령: ./gradlew --no-daemon :app:testDebugUnitTest
    • 결과: 성공(BUILD SUCCESSFUL), 단위 테스트 통과.
    • 참고: 테스트/빌드를 병렬 실행한 1회에서 매니페스트 입력 파일 검증 오류가 발생해 테스트를 단독 재실행하여 통과 확인했다.
  • 2026-02-25 (전체보기 아이템 확장 방식 변경)

    • 무엇/왜/어떻게: 채널 후원 전체 리스트 페이지에서 말줄임표가 붙은 텍스트를 터치했을 때 AlertDialog를 띄우지 않고, 해당 아이템 내부 텍스트를 전체 내용으로 확장해서 표시하도록 변경했다. 크리에이터 채널 페이지는 기존처럼 터치 이벤트를 추가하지 않았다.
    • 실행 명령: ./gradlew --no-daemon :app:testDebugUnitTest
    • 결과: 성공(BUILD SUCCESSFUL), 단위 테스트 통과.
    • 실행 명령: ./gradlew --no-daemon :app:assembleDebug
    • 결과: 성공(BUILD SUCCESSFUL), 디버그 빌드 정상 완료.
    • 참고: 테스트/빌드 병렬 실행 시 1회 manifest 중간 산출물 누락 오류가 발생해 각각 재실행하여 최종 성공을 확인했다.
  • 2026-02-25 (채널 후원 시간 표시 보정)

    • 무엇/왜/어떻게: 채널 후원 아이템의 상대 시간 표시가 커뮤니티 포스트와 다르게 계산되던 문제를 수정하기 위해 GetCommunityPostListResponse.relativeTimeText와 동일한 계산 규칙(방금 전/분/시간/일/개월/년, UTC 파싱 및 로컬 타임존 기준 계산)으로 동기화했다.
    • 실행 명령: ./gradlew --no-daemon :app:testDebugUnitTest
    • 결과: 성공(BUILD SUCCESSFUL), 단위 테스트 통과.
    • 실행 명령: ./gradlew --no-daemon :app:assembleDebug
    • 결과: 성공(BUILD SUCCESSFUL), 디버그 빌드 정상 완료.