시리즈 메인 문자열 리소스화

This commit is contained in:
2025-12-03 18:34:14 +09:00
parent 35f95aa0f2
commit b521b79fe4
8 changed files with 59 additions and 31 deletions

View File

@@ -14,16 +14,22 @@ class SeriesMainActivity : BaseActivity<ActivitySeriesMainBinding>(
private var currentTab = 0 private var currentTab = 0
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "시리즈 전체보기" binding.toolbar.tvBack.text = getString(R.string.screen_series_main_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
setupTabs() setupTabs()
} }
private fun setupTabs() { private fun setupTabs() {
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("")) binding.tabLayout.addTab(
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("요일별")) binding.tabLayout.newTab().setText(R.string.screen_series_main_tab_home)
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("장르별")) )
binding.tabLayout.addTab(
binding.tabLayout.newTab().setText(R.string.screen_series_main_tab_day_of_week)
)
binding.tabLayout.addTab(
binding.tabLayout.newTab().setText(R.string.screen_series_main_tab_genre)
)
// 탭 선택 리스너 설정 // 탭 선택 리스너 설정
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {

View File

@@ -4,10 +4,12 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
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.R
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.audio_content.series.main.SeriesMainRepository import kr.co.vividnext.sodalive.audio_content.series.main.SeriesMainRepository
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.SodaLiveApplicationHolder
class SeriesMainByGenreViewModel( class SeriesMainByGenreViewModel(
private val repository: SeriesMainRepository private val repository: SeriesMainRepository
@@ -36,6 +38,9 @@ class SeriesMainByGenreViewModel(
val selectedGenreId: Long? val selectedGenreId: Long?
get() = _selectedGenreId get() = _selectedGenreId
private val unknownErrorMessage: String
get() = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
fun loadGenres() { fun loadGenres() {
_isLoading.value = true _isLoading.value = true
compositeDisposable.add( compositeDisposable.add(
@@ -59,12 +64,12 @@ class SeriesMainByGenreViewModel(
_genreListLiveData.value = emptyList() _genreListLiveData.value = emptyList()
} }
} else { } else {
_toastLiveData.value = it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." _toastLiveData.value = it.message ?: unknownErrorMessage
} }
}, },
{ {
_isLoading.value = false _isLoading.value = false
_toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." _toastLiveData.value = unknownErrorMessage
} }
) )
) )
@@ -108,12 +113,12 @@ class SeriesMainByGenreViewModel(
isLast = true isLast = true
} }
} else { } else {
_toastLiveData.value = it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." _toastLiveData.value = it.message ?: unknownErrorMessage
} }
}, },
{ {
_isLoading.value = false _isLoading.value = false
_toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." _toastLiveData.value = unknownErrorMessage
} }
) )
) )

View File

@@ -5,10 +5,12 @@ import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger 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.R
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.audio_content.series.main.SeriesMainRepository import kr.co.vividnext.sodalive.audio_content.series.main.SeriesMainRepository
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.SodaLiveApplicationHolder
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
class SeriesMainDayOfWeekViewModel( class SeriesMainDayOfWeekViewModel(
@@ -30,6 +32,9 @@ class SeriesMainDayOfWeekViewModel(
private var isLast = false private var isLast = false
private val pageSize = 20 private val pageSize = 20
private val unknownErrorMessage: String
get() = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
var dayOfWeek = SeriesPublishedDaysOfWeek.RANDOM var dayOfWeek = SeriesPublishedDaysOfWeek.RANDOM
set(newValue) { set(newValue) {
if (field != newValue) { if (field != newValue) {
@@ -67,17 +72,13 @@ class SeriesMainDayOfWeekViewModel(
isLast = true isLast = true
} }
} else { } else {
if (it.message != null) { _toastLiveData.value = it.message ?: unknownErrorMessage
_toastLiveData.value = it.message
} else {
_toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
}
} }
}, },
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." _toastLiveData.value = unknownErrorMessage
} }
) )
) )

View File

