오디오 콘텐츠 신규/인기/테마 화면 문자열 리소스화

This commit is contained in:
2025-12-03 13:52:12 +09:00
parent a3fb090593
commit 96d14356be
15 changed files with 75 additions and 44 deletions

View File

@@ -49,16 +49,16 @@ class AudioContentNewAllActivity : BaseActivity<ActivityAudioContentNewAllBindin
override fun setupView() { override fun setupView() {
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
binding.toolbar.tvBack.text = if (isFree) { binding.toolbar.tvBack.text = if (isFree) {
"새로운 무료 콘텐츠" getString(R.string.screen_audio_content_new_all_title_free)
} else { } else {
"새로운 단편" getString(R.string.screen_audio_content_new_all_title)
} }
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvNotice.text = if (isFree) { binding.tvNotice.text = if (isFree) {
"※ 최근 2주간 등록된 새로운 콘텐츠 입니다." getString(R.string.screen_audio_content_new_all_notice_free)
} else { } else {
"※ 최근 2주간 등록된 새로운 단편 입니다." getString(R.string.screen_audio_content_new_all_notice)
} }
setupNewContentTheme() setupNewContentTheme()

View File

@@ -68,7 +68,7 @@ class AudioContentNewAllAdapter(
binding.tvCan.text = item.price.moneyFormat() binding.tvCan.text = item.price.moneyFormat()
} else { } else {
binding.ivCan.visibility = View.GONE binding.ivCan.visibility = View.GONE
binding.tvCan.text = "무료" binding.tvCan.text = context.getString(R.string.audio_content_price_free)
} }
binding.tvTime.text = item.duration binding.tvTime.text = item.duration

View File

@@ -8,7 +8,9 @@ import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.audio_content.AudioContentRepository import kr.co.vividnext.sodalive.audio_content.AudioContentRepository
import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentMainItem import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentMainItem
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.R
class AudioContentNewAllViewModel( class AudioContentNewAllViewModel(
private val repository: AudioContentRepository private val repository: AudioContentRepository
@@ -41,6 +43,7 @@ class AudioContentNewAllViewModel(
fun getNewContentList(isFree: Boolean = false) { fun getNewContentList(isFree: Boolean = false) {
if (!_isLoading.value!! && !isLast) { if (!_isLoading.value!! && !isLast) {
_isLoading.value = true _isLoading.value = true
val unknownError = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
compositeDisposable.add( compositeDisposable.add(
repository.getNewContentAllOfTheme( repository.getNewContentAllOfTheme(
@@ -67,9 +70,7 @@ class AudioContentNewAllViewModel(
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(unknownError)
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
} }
} }
@@ -78,7 +79,7 @@ class AudioContentNewAllViewModel(
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(unknownError)
} }
) )
) )
@@ -86,6 +87,7 @@ class AudioContentNewAllViewModel(
} }
fun getThemeList() { fun getThemeList() {
val unknownError = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
compositeDisposable.add( compositeDisposable.add(
repository.getNewContentThemeList(token = "Bearer ${SharedPreferenceManager.token}") repository.getNewContentThemeList(token = "Bearer ${SharedPreferenceManager.token}")
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@@ -98,9 +100,7 @@ class AudioContentNewAllViewModel(
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(unknownError)
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
} }
} }
@@ -109,7 +109,7 @@ class AudioContentNewAllViewModel(
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(unknownError)
} }
) )
) )

View File

