오디션 상세 문자열 리소스화

This commit is contained in:
2025-12-01 15:19:01 +09:00
parent e9afa55aa0
commit 159a5ae8b3
11 changed files with 110 additions and 36 deletions

View File

@@ -13,6 +13,7 @@ import androidx.media3.common.util.UnstableApi
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService
import java.io.IOException
import kr.co.vividnext.sodalive.R
@OptIn(UnstableApi::class)
class AuditionApplicantMediaPlayerManager(
@@ -101,7 +102,11 @@ class AuditionApplicantMediaPlayerManager(
}
} catch (e: IOException) {
e.printStackTrace()
Toast.makeText(context, "콘텐츠를 재생하지 못했습니다.\n다시 시도해 주세요", Toast.LENGTH_SHORT).show()
Toast.makeText(
context,
context.getString(R.string.screen_audition_play_error),
Toast.LENGTH_SHORT
).show()
showLoadingDialog(false)
}

View File

@@ -11,6 +11,7 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kr.co.vividnext.sodalive.databinding.FragmentAuditionApplyDialogBinding
import kr.co.vividnext.sodalive.R
class AuditionApplyDialogFragment(
private val fileName: String,
@@ -59,13 +60,13 @@ class AuditionApplyDialogFragment(
if (phoneNumber.isBlank() || phoneNumber.length != 11) {
Toast.makeText(
activity,
"잘못된 연락처 입니다.\n다시 입력해 주세요.",
getString(R.string.dialog_audition_apply_error_invalid_phone),
Toast.LENGTH_LONG
).show()
} else if (!binding.tvAgree.isSelected) {
Toast.makeText(
activity,
"연락처 수집 및 활용에 동의하셔야 오디션 지원이 가능합니다.",
getString(R.string.dialog_audition_apply_error_need_agreement),
Toast.LENGTH_LONG
).show()
} else {

View File

@@ -7,8 +7,6 @@ import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.RoundedCornersTransformation
import com.bumptech.glide.Glide
import com.bumptech.glide.load.MultiTransformation
import com.bumptech.glide.load.resource.bitmap.CenterCrop
@@ -19,6 +17,7 @@ import kr.co.vividnext.sodalive.audition.role.AuditionRoleDetailActivity
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.databinding.ActivityAuditionDetailBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.android.ext.android.inject
@@ -40,7 +39,7 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
if (auditionId <= 0) {
Toast.makeText(
applicationContext,
"잘못된 요청입니다.\n다시 시도해 주세요.",
getString(R.string.screen_audition_error_invalid_request),
Toast.LENGTH_LONG
).show()
@@ -60,7 +59,7 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
isOpenInformation = !isOpenInformation
if (isOpenInformation) {
binding.tvInformation.maxLines = Int.MAX_VALUE
binding.tvOpen.text = "접기"
binding.tvOpen.text = getString(R.string.screen_audition_detail_collapse)
binding.tvOpen.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.ic_live_detail_top,
0,
@@ -69,7 +68,7 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
)
} else {
binding.tvInformation.maxLines = 3
binding.tvOpen.text = "펼치기"
binding.tvOpen.text = getString(R.string.screen_audition_detail_expand)
binding.tvOpen.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.ic_live_detail_bottom,
0,
@@ -125,8 +124,13 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
}
private fun bindData() {
viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
viewModel.toastLiveData.observe(this) { toastMessage ->
toastMessage?.let {
val message = it.message ?: it.resId?.let(::getString)
message?.let { text ->
Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).show()
}
}
}
viewModel.isLoading.observe(this) {

View File

@@ -60,11 +60,11 @@ class AuditionDetailRoleAdapter(
if (item.isComplete) {
binding.blackCover.visibility = View.VISIBLE
binding.tvStatus.text = "모집완료"
binding.tvStatus.text = context.getString(R.string.screen_audition_status_closed)
binding.tvStatus.setBackgroundResource(R.drawable.bg_round_corner_13_3_909090)
} else {
binding.blackCover.visibility = View.GONE
binding.tvStatus.text = "모집중"
binding.tvStatus.text = context.getString(R.string.screen_audition_status_open)
binding.tvStatus.setBackgroundResource(R.drawable.bg_round_corner_13_3_3bb9f1)
}

View File

@@ -7,13 +7,15 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.audition.AuditionRepository
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.R
class AuditionDetailViewModel(
private val repository: AuditionRepository
) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>()
val toastLiveData: LiveData<String?>
private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData
private var _isLoading = MutableLiveData(false)
@@ -39,10 +41,10 @@ class AuditionDetailViewModel(
_auditionDetailLiveData.value = it.data
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
_toastLiveData.postValue(ToastMessage(message = it.message))
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
ToastMessage(resId = R.string.common_error_unknown)
)
}
@@ -56,7 +58,9 @@ class AuditionDetailViewModel(
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
_toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
if (onFailure != null) {
onFailure()
}