마이페이지 문자열 리소스화

This commit is contained in:
2025-12-01 12:28:46 +09:00
parent 707dc351ba
commit bca527eca0
6 changed files with 120 additions and 52 deletions

View File

@@ -234,7 +234,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnStorage.root, buttonView = binding.btnStorage.root,
iconRes = R.drawable.ic_my_storage, iconRes = R.drawable.ic_my_storage,
title = "보관함" title = getString(R.string.screen_my_storage)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -247,7 +247,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnBlockList.root, buttonView = binding.btnBlockList.root,
iconRes = R.drawable.ic_my_block, iconRes = R.drawable.ic_my_block,
title = "차단목록" title = getString(R.string.screen_my_block_list)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -260,7 +260,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnMorningCall.root, buttonView = binding.btnMorningCall.root,
iconRes = R.drawable.ic_my_alarm, iconRes = R.drawable.ic_my_alarm,
title = "모닝콜" title = getString(R.string.screen_my_morning_call)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -273,7 +273,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnNotice.root, buttonView = binding.btnNotice.root,
iconRes = R.drawable.ic_my_notice, iconRes = R.drawable.ic_my_notice,
title = "공지사항" title = getString(R.string.screen_my_notice)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -286,7 +286,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnEvent.root, buttonView = binding.btnEvent.root,
iconRes = R.drawable.ic_my_event, iconRes = R.drawable.ic_my_event,
title = "이벤트" title = getString(R.string.screen_my_event)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -299,7 +299,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnCustomerService.root, buttonView = binding.btnCustomerService.root,
iconRes = R.drawable.ic_my_service_center, iconRes = R.drawable.ic_my_service_center,
title = "고객센터" title = getString(R.string.screen_my_customer_service)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -355,7 +355,10 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
@SuppressLint("SetTextI18n", "NotifyDataSetChanged") @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
private fun bindData() { private fun bindData() {
viewModel.toastLiveData.observe(viewLifecycleOwner) { viewModel.toastLiveData.observe(viewLifecycleOwner) {
it?.let { Toast.makeText(requireContext(), it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
if (!text.isNullOrBlank()) {
Toast.makeText(requireContext(), text, Toast.LENGTH_LONG).show()
}
} }
viewModel.isLoading.observe(viewLifecycleOwner) { viewModel.isLoading.observe(viewLifecycleOwner) {
@@ -371,13 +374,13 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnIdentityVerification.root, buttonView = binding.btnIdentityVerification.root,
iconRes = R.drawable.ic_my_auth, iconRes = R.drawable.ic_my_auth,
title = "인증완료" title = getString(R.string.screen_my_identity_verified)
) )
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnCoupon.root, buttonView = binding.btnCoupon.root,
iconRes = R.drawable.ic_my_coupon, iconRes = R.drawable.ic_my_coupon,
title = "쿠폰등록" title = getString(R.string.screen_my_coupon_register)
) { ) {
startActivity( startActivity(
Intent( Intent(
@@ -390,7 +393,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnIdentityVerification.root, buttonView = binding.btnIdentityVerification.root,
iconRes = R.drawable.ic_my_auth, iconRes = R.drawable.ic_my_auth,
title = "본인인증" title = getString(R.string.screen_my_identity_verification)
) { ) {
showAuthDialog() showAuthDialog()
} }
@@ -398,11 +401,11 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
FunctionButtonHelper.setupFunctionButton( FunctionButtonHelper.setupFunctionButton(
buttonView = binding.btnCoupon.root, buttonView = binding.btnCoupon.root,
iconRes = R.drawable.ic_my_coupon, iconRes = R.drawable.ic_my_coupon,
title = "쿠폰등록" title = getString(R.string.screen_my_coupon_register)
) { ) {
Toast.makeText( Toast.makeText(
requireContext(), requireContext(),
"본인인증 후 사용가능합니다.", getString(R.string.screen_my_auth_required),
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()

View File

@@ -1,5 +1,6 @@
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
@@ -14,14 +15,15 @@ import kr.co.vividnext.sodalive.settings.ContentType
import kr.co.vividnext.sodalive.settings.notice.NoticeItem import kr.co.vividnext.sodalive.settings.notice.NoticeItem
import kr.co.vividnext.sodalive.settings.notice.NoticeRepository import kr.co.vividnext.sodalive.settings.notice.NoticeRepository
import kr.co.vividnext.sodalive.user.UserRepository import kr.co.vividnext.sodalive.user.UserRepository
import kr.co.vividnext.sodalive.R
class MyPageViewModel( class MyPageViewModel(
private val userRepository: UserRepository, private val userRepository: UserRepository,
private val authRepository: AuthRepository, private val authRepository: AuthRepository,
private val noticeRepository: NoticeRepository private val noticeRepository: NoticeRepository
) : BaseViewModel() { ) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<MyPageToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<MyPageToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -49,21 +51,23 @@ class MyPageViewModel(
{ {
if (it.success && it.data != null) { if (it.success && it.data != null) {
_myPageLiveData.postValue(it.data!!) _myPageLiveData.postValue(it.data!!)
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." if (it.message != null) {
) MyPageToastMessage(message = it.message)
} else {
MyPageToastMessage(resId = R.string.screen_my_error_unknown)
} }
)
} }
_isLoading.value = false _isLoading.value = false
}, },
{ {
_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)
)
} }
) )
) )
@@ -88,14 +92,14 @@ class MyPageViewModel(
} }
onSuccess() onSuccess()
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." if (it.message != null) {
) MyPageToastMessage(message = it.message)
} else {
MyPageToastMessage(resId = R.string.screen_my_error_unknown)
} }
)
_isLoading.value = false _isLoading.value = false
} }
@@ -103,7 +107,9 @@ 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)
)
} }
) )
) )
@@ -130,3 +136,8 @@ class MyPageViewModel(
) )
} }
} }
data class MyPageToastMessage(
@StringRes val resId: Int? = null,
val message: String? = null
)

