feat(chat-original): ChatFragment에 작품별 탭 및 리스트 UI/API 연동 추가

- ChatFragment에 '작품별' 탭 추가 및 프래그먼트 스위칭 로직 반영
- /api/chat/original/list API, 모델, 레포지토리, ViewModel 추가
- OriginalTabFragment/Adapter/레이아웃 구현 (3단 그리드, 간격 16dp, 이미지 라운드 16dp, 아이템 이미지의 레이아웃 비율을 306:432)
- 스크롤 끝 감지를 구현하여 무한 스크롤을 지원
This commit is contained in:
2025-09-15 16:21:54 +09:00
parent 05208d3031
commit f15c6be1a4
10 changed files with 314 additions and 1 deletions

View File

@@ -79,6 +79,9 @@ import kr.co.vividnext.sodalive.chat.talk.TalkApi
import kr.co.vividnext.sodalive.chat.talk.TalkTabRepository
import kr.co.vividnext.sodalive.chat.talk.TalkTabViewModel
import kr.co.vividnext.sodalive.chat.talk.room.chatTalkRoomModule
import kr.co.vividnext.sodalive.chat.original.OriginalWorkApi
import kr.co.vividnext.sodalive.chat.original.OriginalWorkRepository
import kr.co.vividnext.sodalive.chat.original.OriginalWorkViewModel
import kr.co.vividnext.sodalive.common.ApiBuilder
import kr.co.vividnext.sodalive.common.ObjectBox
import kr.co.vividnext.sodalive.explorer.ExplorerApi
@@ -263,6 +266,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
single { ApiBuilder().build(get(), CharacterApi::class.java) }
single { ApiBuilder().build(get(), TalkApi::class.java) }
single { ApiBuilder().build(get(), CharacterCommentApi::class.java) }
single { ApiBuilder().build(get(), OriginalWorkApi::class.java) }
}
private val viewModelModule = module {
@@ -367,6 +371,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
viewModel { kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentListViewModel(get()) }
viewModel { kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentReplyViewModel(get()) }
viewModel { NewCharactersAllViewModel(get()) }
viewModel { OriginalWorkViewModel(get()) }
}
private val repositoryModule = module {
@@ -417,6 +422,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
factory { TalkTabRepository(get()) }
factory { CharacterCommentRepository(get()) }
factory { NewCharactersRepository(get()) }
factory { OriginalWorkRepository(get()) }
}