@@ -8,6 +8,7 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
import kr.co.vividnext.sodalive.audio_content.main.new_content.AudioContentMainNewContentThemeAdapter import kr.co.vividnext.sodalive.audio_content.main.new_content.AudioContentMainNewContentThemeAdapter
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
@@ -37,7 +38,7 @@ class AudioContentRankingAllActivity : BaseActivity<ActivityAudioContentRankingA
override fun setupView() { override fun setupView() {
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
binding.toolbar.tvBack.text = "인기 콘텐츠" binding.toolbar.tvBack.text = getString(R.string.screen_audio_content_ranking_title)
adapter = AudioContentRankingAllAdapter { adapter = AudioContentRankingAllAdapter {
val intent = Intent(applicationContext, AudioContentDetailActivity::class.java) val intent = Intent(applicationContext, AudioContentDetailActivity::class.java)

View File

@@ -43,7 +43,7 @@ class AudioContentRankingAllAdapter(
binding.tvNickname.text = item.creatorNickname binding.tvNickname.text = item.creatorNickname
if (item.price < 1) { if (item.price < 1) {
binding.tvPrice.text = "무료" binding.tvPrice.text = context.getString(R.string.audio_content_price_free)
binding.tvPrice.setTextColor(ContextCompat.getColor(context, R.color.white)) binding.tvPrice.setTextColor(ContextCompat.getColor(context, R.color.white))
binding.tvPrice.setCompoundDrawables(null, null, null, null) binding.tvPrice.setCompoundDrawables(null, null, null, null)
binding.tvPrice.setPadding( binding.tvPrice.setPadding(

View File

@@ -8,7 +8,9 @@ import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.audio_content.AudioContentRepository import kr.co.vividnext.sodalive.audio_content.AudioContentRepository
import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.R
class AudioContentRankingAllViewModel( class AudioContentRankingAllViewModel(
private val repository: AudioContentRepository private val repository: AudioContentRepository
@@ -42,6 +44,7 @@ class AudioContentRankingAllViewModel(
fun getAudioContentRanking() { fun getAudioContentRanking() {
if (!_isLoading.value!! && !isLast && page <= 5) { if (!_isLoading.value!! && !isLast && page <= 5) {
_isLoading.value = true _isLoading.value = true
val unknownError = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
compositeDisposable.add( compositeDisposable.add(
repository.getContentRanking( repository.getContentRanking(
page = page, page = page,
@@ -69,15 +72,13 @@ class AudioContentRankingAllViewModel(
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(unknownError)
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
} }
} }
}, },
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(unknownError)
} }
) )
) )
@@ -85,6 +86,7 @@ class AudioContentRankingAllViewModel(
} }
fun getAudioContentRankingSortType() { fun getAudioContentRankingSortType() {
val unknownError = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
compositeDisposable.add( compositeDisposable.add(
repository.getContentRankingSortType(token = "Bearer ${SharedPreferenceManager.token}") repository.getContentRankingSortType(token = "Bearer ${SharedPreferenceManager.token}")
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@@ -97,15 +99,13 @@ class AudioContentRankingAllViewModel(
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(unknownError)
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
} }
} }
}, },
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(unknownError)
} }
) )
) )

View File

@@ -38,7 +38,7 @@ class AudioContentAllByThemeActivity : BaseActivity<ActivityAudioContentAllByThe
if (themeId <= 0) { if (themeId <= 0) {
Toast.makeText( Toast.makeText(
applicationContext, applicationContext,
"잘못된 요청입니다.\n다시 시도해 주세요.", getString(R.string.screen_audio_content_error_invalid_request_retry),
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()

View File

@@ -8,7 +8,9 @@ import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.audio_content.AudioContentRepository import kr.co.vividnext.sodalive.audio_content.AudioContentRepository
import kr.co.vividnext.sodalive.audio_content.AudioContentViewModel import kr.co.vividnext.sodalive.audio_content.AudioContentViewModel
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.R
class AudioContentAllByThemeViewModel( class AudioContentAllByThemeViewModel(
private val repository: AudioContentRepository private val repository: AudioContentRepository
@@ -61,7 +63,8 @@ class AudioContentAllByThemeViewModel(
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." SodaLiveApplicationHolder.get()
.getString(R.string.common_error_unknown)
) )
} }
} }
@@ -71,7 +74,10 @@ class AudioContentAllByThemeViewModel(
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
SodaLiveApplicationHolder.get()
.getString(R.string.common_error_unknown)
)
} }
) )
) )