@@ -5,10 +5,12 @@ import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger 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.R
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.audio_content.series.main.SeriesMainRepository import kr.co.vividnext.sodalive.audio_content.series.main.SeriesMainRepository
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.SodaLiveApplicationHolder
class SeriesMainHomeViewModel( class SeriesMainHomeViewModel(
private val repository: SeriesMainRepository private val repository: SeriesMainRepository
@@ -35,6 +37,9 @@ class SeriesMainHomeViewModel(
val recommendSeriesLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>> val recommendSeriesLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
get() = _recommendSeriesLiveData get() = _recommendSeriesLiveData
private val unknownErrorMessage: String
get() = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
fun fetchData() { fun fetchData() {
_isLoading.value = true _isLoading.value = true
@@ -52,19 +57,13 @@ class SeriesMainHomeViewModel(
_completedSeriesLiveData.value = data.completedSeriesList _completedSeriesLiveData.value = data.completedSeriesList
_recommendSeriesLiveData.value = data.recommendSeriesList _recommendSeriesLiveData.value = data.recommendSeriesList
} else { } else {
if (it.message != null) { _toastLiveData.postValue(it.message ?: unknownErrorMessage)
_toastLiveData.postValue(it.message)
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
}
} }
}, },
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(unknownErrorMessage)
} }
) )
) )
@@ -83,17 +82,13 @@ class SeriesMainHomeViewModel(
if (it.success && it.data != null) { if (it.success && it.data != null) {
_recommendSeriesLiveData.value = it.data _recommendSeriesLiveData.value = it.data
} else { } else {
if (it.message != null) { _toastLiveData.value = it.message ?: unknownErrorMessage
_toastLiveData.value = it.message
} else {
_toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
}
} }
}, },
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." _toastLiveData.value = unknownErrorMessage
} }
) )
) )

View File

@@ -55,7 +55,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="완결 시리즈" android:text="@string/screen_series_main_completed_title"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -64,7 +64,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/screen_series_main_completed_all"
android:textColor="#90A4AE" android:textColor="#90A4AE"
android:textSize="14sp" /> android:textSize="14sp" />
@@ -102,7 +102,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="추천 시리즈" android:text="@string/screen_series_main_recommend_title"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />

View File

@@ -167,6 +167,13 @@
<string name="screen_home_series_popular">Popular</string> <string name="screen_home_series_popular">Popular</string>
<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_series_main_title">All series</string>
<string name="screen_series_main_tab_home">Home</string>
<string name="screen_series_main_tab_day_of_week">By day</string>
<string name="screen_series_main_tab_genre">By genre</string>
<string name="screen_series_main_completed_title">Completed series</string>
<string name="screen_series_main_completed_all">View all</string>
<string name="screen_series_main_recommend_title">Recommended series</string>
<string name="screen_home_recommend_channel_content_label">Contents</string> <string name="screen_home_recommend_channel_content_label">Contents</string>
<string name="common_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="common_error_request">An error occurred while processing the request.</string> <string name="common_error_request">An error occurred while processing the request.</string>

View File

@@ -167,6 +167,13 @@
<string name="screen_home_series_popular">人気</string> <string name="screen_home_series_popular">人気</string>
<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_series_main_title">シリーズ一覧</string>
<string name="screen_series_main_tab_home">ホーム</string>
<string name="screen_series_main_tab_day_of_week">曜日別</string>
<string name="screen_series_main_tab_genre">ジャンル別</string>
<string name="screen_series_main_completed_title">完結シリーズ</string>
<string name="screen_series_main_completed_all">すべて見る</string>
<string name="screen_series_main_recommend_title">おすすめシリーズ</string>
<string name="screen_home_recommend_channel_content_label">コンテンツ</string> <string name="screen_home_recommend_channel_content_label">コンテンツ</string>
<string name="common_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string> <string name="common_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
<string name="common_error_request">リクエスト処理中にエラーが発生しました。</string> <string name="common_error_request">リクエスト処理中にエラーが発生しました。</string>

View File

@@ -166,6 +166,13 @@
<string name="screen_home_series_popular">인기</string> <string name="screen_home_series_popular">인기</string>
<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_series_main_title">시리즈 전체보기</string>
<string name="screen_series_main_tab_home"></string>
<string name="screen_series_main_tab_day_of_week">요일별</string>
<string name="screen_series_main_tab_genre">장르별</string>
<string name="screen_series_main_completed_title">완결 시리즈</string>
<string name="screen_series_main_completed_all">전체보기</string>
<string name="screen_series_main_recommend_title">추천 시리즈</string>
<string name="screen_home_recommend_channel_content_label">콘텐츠</string> <string name="screen_home_recommend_channel_content_label">콘텐츠</string>
<string name="common_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string> <string name="common_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
<string name="common_error_request">요청 중 오류가 발생했습니다.</string> <string name="common_error_request">요청 중 오류가 발생했습니다.</string>