fix(settings): 로그아웃 시 로컬 채팅 메시지 전체 삭제 연동
- SettingsViewModel에 ChatRepository 주입 및 삭제 로직 처리 - DI(Koin) 수정으로 SettingsViewModel에 ChatRepository 바인딩 - 삭제 실패 시에도 사용자 로그아웃 흐름 유지
This commit is contained in:
@@ -288,7 +288,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
|||||||
viewModel { EventViewModel(get()) }
|
viewModel { EventViewModel(get()) }
|
||||||
viewModel { NotificationSettingsViewModel(get()) }
|
viewModel { NotificationSettingsViewModel(get()) }
|
||||||
viewModel { ContentSettingsViewModel() }
|
viewModel { ContentSettingsViewModel() }
|
||||||
viewModel { SettingsViewModel(get()) }
|
viewModel { SettingsViewModel(get(), get()) }
|
||||||
viewModel { SeriesDetailViewModel(get(), get()) }
|
viewModel { SeriesDetailViewModel(get(), get()) }
|
||||||
viewModel { SeriesListAllViewModel(get()) }
|
viewModel { SeriesListAllViewModel(get()) }
|
||||||
viewModel { SeriesContentAllViewModel(get()) }
|
viewModel { SeriesContentAllViewModel(get()) }
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
|
|||||||
alarmViewModel.truncate()
|
alarmViewModel.truncate()
|
||||||
recentContentViewModel.truncate()
|
recentContentViewModel.truncate()
|
||||||
|
|
||||||
finishAffinity()
|
finishAffinity()
|
||||||
startActivity(Intent(applicationContext, SplashActivity::class.java))
|
startActivity(Intent(applicationContext, SplashActivity::class.java))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,14 @@ import com.orhanobut.logger.Logger
|
|||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
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.common.SharedPreferenceManager
|
||||||
import kr.co.vividnext.sodalive.user.UserRepository
|
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<String?>()
|
private val _toastLiveData = MutableLiveData<String?>()
|
||||||
val toastLiveData: LiveData<String?>
|
val toastLiveData: LiveData<String?>
|
||||||
get() = _toastLiveData
|
get() = _toastLiveData
|
||||||
@@ -26,7 +30,18 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo
|
|||||||
.subscribe(
|
.subscribe(
|
||||||
{
|
{
|
||||||
if (it.success) {
|
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 {
|
} else {
|
||||||
if (it.message != null) {
|
if (it.message != null) {
|
||||||
_toastLiveData.postValue(it.message)
|
_toastLiveData.postValue(it.message)
|
||||||
@@ -53,7 +68,16 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo
|
|||||||
.subscribe(
|
.subscribe(
|
||||||
{
|
{
|
||||||
if (it.success) {
|
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 {
|
} else {
|
||||||
if (it.message != null) {
|
if (it.message != null) {
|
||||||
_toastLiveData.postValue(it.message)
|
_toastLiveData.postValue(it.message)
|
||||||
|
|||||||
Reference in New Issue
Block a user