View File

@@ -71,7 +71,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="자세히" android:text="@string/screen_my_notice_more"
android:textColor="#B0BEC5" android:textColor="#B0BEC5"
android:textSize="16sp" android:textSize="16sp"
app:drawableEndCompat="@drawable/ic_arrow_right" /> app:drawableEndCompat="@drawable/ic_arrow_right" />
@@ -107,7 +107,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:gravity="center_vertical" android:gravity="center_vertical"
android:text="LOGIN" android:text="@string/screen_my_login"
android:textColor="#777777" android:textColor="#777777"
android:textSize="32sp" /> android:textSize="32sp" />
@@ -158,7 +158,7 @@
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:paddingHorizontal="12dp" android:paddingHorizontal="12dp"
android:paddingVertical="6dp" android:paddingVertical="6dp"
android:text="프로필 수정" android:text="@string/screen_my_edit_profile"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="14sp" /> android:textSize="14sp" />
</RelativeLayout> </RelativeLayout>
@@ -173,7 +173,7 @@
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="12dp" android:paddingVertical="12dp"
android:text="내 채널 보기" android:text="@string/screen_my_view_channel"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="16sp" android:textSize="16sp"
android:visibility="gone" /> android:visibility="gone" />
@@ -220,7 +220,7 @@
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:paddingHorizontal="16dp" android:paddingHorizontal="16dp"
android:paddingVertical="10dp" android:paddingVertical="10dp"
android:text="캔 충전" android:text="@string/screen_my_charge_can"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="14sp" android:textSize="14sp"
android:visibility="invisible" /> android:visibility="invisible" />
@@ -258,7 +258,7 @@
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:paddingHorizontal="16dp" android:paddingHorizontal="16dp"
android:paddingVertical="10dp" android:paddingVertical="10dp"
android:text="포인트 리워드" android:text="@string/screen_my_point_reward"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="14sp" android:textSize="14sp"
android:visibility="invisible" /> android:visibility="invisible" />
@@ -388,7 +388,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_bold" android:fontFamily="@font/pretendard_bold"
android:text="최근 들은 " android:text="@string/screen_my_recent_prefix"
android:textColor="#B0BEC5" android:textColor="#B0BEC5"
android:textSize="16sp" /> android:textSize="16sp" />

View File

