공용 토스트 메시지로 unknown 오류를 통합

Toast 메시지를 공용 데이터 클래스로 정의합니다.

화면별 unknown 에러 문자열을 common_error_unknown으로 통일합니다.
This commit is contained in:
2025-12-01 13:40:31 +09:00
parent 492077ddb2
commit 4d1e859bbf
7 changed files with 54 additions and 67 deletions

View File

@@ -0,0 +1,8 @@
package kr.co.vividnext.sodalive.common
import androidx.annotation.StringRes
data class ToastMessage(
@StringRes val resId: Int? = null,
val message: String? = null
)

View File

@@ -1,6 +1,5 @@
package kr.co.vividnext.sodalive.home package kr.co.vividnext.sodalive.home
import androidx.annotation.StringRes
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger import com.orhanobut.logger.Logger
@@ -12,6 +11,7 @@ import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.chat.character.Character import kr.co.vividnext.sodalive.chat.character.Character
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.explorer.GetExplorerSectionCreatorResponse import kr.co.vividnext.sodalive.explorer.GetExplorerSectionCreatorResponse
import kr.co.vividnext.sodalive.live.GetRoomListResponse import kr.co.vividnext.sodalive.live.GetRoomListResponse
import kr.co.vividnext.sodalive.user.UserRepository import kr.co.vividnext.sodalive.user.UserRepository
@@ -26,8 +26,8 @@ class HomeViewModel(
val isLoading: LiveData<Boolean> val isLoading: LiveData<Boolean>
get() = _isLoading get() = _isLoading
private val _toastLiveData = MutableLiveData<HomeToastMessage?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<HomeToastMessage?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _liveListLiveData = MutableLiveData<List<GetRoomListResponse>>() private var _liveListLiveData = MutableLiveData<List<GetRoomListResponse>>()
@@ -117,9 +117,9 @@ class HomeViewModel(
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
if (it.message != null) { if (it.message != null) {
HomeToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
) )
} }
@@ -128,7 +128,7 @@ class HomeViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -147,10 +147,10 @@ class HomeViewModel(
_contentRankingLiveData.value = data _contentRankingLiveData.value = data
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(HomeToastMessage(message = it.message)) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -158,7 +158,7 @@ class HomeViewModel(
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -182,7 +182,7 @@ class HomeViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -210,7 +210,7 @@ class HomeViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -238,7 +238,7 @@ class HomeViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -261,10 +261,10 @@ class HomeViewModel(
_isLoading.value = false _isLoading.value = false
if (!it.success || it.data == null) { if (!it.success || it.data == null) {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(HomeToastMessage(message = it.message)) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -273,15 +273,10 @@ class HomeViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
HomeToastMessage(resId = R.string.screen_home_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
) )
} }
} }
data class HomeToastMessage(
@StringRes val resId: Int? = null,
val message: String? = null
)

View File

@@ -1,6 +1,5 @@
package kr.co.vividnext.sodalive.mypage package kr.co.vividnext.sodalive.mypage
import androidx.annotation.StringRes
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger import com.orhanobut.logger.Logger
@@ -9,6 +8,7 @@ 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.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.mypage.auth.AuthRepository import kr.co.vividnext.sodalive.mypage.auth.AuthRepository
import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
import kr.co.vividnext.sodalive.settings.ContentType import kr.co.vividnext.sodalive.settings.ContentType
@@ -22,8 +22,8 @@ class MyPageViewModel(
private val authRepository: AuthRepository, private val authRepository: AuthRepository,
private val noticeRepository: NoticeRepository private val noticeRepository: NoticeRepository
) : BaseViewModel() { ) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<MyPageToastMessage?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<MyPageToastMessage?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -54,9 +54,9 @@ class MyPageViewModel(
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
if (it.message != null) { if (it.message != null) {
MyPageToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
MyPageToastMessage(resId = R.string.screen_my_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
) )
} }
@@ -66,7 +66,7 @@ class MyPageViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
MyPageToastMessage(resId = R.string.screen_my_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -95,9 +95,9 @@ class MyPageViewModel(
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
if (it.message != null) { if (it.message != null) {
MyPageToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
MyPageToastMessage(resId = R.string.screen_my_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
) )
@@ -108,7 +108,7 @@ class MyPageViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
MyPageToastMessage(resId = R.string.screen_my_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
) )
} }
) )
@@ -136,8 +136,3 @@ class MyPageViewModel(
) )
} }
} }
data class MyPageToastMessage(
@StringRes val resId: Int? = null,
val message: String? = null
)

View File

