Skip to content

[GMSS-203] 채팅방 상세 화면 UI 및 토큰 사용량 조회 기능 추가 - #44

Open
seunghee17 wants to merge 45 commits into
developfrom
feature/conversation-room-detail-ui
Open

[GMSS-203] 채팅방 상세 화면 UI 및 토큰 사용량 조회 기능 추가#44
seunghee17 wants to merge 45 commits into
developfrom
feature/conversation-room-detail-ui

Conversation

@seunghee17

@seunghee17 seunghee17 commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

작업 개요

채팅방 상세 화면(ChatRoomScreen)의 UI/인터랙션을 구성하고, 대화 상세 조회 API 연동·토큰 사용량 조회 기능을 추가했습니다.

작업 유형

  • feat: 새 기능
  • fix: 버그 수정
  • refactor: 리팩토링 (동작 변경 없음)
  • build: 빌드/의존성 설정
  • chore: 기타 (문서, 설정 등)
  • test: 테스트 추가/수정

변경 사항

  • 대화방 입력창(GamssInputBar), TopNavigation 다중 아이콘, 위험신호 다이얼로그 등 기본 UI 구성
  • 대화 상세 조회 API 연동 및 대화 생성일 표시
  • 채팅 메시지 송수신 애니메이션 적용 및 자연스럽게 개선 (slide+fade를 spring 하나로 통일)
  • 메시지 전송 중 입력창 포커스·키보드 유지, 새 메시지 토스트, 맨 아래로 스크롤 버튼, 로딩 말풍선 타이핑 로티 애니메이션 추가
  • 토큰 사용량 조회 toggle/tooltip 추가 및 조회 실패 시 재시도 UI 구성
  • 채팅 버블 배경(chatmessage_stroke)의 과다 pathData(5,000개 이상 draw command)로 인한 크래시를 vector drawable → 9-patch PNG 교체로 수정
  • reveal 캐시 경로에서도 채팅방 title(생성 일시)이 서버 재조회 없이 즉시 채워지도록 수정
  • 스크롤이 최하단일 때 상대 메시지가 도착하면 자동으로 바닥까지 따라 스크롤 (위로 스크롤 중이었다면 기존처럼 새 메시지 토스트로만 안내)
  • "입력중" 표시가 내 메시지 전송 중(서버 왕복 동안)에도 잘못 뜨던 문제 수정 — 실제 상대 답장이 pending일 때만 표시
  • "입력중" 로딩 버블에 다음에 도착할 답장의 캐릭터 아바타·이름을 pendingComments 기준으로 미리 표시
  • 메시지 전송·스크롤 애니메이션 성능 개선 — showScrollToBottomButtonderivedStateOf로 감싸 스크롤 프레임마다 상위가 재구성되던 문제, MessageBubble에 메시지 리스트 전체 대신 계산된 replyQuote만 넘겨 메시지 추가 시 화면에 보이는 다른 말풍선까지 전부 재구성되던 문제 해결

관련 이슈

  • Closes #

관련 작업 (Notion)

스크린샷

Screen_recording_20260819_025948.mp4

체크리스트

  • base 브랜치가 develop으로 설정되어 있다
  • 로컬에서 컴파일·detekt·단위 테스트를 확인했다 (compileDebugKotlin, detekt, test)
  • 커밋 메시지가 컨벤션(feat:, fix: 등)을 따른다
  • 불필요한 로그/주석/디버그 코드를 제거했다
  • 리뷰어가 이해할 수 있도록 설명을 작성했다

리뷰 요청 사항

  • ConversationService.getConversation (GET /api/conversations/{conversationId}ConversationDetailResponse): 대화 상세를 단건으로 조회하는 새 엔드포인트입니다. 기존 getMessages(/api/conversations/{conversationId}/messages)를 대체하는 방향이라 스펙이 다르면 런타임에서 바로 실패합니다.
  • ChatRoomViewModel의 토큰 사용량 갱신 흐름: 사용자가 직접 요청한 조회(팝업 열기·재시도 버튼)는 실패 시 tokenUsagePercentnull로 반영해 재시도 UI를 띄우고, 전송 후 백그라운드 갱신(onSend)은 실패해도 이전 값을 유지하도록 일부러 다르게 처리했습니다. 이 구분이 UX상 맞는 방향인지 봐주세요.
  • 현재 채팅방 상세의 Figma와 사양이 다른 부분이 존재합니다. 이후 PR에서 ui 추가 개발 예정입니다. 참고부탁드립니다.

@seunghee17 seunghee17 changed the title feat: 채팅방 상세 화면 UI 및 토큰 사용량 조회 기능 추가 [GMSS-203] 채팅방 상세 화면 UI 및 토큰 사용량 조회 기능 추가 Aug 17, 2026
# Conflicts:
#	core/designsystem/src/main/res/drawable/ic_close.xml
 - 대화 정보와 메시지를 포함하는 상세 응답 모델 추가
 - 대화 생성 시각을 채팅방 상태까지 전달
 - 채팅방 상단에 생성 날짜 표시
 - 날짜 포맷 로직을 공통 유틸로 통합
