fix(chat): 채팅방 입장 시 서버 멤버 정보로 캔 배지 동기화
- ChatRoomActivity에서 getMemberInfo 호출 추가 - 응답 성공 시 SharedPreferenceManager.can/point 갱신 및 헤더 배지 즉시 반영 - 네트워크 실패 시 UI 흐름 방해 없이 조용히 무시 처리
This commit is contained in:
@@ -16,6 +16,7 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import coil.load
|
import coil.load
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||||
import kr.co.vividnext.sodalive.base.SodaDialog
|
import kr.co.vividnext.sodalive.base.SodaDialog
|
||||||
@@ -25,6 +26,7 @@ import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
|||||||
import kr.co.vividnext.sodalive.databinding.ActivityChatRoomBinding
|
import kr.co.vividnext.sodalive.databinding.ActivityChatRoomBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||||
|
import kr.co.vividnext.sodalive.user.UserRepository
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@@ -38,6 +40,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
|
|
||||||
// Repository 주입 (7.1 초기 데이터 로딩)
|
// Repository 주입 (7.1 초기 데이터 로딩)
|
||||||
private val chatRepository: ChatRepository by inject()
|
private val chatRepository: ChatRepository by inject()
|
||||||
|
private val userRepository: UserRepository by inject()
|
||||||
|
|
||||||
// 5.2 무한 스크롤/자동 스크롤 상태
|
// 5.2 무한 스크롤/자동 스크롤 상태
|
||||||
private val items: MutableList<ChatListItem> = mutableListOf()
|
private val items: MutableList<ChatListItem> = mutableListOf()
|
||||||
@@ -76,6 +79,8 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
loadInitialMessages()
|
loadInitialMessages()
|
||||||
// 배경 표시 설정 적용
|
// 배경 표시 설정 적용
|
||||||
applyBackgroundVisibility()
|
applyBackgroundVisibility()
|
||||||
|
// 서버 최신 보유 캔 정보 조회 및 헤더 반영
|
||||||
|
fetchAndBindMemberInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
@@ -869,6 +874,22 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
return if (id > 0) id else null
|
return if (id > 0) id else null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun fetchAndBindMemberInfo() {
|
||||||
|
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||||
|
val disposable = userRepository.getMemberInfo(token)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe({ resp ->
|
||||||
|
val data = if (resp.success) resp.data else null
|
||||||
|
if (data != null) {
|
||||||
|
SharedPreferenceManager.can = data.can
|
||||||
|
SharedPreferenceManager.point = data.point
|
||||||
|
binding.tvCanBadge.text = data.can.moneyFormat()
|
||||||
|
}
|
||||||
|
}, { /* ignore error to avoid blocking chat UI */ })
|
||||||
|
compositeDisposable.add(disposable)
|
||||||
|
}
|
||||||
|
|
||||||
private fun clearLocalPrefsForRoom(roomId: Long) {
|
private fun clearLocalPrefsForRoom(roomId: Long) {
|
||||||
val keys = listOf(
|
val keys = listOf(
|
||||||
"chat_bg_visible_room_$roomId",
|
"chat_bg_visible_room_$roomId",
|
||||||
|
|||||||
Reference in New Issue
Block a user