Commit Graph

919 Commits

Author SHA1 Message Date
5c78c567ca fix(chat): 대화 초기화 성공 시 로컬 데이터 삭제 및 로딩 다이얼로그 적용
- ChatMessageDao: deleteMessagesByRoomId(roomId) 추가
- ChatRepository: clearMessagesByRoom(roomId) 추가
- ChatRoomActivity:
  - clearLocalPrefsForRoom(roomId) 구현
  - reset 플로우에 Prefs/DB 삭제 체인 연결
  - onResetChatRequested()에서 LoadingDialog 표시 및 doFinally로 닫힘 보장
2025-08-28 00:23:14 +09:00
e3bcc6d3a6 사용하지 않는 함수 삭제 2025-08-27 16:50:54 +09:00
05e8874d81 fix(chat): 대화 초기화 성공 시 방별 로컬 데이터(배경/공지/메시지) 삭제 처리
- ChatMessageDao: deleteMessagesByRoomId(roomId) 추가
- ChatRepository: clearMessagesByRoom(roomId) 추가
- ChatRoomActivity: clearLocalPrefsForRoom(roomId) 구현 및 reset 플로우에 Prefs/DB 삭제 체인 연결
- 요구사항: 대화 초기화 API 성공 시 해당 방의 배경 데이터와 로컬 메시지 등 모든 관련 데이터 제거
2025-08-27 16:49:27 +09:00
88e3ae7b51 fix(chat): 배경 선택 다이얼로그에서 초기 선택 복원이 되지 않는 문제 수정
- 선택 상태를 URL 비교에서 이미지 ID 우선 방식으로 변경
- URL만 저장된 기존 데이터에 대해 목록 로드 후 URL→ID 마이그레이션 추가
- SharedPreferences에 chat_bg_image_id_room_{roomId} 키 도입(호환 위해 URL 키 유지)
2025-08-27 15:53:43 +09:00
02df0b6774 feat(chat): 메시지 괄호 지문 색상을 회색으로 변경 2025-08-27 14:10:30 +09:00
a941d0bfab feat(chat): 채팅방 배경 사진 변경 기능 추가
- ChatRoomMoreDialog에서 배경 사진 변경 Picker 연결
- my-list API 추가 및 Repository 위임 추가
- 배경 선택 Dialog(3열 Grid, 4:5 비율) 및 선택 상태 UI 구현
- SharedPreferences로 roomId별 배경 URL 저장/로드
- ChatRoomActivity에 배경 저장/적용 헬퍼 추가 및 기본 프로필 적용 로직 구현
2025-08-27 02:37:20 +09:00
2e837bec5d feat(chat-quota): 쿼터 연동 및 카운트 다운 / 쿼터 구매 UX 개선(+5초 표시 보정)
- TalkApi: /api/chat/quota/me, /api/chat/quota/purchase 엔드포인트 추가
- Repository: getChatQuotaStatus(), purchaseChatQuota() 추가, sendMessage 응답 타입을 SendChatMessageResponse로 전환
- Model: ChatQuotaStatusResponse/ChatQuotaPurchaseRequest 추가, SendChatMessageResponse/ChatRoomEnterResponse 기본값 추가
- UI(Adapter): QuotaNotice 뷰타입/레이아웃 추가, 안정 ID/부분 갱신(payload) 적용, Change 애니메이션 비활성화로 깜빡임 최소화
- UI(Activity): 쿼터 0 시 입력창 숨김 + 안내 노출, 00:00:00 도달 시 /quota/me 조회
- 카운트다운 계산: epoch 기반 남은 시간 계산 + 표시용 +5초(DISPLAY_FUDGE_MS) 가산
- 구매 성공 시 로컬 30캔 차감 및 헤더 배지 즉시 갱신
2025-08-26 21:36:31 +09:00
9b1a83bd69 feat(chat-room): 대화 설정 다이얼로그 구현 및 채팅방 초기화 API 연동
- MoreDialog UI 구성 및 동작(배경 스위치/변경, 대화 초기화, 신고하기)
- 방별 배경 표시 SharedPreferences 저장 및 화면 반영
- TalkApi에 resetChatRoom 엔드포인트 추가, Repository 메서드 추가
- ChatRoomActivity와 다이얼로그 연동, 초기화 플로우 구현
2025-08-26 13:37:58 +09:00
b3553f80c6 feat(chat): 채팅방 상단 캔 배지 및 더보기 전체화면 다이얼로그 추가
- 헤더 우측에 캔 배지(tv_can_badge)와 더보기(iv_more) 추가
- 캔 배지 스타일 적용(배경 #263238, 텍스트 white, v5/h8 패딩, can 아이콘)
- 더보기 클릭 시 전체화면 다이얼로그 표시(플레이스홀더 UI)
2025-08-26 12:11:43 +09:00
5d76ff1590 feat(chat): AI 유료/이미지 메시지 및 구매 플로우 추가
- ServerChatMessage/ChatMessage에 messageType/imageUrl/price/hasAccess 필드 반영
- TalkApi/Repository: 유료 메시지 구매 API 연동 및 성공 시 로컬 DB 반영
- ChatRoomActivity: 구매 팝업 SodaDialog 적용(취소/잠금해제) 및 구매 성공 시 메시지 교체
- ChatMessageAdapter: 이미지 렌더링(라운드 10dp), 유료 오버레이(가격+"눌러서 잠금해제") 처리,
  구매/캐러셀 오픈 콜백 추가
- 구매된 이미지 클릭 시 전체화면 캐러셀 지원
- item_chat_ai_message.xml: 메시지 UI 최대 90% 폭, 시간 텍스트 배치 개선, 이미지 4:5 비율 적용
- 그룹 메시지 간 간격 절반 적용(ItemDecoration)
- Room DB v2 마이그레이션: messageType/imageUrl/price/hasAccess 컬럼 추가로 재입장 시 표시 문제 해결

왜:
- 유료/이미지 메시지 기능 제공 및 일관된 구매 경험 필요
- 재입장 시 이미지/유료 정보 누락 문제(DB 정합) 해결
- 시간 잘림/배치 문제와 그룹 간격 시인성 개선
2025-08-25 17:22:56 +09:00
6c57c5a98a feat(character-gallery): 구매 이미지 전체화면 Carousel 뷰어 추가
구매된 이미지를 탭하면 전체화면 DialogFragment로 열리고,
ViewPager2 기반 Carousel로 좌우 슬라이딩 탐색이 가능하도록 구현.
2025-08-23 01:48:57 +09:00
770c4179a3 fix(gallery): 구매 다이얼로그를 AlertDialog에서 SodaDialog로 교체
디자인 일관성 및 공통 컴포넌트 적용을 위해 갤러리 탭의 구매 확인 다이얼로그에
SodaDialog를 사용하도록 변경
2025-08-22 22:17:31 +09:00
9164942395 feat(gallery): 로딩 다이얼로그 표시 및 이미지 캐싱 적용
Fragment에서 isLoading에 따라 Loading Dialog를 표시/해제.
Glide에 디스크 캐싱 적용으로 스크롤 성능 개선.
2025-08-22 22:12:36 +09:00
e3ed816fb3 feat(gallery): 캐릭터 이미지 구매 기능 추가
갤러리 아이템의 구매 버튼 클릭 시 확인 다이얼로그를 표시하고,
확인 시 /api/chat/character/image/purchase API를 호출하여 이미지 URL을 갱신.
구매 성공 시 isOwned=true 처리 및 보유 비율/개수 업데이트.
2025-08-22 21:49:44 +09:00
13ee098cfc feat(character-gallery): 갤러리 탭 UI/페이징 및 API 연동, DI 적용
- API: CharacterApi에 이미지 리스트 API 추가(characterId, page, size)
- VM: 페이징(loadInitial/loadNext), 요청 중복 방지, 마지막 페이지 판단, 누적 리스트 관리
- UI: ProgressBar(배경 #37474F/진행 #3BB9F1, radius 999dp, 비활성) + 좌/우 텍스트 구성
- Grid 3열 + 2dp 간격, item 4:5 비율, 잠금/구매 버튼 UI 적용
- UX: tv_ratio_right에서 ownedCount만 #FDD453로 강조(white 대비)
2025-08-22 17:03:01 +09:00
f917eb8c93 fix(character-detail): characterId 전달 및 상세 탭 전환 로직 수정
fix(character-detail): 탭 전환 시 프래그먼트 캐싱하여 재로딩 방지

CharacterDetailFragment에 newInstance(characterId) 도입 및 ARG 전달 구조 추가.
Fragment에서 잘못된 intent 참조 제거하고 arguments → activity.intent 순으로 안전하게 조회.
Activity 초기 진입 시 상세 탭 로딩 경로 정리 및 characterId 유효성 검사 시 종료 처리 보강.

replace 기반 교체를 add/show/hide 구조로 전환.
TAG_DETAIL/TAG_GALLERY로 인스턴스를 식별하여 FragmentManager 복원/재사용.
탭 이동 시 기존 인스턴스 표시만 수행하여 onViewCreated 재호출/네트워크 재요청 방지.
2025-08-22 15:23:17 +09:00
989a0f361b feat(character-detail): 캐릭터 상세
- 탭 UI 추가
2025-08-22 03:39:36 +09:00
52c1f61109 feat(report): 캐릭터 댓글 신고 사유를 라디오 버튼으로 변경 및 비활성 시각화
- 댓글 신고 사유 리스트 변경
- 댓글 신고 사유 선택 UI를 RadioGroup/RadioButton으로 전환
- 선택 전 신고 버튼 비활성화 및 alpha 적용으로 시각적 비활성화 처리
- 선택 시 버튼 활성화 및 alpha 복구
2025-08-22 03:04:50 +09:00
7dd6d46a5f fix(talk-tab): 채팅방 리스트
- 채팅방 사이 간격 24
- 이미지 원형으로 변경
2025-08-22 02:34:05 +09:00
3a1943ba87 refactor(character-comment): 캐릭터 댓글/답글 리스트
- 배경색 변경
- 댓글 사이 간격 조정
2025-08-20 18:38:16 +09:00
ab1dd04a60 refactor(character-comment): 답글 리스트 MVVM 적용 및 ViewModel 추가
- CharacterCommentReplyViewModel 추가: 로딩/토스트/페이지네이션/CRUD 로직 이관
- AppDI Koin 모듈에 Reply ViewModel 등록
- CharacterCommentReplyFragment에서 Repository 직접 접근 제거 및 바인딩 로직 추가
2025-08-20 16:49:51 +09:00
ccd88dad47 refactor(chat/character): 댓글 리스트 화면에 ViewModel 도입 및 Fragment-Repository 직접 의존 제거
CharacterCommentListViewModel을 추가하여 댓글 조회/등록/삭제/신고 및 페이지네이션 로직을 ViewModel로 이전.
Fragment는 UI 업데이트와 사용자 입력 처리에 집중하도록 리팩토링.
Koin DI에 ViewModel 등록.
2025-08-20 16:22:34 +09:00
fdc9ba80e0 fix(comment): 답글 더보기 Bottom Sheet 적용 및 삭제/신고 API 연동
답글 리스트에서 PopupMenu를 Bottom Sheet로 통일하고, 내 답글은 삭제, 타인 답글은 신고 메뉴만 노출하도록 변경.
삭제는 원 댓글 삭제와 동일한 API(deleteComment)를 사용하며, 신고는 reportComment로 연동.
2025-08-20 15:55:59 +09:00
d1c62fd2b6 fix(comment): 캐릭터 댓글 신고 BottomSheet가 표시되지 않는 문제 수정
- childFragmentManager 대신 parentFragmentManager로 신고 BottomSheet 표시
- BottomSheet dismiss 직후 show 트랜잭션 충돌/우선순위 이슈 완화
2025-08-20 15:33:47 +09:00
3e2cdd502c fix(character-comment): 캐릭터 댓글 수 표시 수정
- 서버에서 받아온 댓글 수를 표시하도록 수정
2025-08-20 14:00:46 +09:00
c78aed2551 fix(comment): 캐릭터 댓글 더보기에서 삭제 API 연동 및 UI 반영
- Bottom Sheet 삭제 선택 시 deleteComment API 호출 추가
- 성공 시 목록에서 항목 제거
- 오류 시 사용자에게 에러 토스트 노출
2025-08-20 03:19:23 +09:00
e881178f2a feat(character-comment): 답글 리스트 API 연동 및 커서 기반 무한 스크롤 적용
feat(character-comment): 답글 작성 API 연동 및 성공 시 낙관적 UI 반영

- CharacterCommentReplyFragment에 listReplies API 연동
- 초기 1회 로드 허용, 이후 cursor != null일 때만 추가 로드
- isLoading 플래그로 중복 요청 방지
- 어댑터 헤더(원본 댓글) 유지, replies만 순차 추가

- CharacterCommentReplyFragment에서 createReply API 호출로 스텁 제거
- 요청 중 로딩 다이얼로그 표시, 성공 시 입력 초기화 및 리스트에 즉시 추가
- 에러 처리(토스트) 적용
2025-08-20 03:07:35 +09:00
b995a0b151 feat(character-comment): 답글 리스트 API 연동 및 커서 기반 무한 스크롤 적용
- CharacterCommentReplyFragment에 listReplies API 연동
- 초기 1회 로드 허용, 이후 cursor != null일 때만 추가 로드
- isLoading 플래그로 중복 요청 방지
- 어댑터 헤더(원본 댓글) 유지, replies만 순차 추가
2025-08-20 02:48:01 +09:00
ec315c4747 feat(character-comment): 캐릭터 댓글 리스트 등록/목록/신고 API 연동 및 DI 등록
fix(character-comment): 캐릭터 댓글 리스트 무한 스크롤에서 cursor null 시 추가 호출 방지

- CharacterCommentApi/Repository 추가
- AppDI에 API/Repository 등록
- CharacterCommentListFragment: 등록 버튼 클릭 시 API 호출로 전환, 커서 페이징 목록 로드 적용, 신고 API 연동
- 로딩/에러 처리 및 중복 로드 방지 플래그 추가

- 스크롤 리스너에 canLoadMore 조건 추가(초기 또는 cursor 존재 시에만 호출)
- loadMore()에 종료 가드 추가(adapter 비어있지 않고 cursor null이면 반환)
- 댓글 1개인 경우 동일 내용 반복 로딩 문제 해결
2025-08-20 02:37:14 +09:00
52ff0c82cb feat(character-comment): 신고 BottomSheet 추가 및 삭제 확인 팝업 도입
- 신고 BottomSheet(제목/단일선택 리스트/신고 버튼) 구현 및 더보기→신고 흐름 연동
- 삭제 버튼 클릭 시 확인 다이얼로그 표시 후 확정 시 리스트에서 제거
- 신고/삭제 API 호출부는 스텁으로 남겨둠(후속 연동 예정)
2025-08-20 01:22:56 +09:00
d4ec2fbdef feat(character-comment): 답글 페이지 UI 및 페이징 스텁 구현
- 댓글 리스트 아이템 터치 시 답글 페이지로 전환 연결
- 상단 뒤로 가기/닫기, 입력 폼, divider, 원본 댓글, 들여 쓰기된 답글 목록 구성
- RecyclerView 최하단 도달 시 더미 데이터 추가 로드(무한 스크롤 스텁)
- 답글 등록/수정/삭제 동작 스텁 처리
- 추가 파일
  - layout: fragment_character_comment_reply.xml, item_character_comment_reply.xml
  - 코드: CharacterCommentReplyFragment, CharacterCommentReplyAdapter
- 변경 파일
  - CharacterCommentListBottomSheet: openReply() 추가
  - CharacterCommentListFragment: 아이템 클릭 시 답글 페이지 진입
2025-08-20 00:54:00 +09:00
a9742a07c0 feat(character-comment): 캐릭터 댓글 리스트 BottomSheet UI 및 페이징 스텁 구현
- CharacterDetail 댓글 섹션 터치 시 BottomSheet 표시
- 헤더/입력폼/Divider/리스트/더보기 BottomSheet 구성
- RecyclerView 하단 도달 시 더미 데이터 추가 로드(Stub)
- 상대시간 표기(분/시간/일/년 전)
- API 연동은 이후 작업 예정 (스텁)
2025-08-20 00:42:15 +09:00
df1746976c feat(character-detail): 캐릭터 상세 댓글 섹션 추가 및 데이터 바인딩
- 댓글 입력 필드 stroke(흰색 1dp stroke와 radius 5dp) 추가
- 입력 박스 내부 우측에 전송 아이콘(ic_message_send) 추가
- 배경 드로어블(#263238, radius 10dp) 추가
- CharacterCommentResponse에 comment(nullable) 필드 추가
- CharacterDetailActivity에서 latestComment/totalComments 바인딩 및 UI 분기 처리
2025-08-19 18:37:12 +09:00
61cfbe249c fix(character-detail): 더보기 버튼 미표시 문제 수정 (줄 수 측정 시점 조정)
세계관/성격 텍스트의 줄 수를 maxLines=3 적용 이전에 측정하도록 순서 변경.
측정 후 더보기 가시성 결정, 그 다음 접힘 레이아웃 적용.
확장 상태 플래그 및 아이콘/문구 초기화 추가.
2025-08-18 19:13:26 +09:00
f9b50089dd fix(chat): 캐릭터 상세
- 세계관 -> [세계관 및 작품 소개]
- 성격 -> [성격 및 특징]
- 전체보기 -> 더보기
2025-08-18 16:37:29 +09:00
95983dcf5b fix(chat): 최근 대화한 캐릭터
- 캐릭터 이미지 원형으로 변경
2025-08-18 16:31:46 +09:00
16e8941c15 fix(chat): 캐릭터 상세
- 캐릭터 이미지 딤 제거
- 캐릭터 정보: 이미지 아래로 이동
2025-08-15 01:03:43 +09:00
cd4a098bff fix(chat): 동시간대 메시지 정렬을 messageId 오름차순으로 안정화
createdAt만 사용하던 정렬 로직을 다중 키로 변경하여
동일 시간에 messageId 오름차순이 보장되도록 수정.
- 로컬 초기 로드: createdAt -> messageId -> localId asc
- 서버 초기/증분 로드: createdAt -> messageId asc
2025-08-15 00:45:22 +09:00
4a0940ad26 fix(chat-room): 프로필 이미지 circle로 변경 2025-08-15 00:37:08 +09:00
dd7251f18b fix(chat-room): 채팅 아이템 UI, 메시지 입력 창 UI
- 채팅 아이템이 화면을 벗어나는 버그 수정
- 메시지 입력창 글자크기 14sp, rounded corner 32dp
2025-08-15 00:29:56 +09:00
3d727f07fa fix(chat-room): header_container
- 이름과 캐릭터 타입을 세로로 표시
2025-08-14 23:01:31 +09:00
92883ee577 fix(chat-room): 메시지 전송 API URL 수정
기존
/api/chat/room/{roomId}/messages

변경
/api/chat/room/{roomId}/send
2025-08-14 22:40:27 +09:00
2790bea1d8 fix(chat-room): stable IDs 설정 시점을 setAdapter 이전으로 이동
- ChatMessageAdapter: onAttachedToRecyclerView에서 setHasStableIds 호출 제거
- ChatRoomActivity: 어댑터 생성 직후 setHasStableIds(true) 설정 후 RecyclerView에 연결

원인: 옵저버 등록 이후 setHasStableIds 변경으로 런타임 예외 발생
검증: 단위 테스트 모두 통과, 빌드 성공
2025-08-14 22:36:50 +09:00
3f87b35816 refactor(chat-room): 페이징 커서 fallback/저장 로직을 createdAt→messageId로 정합성 수정
- 왜: 서버 계약에 따라 cursor 의미가 단독 messageId로 확정됨. createdAt 기반 커서는 페이징 경계에서 중복/누락을 유발할 수 있음
- 무엇: ChatRoomActivity.loadMoreMessages()/loadInitialMessages()에서 cursor 계산 및 nextCursor 대체 저장을 messageId 기준으로 변경. Repository/API 타입은 그대로 유지
2025-08-14 21:27:17 +09:00
bd86d1610a fix(chat-room): api url 수정
- /api/chat/rooms/... -> /api/chat/room/...
2025-08-14 20:29:36 +09:00
7f1b1b1ed3 feat(chat-room): 안내 메시지 접힘 상태 저장시 사용하는 key
- string 오류로 인해 제대로 표시 되지 않던 버그 수정
2025-08-14 20:25:35 +09:00
09b8979ba0 feat(chat-room): sendMessage 응답 다건 변경 반영
- TalkApi.sendMessage: ApiResponse<List<ServerChatMessage>>로 변경
  - ChatRepository.sendMessage: Single<List<ServerChatMessage>>로 변경. 로컬 SENDING→SENT 업데이트 후, 응답 메시지 전체를 DB에 저장
  - ChatRoomActivity: 구독부에서 List를 처리하며 mine == false(AI) 메시지들만 순서대로 append. 타이핑 인디케이터는 성공/실패 시 동일하게 제거
2025-08-14 20:23:21 +09:00
02747c539b test(chat-room): 타이핑 인디케이터 표시/중복/숨김 테스트 추가
- showTypingIndicator 중복 호출 시 중복 삽입 방지 검증
- hideTypingIndicator 안전성 검증(표시되지 않은 경우도 안전)
- NPE 회귀 방지

fix(adapter): RecyclerView 미부착 상태에서 notify 호출로 NPE 발생 방지
2025-08-14 19:19:38 +09:00
c1012586ce fix(chat-room): 접근성 라벨 및 다국어 문자열 적용
- 레이아웃 contentDescription 하드코딩 제거 및 strings 리소스화
- ChatMessageAdapter 접근성 문구를 리소스 기반으로 변환
- values-en 추가로 안내/버튼/접근성/상태 문구 영문화
- 타이핑 인디케이터 접근성 라벨 추가
2025-08-14 18:50:32 +09:00
c9b6623eac perf(chat): DiffUtil 및 stableIds 적용으로 채팅 리스트 갱신 최적화
- ChatMessageAdapter에 DiffUtil 기반 submitList 도입으로 불필요한 전체 바인딩 제거
- RecyclerView 연결 시점에만 stableIds 활성화하여 테스트 환경 NPE 회피
- AI 프로필 이미지 중복 로딩 방지(tag 비교)로 네트워크/디코딩 비용 절감
- onViewRecycled에서 애니메이션/리스너/이미지 정리로 메모리 안정성 향상
2025-08-14 18:13:40 +09:00