Files
sodalive-android/docs/20260225_크리에이터상세정보다이얼로그구현.md

7.8 KiB

크리에이터 상세정보 다이얼로그 구현 계획

구현 체크리스트

  • 1단계: 크리에이터 상세정보 다이얼로그 요구사항 및 기존 구현 패턴을 확인한다.
    • 대상 파일: app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt, app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/detail/GetCreatorDetailResponse.kt, app/src/main/java/kr/co/vividnext/sodalive/dialog/MemberProfileDialog.kt, app/src/main/res/values/strings.xml
  • 2단계: kr.co.vividnext.sodalive.explorer.profile.detail 패키지에 크리에이터 상세정보 Custom Dialog UI/로직을 구현한다.
    • 대상 파일: app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/detail/*.kt, app/src/main/res/layout/*.xml, app/src/main/res/drawable/*.xml
  • 3단계: UserProfileActivity에서 tvNotificationCount 클릭 시 상세정보 다이얼로그가 표시되도록 연결한다.
    • 대상 파일: app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt, app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileViewModel.kt, app/src/main/java/kr/co/vividnext/sodalive/explorer/ExplorerApi.kt, app/src/main/java/kr/co/vividnext/sodalive/explorer/ExplorerRepository.kt
  • 4단계: 팔로워 문구를 팔로워 OO명 · 상세정보 > 형태로 국제화 문자열에 반영한다.
    • 대상 파일: app/src/main/res/values/strings.xml, app/src/main/res/values-en/strings.xml, app/src/main/res/values-ja/strings.xml
  • 5단계: 진단/테스트/빌드 검증을 수행하고 문서 하단 검증 기록에 누적한다.
    • 대상 명령: ./gradlew :app:testDebugUnitTest, ./gradlew :app:assembleDebug

작업 메모

  • @docs/20260224_AGENTS문서정비.md의 제목/섹션 구조를 기준 포맷으로 채택한다.
  • 구현 중 범위 변경 시 체크리스트를 먼저 갱신한 뒤 코드 변경을 진행한다.
  • SNS 아이콘/정렬 정책 추가 반영: ic_sns_* 아이콘 사용, 노출 순서 유튜브 -> 인스타그램 -> 오픈채팅 -> fancimm -> x 고정.

검증 기록

1) 계획 문서 포맷 정렬

  • 무엇: 계획 문서를 제목 -> 구현 체크리스트 -> 작업 메모 -> 검증 기록 구조로 정렬.
  • 왜: 초기 기준 문서(docs/20260224_AGENTS문서정비.md)와 동일한 작성 규칙을 유지하기 위해.
  • 어떻게:
    • docs/20260224_AGENTS문서정비.md의 헤더 구조를 확인.
    • docs/20260225_크리에이터상세정보다이얼로그구현.md에 제목/체크리스트/메모 섹션을 추가 및 정리.
  • 결과: 계획 문서 형식이 기준 문서와 동일한 섹션 구조로 정렬됨.

2) 상세정보 다이얼로그 및 문자열 반영

  • 무엇: 크리에이터 상세정보 다이얼로그 구현 및 tvNotificationCount 연결, 팔로워 문구 국제화 반영.
  • 왜: 팔로워 수 클릭 시 상세정보 노출 UX와 다국어 문구 요구사항을 충족하기 위해.
  • 어떻게:
    • CreatorDetailDialog/dialog_creator_detail.xml/ic_x_white.xml 생성.
    • ExplorerApi/ExplorerRepository/UserProfileViewModel에 크리에이터 상세 API 호출 흐름 추가.
    • UserProfileActivity에서 tvNotificationCount 클릭 시 상세 다이얼로그 표시 연결.
    • values/strings.xml, values-en/strings.xml, values-ja/strings.xml의 팔로워 문구를 ... · ... > 형태로 변경하고 상세정보 타이틀 문자열 추가.
  • 결과: 요구한 다이얼로그 표시 흐름과 국제화 문자열 반영 완료.

3) 진단/테스트/빌드 검증

  • 무엇: 변경 파일 진단 및 단위 테스트/디버그 빌드 수행.
  • 왜: 구현 반영 후 컴파일/리소스/테스트 안정성을 확인하기 위해.
  • 어떻게:
    • lsp_diagnostics를 수정한 Kotlin/XML 파일에 실행 시도.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 실행.
  • 결과:
    • LSP: 현재 환경에서 Kotlin/XML LSP 미설정(No LSP server configured for extension: .kt/.xml).
    • Gradle: BUILD SUCCESSFUL (unit test + debug assemble 통과).

4) 추가 수정 후 재검증

  • 무엇: SNS 항목 확장 반영(fancimmUrl, websiteUrl, blogUrl) 이후 재검증.
  • 왜: 마지막 코드 변경 이후에도 빌드/테스트가 정상인지 확인하기 위해.
  • 어떻게:
    • lsp_diagnosticsCreatorDetailDialog.kt 진단 실행 시도.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 재실행.
  • 결과:
    • LSP: Kotlin LSP 미설정(No LSP server configured for extension: .kt).
    • Gradle: BUILD SUCCESSFUL.

5) 최종 변경 반영 후 검증

  • 무엇: SNS 아이템 노출 필드(오픈채팅/인스타그램/유튜브/팬심/X/웹사이트/블로그) 최종 반영 후 재검증.
  • 왜: 마지막 수정 이후에도 테스트/빌드 통과 상태를 보장하기 위해.
  • 어떻게:
    • lsp_diagnosticsCreatorDetailDialog.kt 진단 실행 시도.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 실행.
  • 결과:
    • LSP: Kotlin LSP 미설정(No LSP server configured for extension: .kt).
    • Gradle: BUILD SUCCESSFUL.

6) SNS 순서/아이콘 정책 반영 후 재검증

  • 무엇: SNS 노출 순서를 유튜브 -> 인스타그램 -> 오픈채팅 -> fancimm -> x로 고정하고 ic_sns_* 아이콘 사용으로 통일.
  • 왜: 추가 요청된 UI 정책을 정확히 반영하기 위해.
  • 어떻게:
    • CreatorDetailDialog.kt의 SNS 리스트 순서와 아이콘 리소스를 ic_sns_youtube, ic_sns_instagram, ic_sns_kakao, ic_sns_fancimm, ic_sns_x로 수정.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 실행.
  • 결과: BUILD SUCCESSFUL.

7) 프로필 이미지 1:1 전체 폭 반영 후 재검증

  • 무엇: 상세 다이얼로그 프로필 이미지를 다이얼로그 가로 전체 폭으로 확장하고 1:1 비율로 고정.
  • 왜: 추가 요청된 UI 규격(가로 full + 정사각형 비율)을 충족하기 위해.
  • 어떻게:
    • dialog_creator_detail.xml에서 이미지 블록을 상단 full-width ConstraintLayout으로 분리.
    • ImageView0dp x 0dp + app:layout_constraintDimensionRatio="1:1"로 설정해 가로 기준 정사각형을 강제.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 실행.
  • 결과:
    • LSP: XML LSP 미설정(No LSP server configured for extension: .xml).
    • Gradle: BUILD SUCCESSFUL.

8) 최근 2회 수정 롤백 및 검증

  • 무엇: 직전 2회 수정(라운드/패딩/스크롤 구조 변경, 긴급 표시 수정)을 롤백.
  • 왜: 요청에 따라 최근 2회 수정 내용을 원복하기 위해.
  • 어떻게:
    • dialog_creator_detail.xml을 롤백 전 구조(루트 wrap_content, 스크롤 wrap_content, 이미지 0dp/0dp + ratio 1:1)로 복원.
    • CreatorDetailDialog.kt를 롤백 전 상태(CircleCropTransformation, 다이얼로그 높이 WRAP_CONTENT, ivProfile.post 제거)로 복원.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 실행.
  • 결과:
    • LSP: Kotlin/XML LSP 미설정(No LSP server configured for extension: .kt/.xml).
    • Gradle: BUILD SUCCESSFUL.

9) 라이브 누적 시간 섹션 추가

  • 무엇: 라이브 총 횟수 아래에 동일 UI 패턴의 라이브 누적 시간 섹션을 추가하고 liveTime 값을 표시.
  • 왜: 추가 요청된 정보 항목을 동일한 상세정보 구조로 노출하기 위해.
  • 어떻게:
    • dialog_creator_detail.xmlll_section_live_time, tv_live_time_title, tv_live_time_value 추가.
    • CreatorDetailDialog.kt에서 detail.activitySummary.liveTimemoneyFormat()으로 바인딩.
    • values/strings.xml, values-en/strings.xml, values-ja/strings.xmlscreen_creator_detail_live_time 문자열 추가.
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug 실행.
  • 결과:
    • LSP: Kotlin/XML LSP 미설정(No LSP server configured for extension: .kt/.xml).
    • Gradle: BUILD SUCCESSFUL.