@@ -1,6 +1,5 @@
package kr.co.vividnext.sodalive.search package kr.co.vividnext.sodalive.search
import androidx.annotation.StringRes
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger import com.orhanobut.logger.Logger
@@ -9,6 +8,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.ToastMessage
class SearchViewModel( class SearchViewModel(
private val repository: SearchRepository private val repository: SearchRepository
@@ -29,8 +29,8 @@ class SearchViewModel(
val currentTabLiveData: LiveData<SearchPageTab> val currentTabLiveData: LiveData<SearchPageTab>
get() = _currentTabLiveData get() = _currentTabLiveData
private val _toastLiveData = MutableLiveData<SearchToastMessage?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<SearchToastMessage?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -94,9 +94,9 @@ class SearchViewModel(
_searchUnifiedLiveData.value = it.data!! _searchUnifiedLiveData.value = it.data!!
} else { } else {
_toastLiveData.value = if (it.message != null) { _toastLiveData.value = if (it.message != null) {
SearchToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
SearchToastMessage(resId = R.string.screen_search_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
} }
}, },
@@ -104,8 +104,8 @@ class SearchViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData _toastLiveData
.value = SearchToastMessage( .value = ToastMessage(
resId = R.string.screen_search_error_unknown resId = R.string.common_error_unknown
) )
} }
) )
@@ -139,9 +139,9 @@ class SearchViewModel(
} }
} else { } else {
_toastLiveData.value = if (it.message != null) { _toastLiveData.value = if (it.message != null) {
SearchToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
SearchToastMessage(resId = R.string.screen_search_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
} }
}, },
@@ -149,8 +149,8 @@ class SearchViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData _toastLiveData
.value = SearchToastMessage( .value = ToastMessage(
resId = R.string.screen_search_error_unknown resId = R.string.common_error_unknown
) )
} }
) )
@@ -186,9 +186,9 @@ class SearchViewModel(
} }
} else { } else {
_toastLiveData.value = if (it.message != null) { _toastLiveData.value = if (it.message != null) {
SearchToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
SearchToastMessage(resId = R.string.screen_search_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
} }
}, },
@@ -196,8 +196,8 @@ class SearchViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData _toastLiveData
.value = SearchToastMessage( .value = ToastMessage(
resId = R.string.screen_search_error_unknown resId = R.string.common_error_unknown
) )
} }
) )
@@ -233,9 +233,9 @@ class SearchViewModel(
} }
} else { } else {
_toastLiveData.value = if (it.message != null) { _toastLiveData.value = if (it.message != null) {
SearchToastMessage(message = it.message) ToastMessage(message = it.message)
} else { } else {
SearchToastMessage(resId = R.string.screen_search_error_unknown) ToastMessage(resId = R.string.common_error_unknown)
} }
} }
}, },
@@ -243,8 +243,8 @@ class SearchViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData _toastLiveData
.value = SearchToastMessage( .value = ToastMessage(
resId = R.string.screen_search_error_unknown resId = R.string.common_error_unknown
) )
} }
) )
@@ -254,8 +254,3 @@ class SearchViewModel(
} }
} }
} }
data class SearchToastMessage(
@StringRes val resId: Int? = null,
val message: String? = null
)

View File

@@ -119,7 +119,7 @@
<string name="screen_home_series_new">New</string> <string name="screen_home_series_new">New</string>
<string name="screen_home_series_complete">Complete</string> <string name="screen_home_series_complete">Complete</string>
<string name="screen_home_recommend_channel_content_label">Contents</string> <string name="screen_home_recommend_channel_content_label">Contents</string>
<string name="screen_home_error_unknown">An unknown error occurred. Please try again.</string> <string name="common_error_unknown">An unknown error occurred. Please try again.</string>
<string name="screen_chat_tab_character">Character</string> <string name="screen_chat_tab_character">Character</string>
<string name="screen_chat_tab_original">Works</string> <string name="screen_chat_tab_original">Works</string>
<string name="screen_chat_tab_talk">Talk</string> <string name="screen_chat_tab_talk">Talk</string>
@@ -153,7 +153,6 @@
<string name="screen_my_identity_verification">Verify identity</string> <string name="screen_my_identity_verification">Verify identity</string>
<string name="screen_my_coupon_register">Register coupon</string> <string name="screen_my_coupon_register">Register coupon</string>
<string name="screen_my_auth_required">Available after identity verification.</string> <string name="screen_my_auth_required">Available after identity verification.</string>
<string name="screen_my_error_unknown">An unknown error occurred. Please try again.</string>
<string name="screen_search_hint">Search</string> <string name="screen_search_hint">Search</string>
<string name="screen_search_tab_unified">All</string> <string name="screen_search_tab_unified">All</string>
<string name="screen_search_tab_creator">Channels</string> <string name="screen_search_tab_creator">Channels</string>
@@ -164,5 +163,4 @@
<string name="screen_search_content_title">Contents</string> <string name="screen_search_content_title">Contents</string>
<string name="screen_search_series_title">Series</string> <string name="screen_search_series_title">Series</string>
<string name="screen_search_no_result">No results found.</string> <string name="screen_search_no_result">No results found.</string>
<string name="screen_search_error_unknown">An unknown error occurred. Please try again.</string>
</resources> </resources>

