From 98209d0d5febfc60ca15e07cf98393eb11c943c3 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 1 Dec 2025 15:31:26 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=A4=EB=94=94=EC=85=98=20=EC=97=AD?= =?UTF-8?q?=ED=95=A0=20=EC=83=81=EC=84=B8=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=A6=AC=EC=86=8C=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../role/AuditionRoleDetailActivity.kt | 56 +++++++++------- .../role/AuditionRoleDetailViewModel.kt | 45 ++++++++----- .../layout/activity_audition_role_detail.xml | 64 +++++++++---------- app/src/main/res/values-en/strings.xml | 20 ++++++ app/src/main/res/values-ja/strings.xml | 20 ++++++ app/src/main/res/values/strings.xml | 20 ++++++ 6 files changed, 152 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailActivity.kt index 8785edc3..0f07b792 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailActivity.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.audition.role +import android.annotation.SuppressLint import android.content.Intent import android.graphics.Rect import android.net.Uri @@ -28,6 +29,7 @@ import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.RealPathUtil import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.common.ToastMessage import kr.co.vividnext.sodalive.databinding.ActivityAuditionRoleDetailBinding import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity import kr.co.vividnext.sodalive.explorer.profile.creator_community.write.RecordingVoiceFragment @@ -66,14 +68,14 @@ class AuditionRoleDetailActivity : BaseActivity + val message = toastMessage.message ?: toastMessage.resId?.let(::getString) + message?.let { text -> + Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).show() + } + } } viewModel.isLoading.observe(this) { @@ -381,10 +389,10 @@ class AuditionRoleDetailActivity : BaseActivity 0) { binding.groupApplicant.visibility = View.VISIBLE - binding.tvApplicantCount.text = "$it" + binding.tvApplicantCount.text = " $it" } else { binding.groupNoApplicant.visibility = View.VISIBLE } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailViewModel.kt index b633c9b0..a1382d8b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audition/role/AuditionRoleDetailViewModel.kt @@ -13,7 +13,9 @@ import kr.co.vividnext.sodalive.audition.applicant.ApplyAuditionRoleRequest import kr.co.vividnext.sodalive.audition.applicant.GetAuditionRoleApplicantItem import kr.co.vividnext.sodalive.audition.vote.VoteAuditionApplicantRequest 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 import okhttp3.MediaType import okhttp3.MediaType.Companion.toMediaType import okhttp3.MultipartBody @@ -24,8 +26,8 @@ import java.io.File import java.util.TimeZone class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : BaseViewModel() { - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private val _isLoading = MutableLiveData(false) @@ -90,9 +92,10 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : _auditionRoleDetailLiveData.value = roleDetailResponse.data!! } else { if (roleDetailResponse.message != null) { - _toastLiveData.value = roleDetailResponse.message + _toastLiveData.value = ToastMessage(message = roleDetailResponse.message) } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + _toastLiveData.value = + ToastMessage(resId = R.string.common_error_unknown) } if (onFailure != null) { @@ -113,9 +116,10 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : } } else { if (applicantListResponse.message != null) { - _toastLiveData.value = applicantListResponse.message + _toastLiveData.value = ToastMessage(message = applicantListResponse.message) } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + _toastLiveData.value = + ToastMessage(resId = R.string.common_error_unknown) } if (onFailure != null) { @@ -128,7 +132,9 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : { _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() } @@ -166,9 +172,10 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : } } else { if (it.message != null) { - _toastLiveData.value = it.message + _toastLiveData.value = ToastMessage(message = it.message) } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + _toastLiveData.value = + ToastMessage(resId = R.string.common_error_unknown) } } @@ -177,7 +184,9 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : { _isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.common_error_unknown) + ) } ) ) @@ -186,7 +195,8 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : fun applyAudition(auditionRoleId: Long, phoneNumber: String, onSuccess: () -> Unit) { if (audioFile == null) { - _toastLiveData.value = "잘못된 녹음 파일 입니다.\n다시 선택해 주세요." + _toastLiveData.value = + ToastMessage(resId = R.string.screen_audition_invalid_audio_file) return } @@ -236,10 +246,10 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : onSuccess() } 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) ) } } @@ -248,7 +258,7 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : _isLoading.value = false it.message?.let { message -> Logger.e(message) } _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.common_error_unknown) ) } ) @@ -304,11 +314,11 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : ) { onFailure() } else { - _toastLiveData.value = it.message + _toastLiveData.value = ToastMessage(message = it.message) } } else { _toastLiveData.value = - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.common_error_unknown) } } @@ -317,7 +327,8 @@ class AuditionRoleDetailViewModel(private val repository: AuditionRepository) : { _isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + _toastLiveData.value = + ToastMessage(resId = R.string.common_error_unknown) } ) ) diff --git a/app/src/main/res/layout/activity_audition_role_detail.xml b/app/src/main/res/layout/activity_audition_role_detail.xml index 9678fba8..46bd4240 100644 --- a/app/src/main/res/layout/activity_audition_role_detail.xml +++ b/app/src/main/res/layout/activity_audition_role_detail.xml @@ -51,13 +51,13 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:background="@drawable/bg_round_corner_10_transparent_3bb9f1" - android:fontFamily="@font/gmarket_sans_bold" - android:gravity="center" - android:paddingVertical="12dp" - android:text="원작 보러가기" - android:textColor="@color/color_3bb9f1" - android:textSize="16sp" /> + android:background="@drawable/bg_round_corner_10_transparent_3bb9f1" + android:fontFamily="@font/gmarket_sans_bold" + android:gravity="center" + android:paddingVertical="12dp" + android:text="@string/screen_audition_role_original_work" + android:textColor="@color/color_3bb9f1" + android:textSize="16sp" /> + android:background="@drawable/bg_round_corner_10_transparent_3bb9f1" + android:fontFamily="@font/gmarket_sans_bold" + android:gravity="center" + android:paddingVertical="12dp" + android:text="@string/screen_audition_role_script" + android:textColor="@color/color_3bb9f1" + android:textSize="16sp" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/gmarket_sans_medium" + android:text="@string/screen_audition_role_applicant_prefix" + android:textColor="@color/color_bbbbbb" + android:textSize="10.7sp" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/gmarket_sans_medium" + android:text="@string/screen_audition_role_applicant_suffix" + android:textColor="@color/color_bbbbbb" + android:textSize="10.7sp" /> Collapse Open Closed + Invalid audio file.\nPlease select again. + Select audio How to apply Upload file Record now @@ -212,6 +214,24 @@ Invalid contact number.\nPlease try again. You must agree to the collection and use of contact information to apply for the audition. Could not play the content.\nPlease try again. + View original work + Check audition script + Audition character info + Applicants + people + Newest + Most liked + No applicants yet. + Apply for audition + Reapply for audition + Reapply notice + Reapplying will delete your previous submission and invalidate the votes you received. + - Verification required - + Please complete identity verification in My Page before applying for the audition. + [Audition cheer] + You cheered for this audition.\n(Free cheer: once per day per account)\nTry adding more cheer with 1 Can. + [Cheer limit reached] + You reached today’s cheer limit.\nYou can cheer up to 10 times per day.\nTry again tomorrow. Settings diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 9c2ab124..7f11cc05 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -199,6 +199,8 @@ 閉じる 募集中 募集終了 + 正しくない録音ファイルです。\nもう一度選択してください。 + オーディオを選択 オーディション応募方法 ファイルアップロード すぐ録音 @@ -212,6 +214,24 @@ 正しくない連絡先です。\nもう一度入力してください。 連絡先の収集および利用に同意する必要があります。 コンテンツを再生できませんでした。\nもう一度お試しください + 原作を見る + オーディション台本を確認 + オーディションキャラクター情報 + 参加者 + + 最新順 + いいね順 + 応募者がいません。 + オーディションに応募 + オーディションに再応募 + 再応募の案内 + 再応募すると以前の応募履歴は削除され、獲得した投票数は無効となります。 + - 本人確認が必要です - + マイページで本人確認を完了してからオーディションに応募してください。 + [オーディション応援] + オーディションを応援しました。\n(無料応援: アカウントあたり1日1回)\n1缶で追加応援してみてください。 + [本日の応援制限] + 本日の応援はここまでです。\n1日に最大10回まで応援できます。\n明日またお試しください。 設定 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 36687e49..167bedca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -198,6 +198,8 @@ 접기 모집중 모집완료 + 잘못된 녹음 파일 입니다.\n다시 선택해 주세요. + 오디오 선택 오디션 지원방식 파일 업로드 바로 녹음 @@ -211,6 +213,24 @@ 잘못된 연락처 입니다.\n다시 입력해 주세요. 연락처 수집 및 활용에 동의하셔야 오디션 지원이 가능합니다. 콘텐츠를 재생하지 못했습니다.\n다시 시도해 주세요 + 원작 보러가기 + 오디션 대본 확인 + 오디션 캐릭터 정보 + 참여자 + + 최신순 + 좋아요순 + 지원자가 없습니다. + 오디션 지원 + 오디션 재지원 + 재지원 안내 + 재지원 시 이전 지원 내역은 삭제되며 받은 투표수는 무효 처리됩니다. + - 본인인증 필요 - + 마이페이지에서 본인인증을 완료한 후 오디션에 지원해 주세요. + [오디션 응원] + 오디션을 응원하셨습니다\n(무료응원 : 1계정당 1일 1회)\n1캔으로 추가 응원을 해보세요. + [오늘 응원 제한] + 오늘 응원은 여기까지!\n하루 최대 10회까지 이용이 가능합니다.\n내일 다시 이용해주세요. 설정