View File

@@ -25,7 +25,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="최신순" android:text="@string/screen_audio_content_sort_newest"
android:textColor="@color/color_88e2e2e2" android:textColor="@color/color_88e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -36,7 +36,7 @@
android:layout_marginHorizontal="13.3dp" android:layout_marginHorizontal="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="높은 가격순" android:text="@string/screen_audio_content_sort_price_high"
android:textColor="@color/color_88e2e2e2" android:textColor="@color/color_88e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -46,7 +46,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="낮은 가격순" android:text="@string/screen_audio_content_sort_price_low"
android:textColor="@color/color_88e2e2e2" android:textColor="@color/color_88e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>
@@ -64,7 +64,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="전체" android:text="@string/audio_content_label_all"
android:textColor="@color/color_e2e2e2" android:textColor="@color/color_e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -85,7 +85,7 @@
android:layout_marginStart="2dp" android:layout_marginStart="2dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="" android:text="@string/audio_content_total_unit"
android:textColor="@color/color_e2e2e2" android:textColor="@color/color_e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>

View File

@@ -19,7 +19,7 @@
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:paddingHorizontal="13.3dp" android:paddingHorizontal="13.3dp"
android:paddingVertical="8dp" android:paddingVertical="8dp"
android:text="※ 최근 2주간 등록된 새로운 콘텐츠 입니다." android:text="@string/screen_audio_content_new_all_notice"
android:textSize="14.67sp" /> android:textSize="14.67sp" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
@@ -44,7 +44,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="전체" android:text="@string/audio_content_label_all"
android:textColor="@color/color_e2e2e2" android:textColor="@color/color_e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -65,7 +65,7 @@
android:layout_marginStart="2dp" android:layout_marginStart="2dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="" android:text="@string/audio_content_total_unit"
android:textColor="@color/color_e2e2e2" android:textColor="@color/color_e2e2e2"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>
@@ -100,7 +100,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="최근 2주간 등록된 새로운 콘텐츠가 없습니다." android:text="@string/screen_audio_content_new_all_empty"
android:textColor="@color/color_bbbbbb" android:textColor="@color/color_bbbbbb"
android:textSize="13sp" android:textSize="13sp"
android:lineSpacingExtra="8dp" android:lineSpacingExtra="8dp"

View File

@@ -31,7 +31,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:fontFamily="@font/gmarket_sans_light" android:fontFamily="@font/gmarket_sans_light"
android:text="※ 인기 콘텐츠의 순위는 매주 업데이트됩니다." android:text="@string/screen_audio_content_ranking_notice"
android:textColor="@color/color_bbbbbb" android:textColor="@color/color_bbbbbb"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>

View File

@@ -72,14 +72,14 @@
android:id="@+id/tv_point" android:id="@+id/tv_point"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:background="@drawable/bg_round_corner_2_6_7849bc" android:background="@drawable/bg_round_corner_2_6_7849bc"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:padding="2.6dp" android:padding="2.6dp"
android:text="포인트" android:text="@string/audio_content_badge_point"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="8sp" android:textSize="8sp"
android:visibility="gone" android:visibility="gone"
tools:ignore="SmallSp" /> tools:ignore="SmallSp" />
</LinearLayout> </LinearLayout>

View File

