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