View File

@@ -119,7 +119,7 @@
<string name="screen_home_series_new">新作</string> <string name="screen_home_series_new">新作</string>
<string name="screen_home_series_complete">完結</string> <string name="screen_home_series_complete">完結</string>
<string name="screen_home_recommend_channel_content_label">コンテンツ</string> <string name="screen_home_recommend_channel_content_label">コンテンツ</string>
<string name="screen_home_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string> <string name="common_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
<string name="screen_chat_tab_character">キャラクター</string> <string name="screen_chat_tab_character">キャラクター</string>
<string name="screen_chat_tab_original">作品別</string> <string name="screen_chat_tab_original">作品別</string>
<string name="screen_chat_tab_talk">トーク</string> <string name="screen_chat_tab_talk">トーク</string>
@@ -153,7 +153,6 @@
<string name="screen_my_identity_verification">本人認証</string> <string name="screen_my_identity_verification">本人認証</string>
<string name="screen_my_coupon_register">クーポン登録</string> <string name="screen_my_coupon_register">クーポン登録</string>
<string name="screen_my_auth_required">本人認証後に利用できます。</string> <string name="screen_my_auth_required">本人認証後に利用できます。</string>
<string name="screen_my_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
<string name="screen_search_hint">検索</string> <string name="screen_search_hint">検索</string>
<string name="screen_search_tab_unified">総合</string> <string name="screen_search_tab_unified">総合</string>
<string name="screen_search_tab_creator">チャンネル</string> <string name="screen_search_tab_creator">チャンネル</string>
@@ -164,5 +163,4 @@
<string name="screen_search_content_title">コンテンツ</string> <string name="screen_search_content_title">コンテンツ</string>
<string name="screen_search_series_title">シリーズ</string> <string name="screen_search_series_title">シリーズ</string>
<string name="screen_search_no_result">検索結果がありません。</string> <string name="screen_search_no_result">検索結果がありません。</string>
<string name="screen_search_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
</resources> </resources>

View File

@@ -118,7 +118,7 @@
<string name="screen_home_series_new">신작</string> <string name="screen_home_series_new">신작</string>
<string name="screen_home_series_complete">완결</string> <string name="screen_home_series_complete">완결</string>
<string name="screen_home_recommend_channel_content_label">콘텐츠</string> <string name="screen_home_recommend_channel_content_label">콘텐츠</string>
<string name="screen_home_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string> <string name="common_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
<string name="screen_chat_tab_character">캐릭터</string> <string name="screen_chat_tab_character">캐릭터</string>
<string name="screen_chat_tab_original">작품별</string> <string name="screen_chat_tab_original">작품별</string>
<string name="screen_chat_tab_talk"></string> <string name="screen_chat_tab_talk"></string>
@@ -152,7 +152,6 @@
<string name="screen_my_identity_verification">본인인증</string> <string name="screen_my_identity_verification">본인인증</string>
<string name="screen_my_coupon_register">쿠폰등록</string> <string name="screen_my_coupon_register">쿠폰등록</string>
<string name="screen_my_auth_required">본인인증 후 사용가능합니다.</string> <string name="screen_my_auth_required">본인인증 후 사용가능합니다.</string>
<string name="screen_my_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
<string name="screen_search_hint">검색</string> <string name="screen_search_hint">검색</string>
<string name="screen_search_tab_unified">통합</string> <string name="screen_search_tab_unified">통합</string>
<string name="screen_search_tab_creator">채널</string> <string name="screen_search_tab_creator">채널</string>
@@ -163,5 +162,4 @@
<string name="screen_search_content_title">콘텐츠</string> <string name="screen_search_content_title">콘텐츠</string>
<string name="screen_search_series_title">시리즈</string> <string name="screen_search_series_title">시리즈</string>
<string name="screen_search_no_result">검색 결과가 없습니다.</string> <string name="screen_search_no_result">검색 결과가 없습니다.</string>
<string name="screen_search_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
</resources> </resources>