@@ -855,6 +855,14 @@
<string name="audio_content_playlist_content_count">Total %1$d items</string> <string name="audio_content_playlist_content_count">Total %1$d items</string>
<string name="audio_content_playlist_empty_title">No playlists yet.</string> <string name="audio_content_playlist_empty_title">No playlists yet.</string>
<string name="audio_content_playlist_empty_desc">Create a playlist with your favorite content.</string> <string name="audio_content_playlist_empty_desc">Create a playlist with your favorite content.</string>
<string name="screen_audio_content_new_all_title">New short content</string>
<string name="screen_audio_content_new_all_title_free">New free content</string>
<string name="screen_audio_content_new_all_notice">New short content posted in the last two weeks.</string>
<string name="screen_audio_content_new_all_notice_free">New content posted in the last two weeks.</string>
<string name="screen_audio_content_new_all_empty">No new content has been posted in the last two weeks.</string>
<string name="screen_audio_content_ranking_title">Popular content</string>
<string name="screen_audio_content_ranking_notice">※ Rankings are updated weekly.</string>
<string name="screen_audio_content_error_invalid_request_retry">Invalid request.\nPlease try again.</string>
<!-- Alarm --> <!-- Alarm -->
<string name="alarm_time_format">hh:mm</string> <string name="alarm_time_format">hh:mm</string>

View File

@@ -855,6 +855,14 @@
<string name="audio_content_playlist_content_count">合計 %1$d件</string> <string name="audio_content_playlist_content_count">合計 %1$d件</string>
<string name="audio_content_playlist_empty_title">プレイリストが空です。</string> <string name="audio_content_playlist_empty_title">プレイリストが空です。</string>
<string name="audio_content_playlist_empty_desc">よく聴くコンテンツで\nプレイリストを作成してください。</string> <string name="audio_content_playlist_empty_desc">よく聴くコンテンツで\nプレイリストを作成してください。</string>
<string name="screen_audio_content_new_all_title">新しい短編</string>
<string name="screen_audio_content_new_all_title_free">新しい無料コンテンツ</string>
<string name="screen_audio_content_new_all_notice">過去2週間に登録された新しい短編です。</string>
<string name="screen_audio_content_new_all_notice_free">過去2週間に登録された新しいコンテンツです。</string>
<string name="screen_audio_content_new_all_empty">過去2週間に登録された新しいコンテンツはありません。</string>
<string name="screen_audio_content_ranking_title">人気コンテンツ</string>
<string name="screen_audio_content_ranking_notice">※人気コンテンツの順位は毎週更新されます。</string>
<string name="screen_audio_content_error_invalid_request_retry">無効なリクエストです。\nもう一度お試しください。</string>
<!-- Alarm --> <!-- Alarm -->
<string name="alarm_time_format">hh:mm</string> <string name="alarm_time_format">hh:mm</string>

View File

@@ -854,6 +854,14 @@
<string name="audio_content_playlist_content_count">총 %1$d개</string> <string name="audio_content_playlist_content_count">총 %1$d개</string>
<string name="audio_content_playlist_empty_title">재생목록이 비어있습니다.</string> <string name="audio_content_playlist_empty_title">재생목록이 비어있습니다.</string>
<string name="audio_content_playlist_empty_desc">자주 듣는 콘텐츠를\n재생목록으로 만들어 보세요.</string> <string name="audio_content_playlist_empty_desc">자주 듣는 콘텐츠를\n재생목록으로 만들어 보세요.</string>
<string name="screen_audio_content_new_all_title">새로운 단편</string>
<string name="screen_audio_content_new_all_title_free">새로운 무료 콘텐츠</string>
<string name="screen_audio_content_new_all_notice">※ 최근 2주간 등록된 새로운 단편 입니다.</string>
<string name="screen_audio_content_new_all_notice_free">※ 최근 2주간 등록된 새로운 콘텐츠 입니다.</string>
<string name="screen_audio_content_new_all_empty">최근 2주간 등록된 새로운 콘텐츠가 없습니다.</string>
<string name="screen_audio_content_ranking_title">인기 콘텐츠</string>
<string name="screen_audio_content_ranking_notice">※ 인기 콘텐츠의 순위는 매주 업데이트됩니다.</string>
<string name="screen_audio_content_error_invalid_request_retry">잘못된 요청입니다.\n다시 시도해 주세요.</string>
<!-- Alarm --> <!-- Alarm -->
<string name="alarm_time_format">hh:mm</string> <string name="alarm_time_format">hh:mm</string>