[GMSS-203] 채팅방 상세 화면 UI 및 토큰 사용량 조회 기능 추가 - #44
Open
seunghee17 wants to merge 45 commits into
Open
Conversation
# 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
force-pushed
the
feature/conversation-room-detail-ui
branch
from
August 17, 2026 21:19
2985a26 to
8866d25
Compare
- 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
marked this pull request as ready for review
August 18, 2026 03:59
seunghee17
marked this pull request as draft
August 18, 2026 10:40
11 tasks
…on-room-detail-ui # Conflicts: # feature/chat/src/main/java/com/gamss/android/feature/chat/component/ChattingListTopBar.kt
- showScrollToBottomButton을 derivedStateOf로 감싸 스크롤 프레임마다 상위 재구성되던 문제 해결 - MessageBubble에 리스트 전체 대신 replyQuote만 넘겨 메시지 추가 시 화면에 보이는 다른 버블들까지 전부 재구성되던 문제 해결
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로 매핑하던 것을, 보이는 범위의 첫/마지막 인덱스 비교로 변경해 불필요한 할당 제거
…on-room-detail-ui
- feature:archive(PR #43)가 core.common.util.KoreanTimeZone을 참조하는데 실제 정의가 어디에도 없어 컴파일이 깨져 있었다. develop 자체의 CI는 캐시 때문에 거짓으로 통과된 것으로 보인다. - ZoneId.of("Asia/Seoul") 상수로 정의해 추가 - 겸사겸사 merge 과정에서 생긴 ChatScrollState.kt의 연속 빈 줄 detekt 이슈 정리
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
작업 개요
채팅방 상세 화면(ChatRoomScreen)의 UI/인터랙션을 구성하고, 대화 상세 조회 API 연동·토큰 사용량 조회 기능을 추가했습니다.
작업 유형
변경 사항
showScrollToBottomButton을derivedStateOf로 감싸 스크롤 프레임마다 상위가 재구성되던 문제,MessageBubble에 메시지 리스트 전체 대신 계산된replyQuote만 넘겨 메시지 추가 시 화면에 보이는 다른 말풍선까지 전부 재구성되던 문제 해결관련 이슈
관련 작업 (Notion)
스크린샷
Screen_recording_20260819_025948.mp4
체크리스트
develop으로 설정되어 있다compileDebugKotlin,detekt,test)feat:,fix:등)을 따른다리뷰 요청 사항
ConversationService.getConversation(GET /api/conversations/{conversationId}→ConversationDetailResponse): 대화 상세를 단건으로 조회하는 새 엔드포인트입니다. 기존getMessages(/api/conversations/{conversationId}/messages)를 대체하는 방향이라 스펙이 다르면 런타임에서 바로 실패합니다.ChatRoomViewModel의 토큰 사용량 갱신 흐름: 사용자가 직접 요청한 조회(팝업 열기·재시도 버튼)는 실패 시tokenUsagePercent를null로 반영해 재시도 UI를 띄우고, 전송 후 백그라운드 갱신(onSend)은 실패해도 이전 값을 유지하도록 일부러 다르게 처리했습니다. 이 구분이 UX상 맞는 방향인지 봐주세요.