From ec60d4f14347efadfdb1afe912521efe08d2079b Mon Sep 17 00:00:00 2001 From: klaus Date: Thu, 14 Aug 2025 17:30:44 +0900 Subject: [PATCH] =?UTF-8?q?fix(settings):=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EC=8B=9C=20=EB=A1=9C=EC=BB=AC=20=EC=B1=84=ED=8C=85?= =?UTF-8?q?=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=A0=84=EC=B2=B4=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SettingsViewModel에 ChatRepository 주입 및 삭제 로직 처리 - DI(Koin) 수정으로 SettingsViewModel에 ChatRepository 바인딩 - 삭제 실패 시에도 사용자 로그아웃 흐름 유지 --- .../java/kr/co/vividnext/sodalive/di/AppDI.kt | 2 +- .../sodalive/settings/SettingsActivity.kt | 2 +- .../sodalive/settings/SettingsViewModel.kt | 30 +++++++++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 0e95a4e3..40267cc0 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -288,7 +288,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { EventViewModel(get()) } viewModel { NotificationSettingsViewModel(get()) } viewModel { ContentSettingsViewModel() } - viewModel { SettingsViewModel(get()) } + viewModel { SettingsViewModel(get(), get()) } viewModel { SeriesDetailViewModel(get(), get()) } viewModel { SeriesListAllViewModel(get()) } viewModel { SeriesContentAllViewModel(get()) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt index 7fe190dc..7afc82a2 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt @@ -191,7 +191,7 @@ class SettingsActivity : BaseActivity(ActivitySettingsB alarmViewModel.truncate() recentContentViewModel.truncate() - finishAffinity() + finishAffinity() startActivity(Intent(applicationContext, SplashActivity::class.java)) } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt index f98a3b6e..cc4cd913 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt @@ -6,10 +6,14 @@ import com.orhanobut.logger.Logger import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.base.BaseViewModel +import kr.co.vividnext.sodalive.chat.talk.room.ChatRepository import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.user.UserRepository -class SettingsViewModel(private val userRepository: UserRepository) : BaseViewModel() { +class SettingsViewModel( + private val userRepository: UserRepository, + private val chatRepository: ChatRepository +) : BaseViewModel() { private val _toastLiveData = MutableLiveData() val toastLiveData: LiveData get() = _toastLiveData @@ -26,7 +30,18 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo .subscribe( { if (it.success) { - onSuccess() + // ViewModel 레이어에서 로컬 채팅 메시지 삭제 후 onSuccess 호출 + chatRepository.clearAllMessagesOnLogout() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + onSuccess() + }, { err -> + // 실패하더라도 UX를 위해 동일 흐름 진행 + err.message?.let { msg -> Logger.w(msg) } + onSuccess() + }) + .let { disposable -> compositeDisposable.add(disposable) } } else { if (it.message != null) { _toastLiveData.postValue(it.message) @@ -53,7 +68,16 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo .subscribe( { if (it.success) { - onSuccess() + chatRepository.clearAllMessagesOnLogout() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + onSuccess() + }, { err -> + err.message?.let { msg -> Logger.w(msg) } + onSuccess() + }) + .let { disposable -> compositeDisposable.add(disposable) } } else { if (it.message != null) { _toastLiveData.postValue(it.message)