@@ -136,4 +136,22 @@
<string name="screen_live_reservation_pay_title">Reserve with %1$s cans</string> <string name="screen_live_reservation_pay_title">Reserve with %1$s cans</string>
<string name="screen_live_reservation_pay_desc">Pay to join the live \"%1$s\".</string> <string name="screen_live_reservation_pay_desc">Pay to join the live \"%1$s\".</string>
<string name="screen_live_reservation_confirm">Reserve</string> <string name="screen_live_reservation_confirm">Reserve</string>
<string name="screen_my_notice_more">Details</string>
<string name="screen_my_login">Login</string>
<string name="screen_my_edit_profile">Edit profile</string>
<string name="screen_my_view_channel">View my channel</string>
<string name="screen_my_charge_can">Charge cans</string>
<string name="screen_my_point_reward">Point reward</string>
<string name="screen_my_recent_prefix">Recently listened</string>
<string name="screen_my_storage">Storage</string>
<string name="screen_my_block_list">Blocked users</string>
<string name="screen_my_morning_call">Morning call</string>
<string name="screen_my_notice">Notice</string>
<string name="screen_my_event">Event</string>
<string name="screen_my_customer_service">Customer service</string>
<string name="screen_my_identity_verified">Verified</string>
<string name="screen_my_identity_verification">Verify identity</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_error_unknown">An unknown error occurred. Please try again.</string>
</resources> </resources>

View File

@@ -136,4 +136,22 @@
<string name="screen_live_reservation_pay_title">%1$sCANで予約</string> <string name="screen_live_reservation_pay_title">%1$sCANで予約</string>
<string name="screen_live_reservation_pay_desc">ライブ「%1$s」に参加するために決済します。</string> <string name="screen_live_reservation_pay_desc">ライブ「%1$s」に参加するために決済します。</string>
<string name="screen_live_reservation_confirm">予約する</string> <string name="screen_live_reservation_confirm">予約する</string>
<string name="screen_my_notice_more">詳細</string>
<string name="screen_my_login">ログイン</string>
<string name="screen_my_edit_profile">プロフィール編集</string>
<string name="screen_my_view_channel">マイチャンネルを見る</string>
<string name="screen_my_charge_can">CANチャージ</string>
<string name="screen_my_point_reward">ポイントリワード</string>
<string name="screen_my_recent_prefix">最近聴いた</string>
<string name="screen_my_storage">保存箱</string>
<string name="screen_my_block_list">ブロック一覧</string>
<string name="screen_my_morning_call">モーニングコール</string>
<string name="screen_my_notice">お知らせ</string>
<string name="screen_my_event">イベント</string>
<string name="screen_my_customer_service">カスタマーセンター</string>
<string name="screen_my_identity_verified">認証済み</string>
<string name="screen_my_identity_verification">本人認証</string>
<string name="screen_my_coupon_register">クーポン登録</string>
<string name="screen_my_auth_required">本人認証後に利用できます。</string>
<string name="screen_my_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
</resources> </resources>

View File

@@ -135,4 +135,22 @@
<string name="screen_live_reservation_pay_title">%1$s캔으로 예약</string> <string name="screen_live_reservation_pay_title">%1$s캔으로 예약</string>
<string name="screen_live_reservation_pay_desc">\'%1$s\' 라이브에 참여하기 위해 결제합니다.</string> <string name="screen_live_reservation_pay_desc">\'%1$s\' 라이브에 참여하기 위해 결제합니다.</string>
<string name="screen_live_reservation_confirm">예약하기</string> <string name="screen_live_reservation_confirm">예약하기</string>
<string name="screen_my_notice_more">자세히</string>
<string name="screen_my_login">LOGIN</string>
<string name="screen_my_edit_profile">프로필 수정</string>
<string name="screen_my_view_channel">내 채널 보기</string>
<string name="screen_my_charge_can">캔 충전</string>
<string name="screen_my_point_reward">포인트 리워드</string>
<string name="screen_my_recent_prefix">최근 들은 </string>
<string name="screen_my_storage">보관함</string>
<string name="screen_my_block_list">차단목록</string>
<string name="screen_my_morning_call">모닝콜</string>
<string name="screen_my_notice">공지사항</string>
<string name="screen_my_event">이벤트</string>
<string name="screen_my_customer_service">고객센터</string>
<string name="screen_my_identity_verified">인증완료</string>
<string name="screen_my_identity_verification">본인인증</string>
<string name="screen_my_coupon_register">쿠폰등록</string>
<string name="screen_my_auth_required">본인인증 후 사용가능합니다.</string>
<string name="screen_my_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
</resources> </resources>