- slide 와 fade 가 서로 다른 duration 의 tween 으로 따로 끝나며 끊겨 보이던 문제를 spring 스펙 하나로 통일해 하나의 유려한 움직임으로 이어지도록 수정
- 전송 중에 입력창을 비활성화하던 조건을 제거
- 전송 중에도 입력창 포커스와 키보드 유지
- 새 메시지 토스트와 맨 아래로 스크롤 버튼 추가
- 채팅 로딩 말풍선에 타이핑 로티 애니메이션 추가
- 토큰 사용량 조회용 toggle ui 생성
- 토큰 사용량 조회 실패 시 재시도 UI가 뜨도록 toggle·retry 흐름 정리

# Conflicts:
#	feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt
- chatmessage_stroke의 5,000개 이상 draw command를 가진 vector pathData를 9-patch PNG로 교체
- painterResource()가 9-patch(NinePatchDrawable)를 지원하지 않아 발생하던 크래시를, Drawable을 직접 그리는 rememberNinePatchPainter로 우회
- 테두리(chatmessage_stroke)와 동일한 손그림 윤곽에서 배경 채우기(chatmessage_fill)를 추출해, 각진 배경이 wobble 테두리 밖으로 삐져나오던 문제 수정
- ChatBubbleSurface 주석 정리
@seunghee17
seunghee17 force-pushed the feature/conversation-room-detail-ui branch from 2985a26 to 8866d25 Compare August 17, 2026 21:19
- PendingConversationReveal.consume()이 SentMessage 대신 PendingReveal
  (sent + createdAt)을 반환하도록 확장
- createdAt은 서버 값이 아니라 save() 호출 시각(대화 생성 시점)을 사용
- ChatRoomViewModel의 pending-reveal 분기에서 conversationCreatedAt을
  즉시 세팅해, 서버 재조회 없이도 top bar title이 바로 표시되도록 수정
- GamssTopNavigationIconAction에 isLoading 필드를 추가해 로딩으로 바꾸기"를 지원하도록 확장
- ChatRoomScreen에서 endFlow.isBusy일 때 CreateCard 아이콘 자리를 비우지 않고 isLoading = true로 교체 — 카드 생성 중임을 다시 시각적으로 알 수 있도록 수정
- ChattingListTopBar에서 !isSelectionMode일 때만 Search 아이콘을 rightActions에 포함하도록 원래 가드 복원
- newMessageToast를 지우는 조건을 "토스트가 가리키는 메시지가 화면에 보이는지(visibleItemsInfo)"로 변경
- 뒤에 로딩 버블 등 콘텐츠가 더 있어 바닥에 못 닿아도, 그 메시지 하나만 보이면 충분히 지워지도록 함
…on-room-detail-ui

# Conflicts:
#	feature/chat/src/main/java/com/gamss/android/feature/chat/ChatRoomScreen.kt
@seunghee17
seunghee17 marked this pull request as ready for review August 18, 2026 03:59
@seunghee17
seunghee17 marked this pull request as draft August 18, 2026 10:40
…on-room-detail-ui

# Conflicts:
#	feature/chat/src/main/java/com/gamss/android/feature/chat/component/ChattingListTopBar.kt
- showScrollToBottomButton을 derivedStateOf로 감싸 스크롤 프레임마다 상위 재구성되던 문제 해결
- MessageBubble에 리스트 전체 대신 replyQuote만 넘겨 메시지 추가 시 화면에 보이는 다른 버블들까지 전부 재구성되던 문제 해결
@seunghee17
seunghee17 marked this pull request as ready for review August 18, 2026 17:39
…on-room-detail-ui

# Conflicts:
#	core/common/src/main/java/com/gamss/android/core/common/util/Date.kt
- wasSending 추적을 rememberChatScrollState 밖에서 ChatScrollState 내부로 이동, handleSendingChanged가 전환 감지와 처리를 함께 캡슐화하도록 정리
- clearToastIfMessageVisible을 구동하는 snapshotFlow가 스크롤 중 매 프레임 visibleItemsInfo를 새 List로 매핑하던 것을, 보이는 범위의 첫/마지막 인덱스 비교로 변경해 불필요한 할당 제거
- feature:archive(PR #43)가 core.common.util.KoreanTimeZone을 참조하는데
  실제 정의가 어디에도 없어 컴파일이 깨져 있었다. develop 자체의 CI는
  캐시 때문에 거짓으로 통과된 것으로 보인다.
- ZoneId.of("Asia/Seoul") 상수로 정의해 추가
- 겸사겸사 merge 과정에서 생긴 ChatScrollState.kt의 연속 빈 줄 detekt
  이슈 정리
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant