캔 결제 화면 문자열 리소스화

This commit is contained in:
2025-12-02 15:12:07 +09:00
parent 4caaeff0f0
commit 3cfab2c57b
8 changed files with 113 additions and 69 deletions

View File

@@ -78,7 +78,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
if (canResponse == null) {
Toast.makeText(
applicationContext,
"다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다.",
getString(R.string.msg_can_payment_missing_data),
Toast.LENGTH_LONG
).show()
@@ -90,7 +90,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
false
)
binding.toolbar.tvBack.text = "결제하기"
binding.toolbar.tvBack.text = getString(R.string.screen_can_payment_title)
binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvChargeCanTitle.text = canResponse!!.title
@@ -109,7 +109,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
if (viewModel.paymentMethodLiveData.value == null) {
Toast.makeText(
applicationContext,
"결제수단을 선택해 주세요.",
getString(R.string.msg_can_payment_method_required),
Toast.LENGTH_LONG
).show()
return@setOnClickListener
@@ -118,7 +118,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
if (!binding.tvAgree.isSelected) {
Toast.makeText(
applicationContext,
"결제 진행에 동의하셔야 결제가 가능합니다.",
getString(R.string.msg_can_payment_agree_required),
Toast.LENGTH_LONG
).show()
return@setOnClickListener
@@ -188,7 +188,8 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
startPayverse(response.payloadJson)
},
onFailure = {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
val message = it ?: getString(R.string.common_error_unknown)
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
)
}
@@ -201,13 +202,18 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
requestPayment(chargeId = it)
},
onFailure = {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
val message = it ?: getString(R.string.common_error_unknown)
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
)
}
else -> {
Toast.makeText(applicationContext, "결제수단을 다시 선택해 주세요.", Toast.LENGTH_LONG).show()
Toast.makeText(
applicationContext,
getString(R.string.msg_can_payment_method_required),
Toast.LENGTH_LONG
).show()
}
}
}
@@ -283,7 +289,11 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
viewModel.verifyHecto(
request,
onSuccess = {
Toast.makeText(applicationContext, "캔이 충전되었습니다", Toast.LENGTH_LONG).show()
Toast.makeText(
applicationContext,
getString(R.string.msg_can_charge_success),
Toast.LENGTH_LONG
).show()
SharedPreferenceManager.can += (canResponse!!.rewardCan + canResponse!!.can)
if (gotoPrevPage) {
setResult(RESULT_OK)
@@ -294,7 +304,8 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
finish()
},
onFailure = {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
val message = it ?: getString(R.string.common_error_unknown)
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
)
}
@@ -395,7 +406,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
Logger.e(e.message ?: "payverse start error")
Toast.makeText(
applicationContext,
"결제 초기화에 실패했습니다.",
getString(R.string.msg_can_payment_init_failed),
Toast.LENGTH_LONG
).show()
binding.webviewPayverse.visibility = View.GONE
@@ -436,7 +447,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
) {
Toast.makeText(
applicationContext,
"결제를 하지 못했습니다.\n다시 시도해 주세요",
getString(R.string.msg_can_payment_retry),
Toast.LENGTH_LONG
).show()
@@ -452,14 +463,19 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
completePaymentSuccess()
},
onFailure = {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
val message = it ?: getString(R.string.common_error_unknown)
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
binding.webviewPayverse.visibility = View.GONE
}
)
}
private fun completePaymentSuccess() {
Toast.makeText(applicationContext, "캔이 충전되었습니다", Toast.LENGTH_LONG).show()
Toast.makeText(
applicationContext,
getString(R.string.msg_can_charge_success),
Toast.LENGTH_LONG
).show()
SharedPreferenceManager.can += (canResponse!!.rewardCan + canResponse!!.can)
if (gotoPrevPage) {
setResult(RESULT_OK)

View File

@@ -56,23 +56,24 @@ class CanPaymentTempActivity : BaseActivity<ActivityCanPaymentBinding>(
if (title.isBlank() || can <= 0) {
Toast.makeText(
applicationContext,
"다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다.",
getString(R.string.msg_can_payment_missing_data),
Toast.LENGTH_LONG
).show()
finish()
}
binding.toolbar.tvBack.text = "결제하기"
binding.toolbar.tvBack.text = getString(R.string.screen_can_payment_title)
binding.toolbar.tvBack.setOnClickListener { finish() }
binding.ivCan.visibility = View.GONE
binding.tvAlert.visibility = View.GONE
binding.tvChargeCanTitle.text = title
binding.tvPrice.text = (can * 110).moneyFormat()
binding.tvPaymentPrice.text = "${(can * 110).moneyFormat()}".fontSpan(
val currencyUnit = getString(R.string.screen_can_payment_currency_unit)
binding.tvPaymentPrice.text = "${(can * 110).moneyFormat()}$currencyUnit".fontSpan(
ResourcesCompat.getFont(applicationContext, R.font.gmarket_sans_light),
""
currencyUnit
)
binding.tvAgree.setOnClickListener {
@@ -83,7 +84,7 @@ class CanPaymentTempActivity : BaseActivity<ActivityCanPaymentBinding>(
if (viewModel.paymentMethodLiveData.value == null) {
Toast.makeText(
applicationContext,
"결제수단을 선택해 주세요.",
getString(R.string.msg_can_payment_method_required),
Toast.LENGTH_LONG
).show()
return@setOnClickListener
@@ -92,7 +93,7 @@ class CanPaymentTempActivity : BaseActivity<ActivityCanPaymentBinding>(
if (!binding.tvAgree.isSelected) {
Toast.makeText(
applicationContext,
"결제 진행에 동의하셔야 결제가 가능합니다.",
getString(R.string.msg_can_payment_agree_required),
Toast.LENGTH_LONG
).show()
return@setOnClickListener
@@ -138,7 +139,8 @@ class CanPaymentTempActivity : BaseActivity<ActivityCanPaymentBinding>(
requestPayment(chargeId = it)
},
onFailure = {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
val message = it ?: getString(R.string.common_error_unknown)
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
)
}
@@ -206,7 +208,8 @@ class CanPaymentTempActivity : BaseActivity<ActivityCanPaymentBinding>(
finish()
},
onFailure = {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
val message = it ?: getString(R.string.common_error_unknown)
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
)
}

View File

@@ -22,7 +22,7 @@ class CanPaymentTempViewModel(private val repository: CanPaymentTempRepository)
can: Int,
paymentGateway: PaymentGateway,
onSuccess: (Long) -> Unit,
onFailure: (String) -> Unit
onFailure: (String?) -> Unit
) {
_isLoading.value = true
val request = ChargeTempRequest(can, can * 110, paymentGateway)
@@ -36,23 +36,19 @@ class CanPaymentTempViewModel(private val repository: CanPaymentTempRepository)
if (it.success && it.data != null) {
onSuccess(it.data.chargeId)
} else {
if (it.message != null) {
onFailure(it.message)
} else {
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)
}
fun verify(request: VerifyRequest, onSuccess: () -> Unit, onFailure: (String) -> Unit) {
fun verify(request: VerifyRequest, onSuccess: () -> Unit, onFailure: (String?) -> Unit) {
_isLoading.value = true
compositeDisposable.add(
repository.verify(
@@ -66,17 +62,13 @@ class CanPaymentTempViewModel(private val repository: CanPaymentTempRepository)
if (it.success) {
onSuccess()
} else {
if (it.message != null) {
onFailure(it.message)
} else {
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)

View File

@@ -26,7 +26,7 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
canId: Long,
paymentGateway: PaymentGateway,
onSuccess: (Long) -> Unit,
onFailure: (String) -> Unit
onFailure: (String?) -> Unit
) {
_isLoading.value = true
val request = ChargeRequest(canId = canId, paymentGateway = paymentGateway)
@@ -42,23 +42,19 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
if (it.success && it.data != null) {
onSuccess(it.data.chargeId)
} else {
if (it.message != null) {
onFailure(it.message)
} else {
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)
}
fun verify(request: VerifyRequest, onSuccess: () -> Unit, onFailure: (String) -> Unit) {
fun verify(request: VerifyRequest, onSuccess: () -> Unit, onFailure: (String?) -> Unit) {
_isLoading.value = true
compositeDisposable.add(
repository.verify(
@@ -72,23 +68,19 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
if (it.success) {
onSuccess()
} else {
if (it.message != null) {
onFailure(it.message)
} else {
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)
}
fun verifyHecto(request: VerifyRequest, onSuccess: () -> Unit, onFailure: (String) -> Unit) {
fun verifyHecto(request: VerifyRequest, onSuccess: () -> Unit, onFailure: (String?) -> Unit) {
_isLoading.value = true
compositeDisposable.add(
repository.verifyHecto(
@@ -102,17 +94,13 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
if (it.success) {
onSuccess()
} else {
if (it.message != null) {
onFailure(it.message)
} else {
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)
@@ -125,7 +113,7 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
fun payverseChargeCan(
canId: Long,
onSuccess: (PayverseChargeResponse) -> Unit,
onFailure: (String) -> Unit
onFailure: (String?) -> Unit
) {
_isLoading.value = true
compositeDisposable.add(
@@ -140,13 +128,13 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
if (it.success && it.data != null) {
onSuccess(it.data)
} else {
onFailure(it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { m -> Logger.e(m) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)
@@ -156,7 +144,7 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
transactionId: String,
orderId: String,
onSuccess: () -> Unit,
onFailure: (String) -> Unit
onFailure: (String?) -> Unit
) {
_isLoading.value = true
compositeDisposable.add(
@@ -172,13 +160,13 @@ class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel
if (it.success) {
onSuccess()
} else {
onFailure(it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
},
{
_isLoading.value = false
it.message?.let { m -> Logger.e(m) }
onFailure("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure(it.message)
}
)
)

View File

@@ -79,7 +79,7 @@
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="26.7dp"
android:fontFamily="@font/gmarket_sans_bold"
android:text="결제 수단 선택"
android:text="@string/screen_can_payment_select_method"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
@@ -99,7 +99,7 @@
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingVertical="16.7dp"
android:text="통합 결제"
android:text="@string/screen_can_payment_method_unified"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
@@ -129,7 +129,7 @@
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingVertical="16.7dp"
android:text="휴대폰 결제"
android:text="@string/screen_can_payment_method_phone"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
</LinearLayout>
@@ -144,7 +144,7 @@
android:drawablePadding="6.7dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:text="구매조건 확인 및 결제 진행 동의"
android:text="@string/screen_can_payment_agree"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp"
app:drawableStartCompat="@drawable/ic_select" />
@@ -156,7 +156,7 @@
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:text="- 충전된 캔의 유효기간은 충전 후 5년 입니다.\n- 결제 취소는 결제 후 7일 이내에만 할 수 있습니다.\n 단, 캔의 일부를 사용하면 결제 취소할 수 없습니다.\n- 광고성 이벤트 등 회사가 무료로 지급한 \n포인트는 환불되지 않습니다.\n- 자세한 내용은 보이스온 이용약관에서 확인할 수 있습니다."
android:text="@string/screen_can_payment_notice"
android:textColor="@color/color_777777"
android:textSize="12sp" />
</LinearLayout>
@@ -195,7 +195,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="결제금액"
android:text="@string/screen_can_payment_amount_label"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
@@ -220,7 +220,7 @@
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="16dp"
android:text="결제하기"
android:text="@string/screen_can_payment_pay"
android:textColor="@color/color_1313bc"
android:textSize="18.3sp" />
</LinearLayout>

View File

@@ -382,6 +382,21 @@
<string name="msg_can_charge_unavailable">In-app purchases are unavailable. Please try again.</string>
<string name="msg_can_charge_success">Cans charged.</string>
<string name="msg_can_charge_purchase_not_found">Purchase failed.\nPlease contact customer support.</string>
<!-- Can Payment -->
<string name="screen_can_payment_title">Pay</string>
<string name="screen_can_payment_select_method">Select payment method</string>
<string name="screen_can_payment_method_unified">Unified payment</string>
<string name="screen_can_payment_method_phone">Mobile payment</string>
<string name="screen_can_payment_agree">I agree to the purchase terms and payment</string>
<string name="screen_can_payment_notice">- Charged cans expire 5 years after charging.\n- Payments can be cancelled within 7 days; cancellations are not allowed once any can is used.\n- Promotional cans provided for free are non-refundable.\n- See the VoiceOn Terms of Service for details.</string>
<string name="screen_can_payment_amount_label">Payment amount</string>
<string name="screen_can_payment_pay">Pay</string>
<string name="screen_can_payment_currency_unit">KRW</string>
<string name="msg_can_payment_missing_data">Please try again.\nIf the issue persists, contact customer support.</string>
<string name="msg_can_payment_method_required">Please select a payment method.</string>
<string name="msg_can_payment_agree_required">You must agree before proceeding with payment.</string>
<string name="msg_can_payment_retry">Payment failed.\nPlease try again.</string>
<string name="msg_can_payment_init_failed">Failed to start payment.</string>
<!-- Service Center -->
<string name="screen_service_center_title">Customer service</string>
<string name="screen_service_center_logo_label">VoiceOn Customer Service</string>

View File

@@ -382,6 +382,21 @@
<string name="msg_can_charge_unavailable">アプリ内決済を利用できません。もう一度お試しください。</string>
<string name="msg_can_charge_success">CANをチャージしました。</string>
<string name="msg_can_charge_purchase_not_found">購入に失敗しました。\nカスタマーセンターにお問い合わせください。</string>
<!-- Can Payment -->
<string name="screen_can_payment_title">決済する</string>
<string name="screen_can_payment_select_method">決済方法の選択</string>
<string name="screen_can_payment_method_unified">統合決済</string>
<string name="screen_can_payment_method_phone">携帯電話決済</string>
<string name="screen_can_payment_agree">購入条件を確認し、決済進行に同意</string>
<string name="screen_can_payment_notice">- チャージしたCANの有効期限はチャージ後5年です。\n- 決済キャンセルは決済後7日以内のみ可能で、一部でも使用した場合はキャンセルできません。\n- 広告イベントなどで無料付与されたポイントは返金対象外です。\n- 詳細はVoiceOn利用規約をご確認ください。</string>
<string name="screen_can_payment_amount_label">決済金額</string>
<string name="screen_can_payment_pay">決済する</string>
<string name="screen_can_payment_currency_unit">ウォン</string>
<string name="msg_can_payment_missing_data">再度お試しください。\n問題が続く場合はカスタマーセンターにお問い合わせください。</string>
<string name="msg_can_payment_method_required">決済方法を選択してください。</string>
<string name="msg_can_payment_agree_required">決済の進行に同意する必要があります。</string>
<string name="msg_can_payment_retry">決済に失敗しました。\nもう一度お試しください。</string>
<string name="msg_can_payment_init_failed">決済の開始に失敗しました。</string>
<!-- Service Center -->
<string name="screen_service_center_title">カスタマーセンター</string>
<string name="screen_service_center_logo_label">VoiceOn カスタマーセンター</string>

View File

@@ -381,6 +381,21 @@
<string name="msg_can_charge_unavailable">인 앱 결제 이용이 불가능 합니다. 다시 시도해 주세요.</string>
<string name="msg_can_charge_success">캔이 충전되었습니다</string>
<string name="msg_can_charge_purchase_not_found">구매를 하지 못했습니다.\n고객센터로 문의해 주시기 바랍니다.</string>
<!-- Can Payment -->
<string name="screen_can_payment_title">결제하기</string>
<string name="screen_can_payment_select_method">결제 수단 선택</string>
<string name="screen_can_payment_method_unified">통합 결제</string>
<string name="screen_can_payment_method_phone">휴대폰 결제</string>
<string name="screen_can_payment_agree">구매조건 확인 및 결제 진행 동의</string>
<string name="screen_can_payment_notice">- 충전된 캔의 유효기간은 충전 후 5년 입니다.\n- 결제 취소는 결제 후 7일 이내에만 할 수 있습니다.\n 단, 캔의 일부를 사용하면 결제 취소할 수 없습니다.\n- 광고성 이벤트 등 회사가 무료로 지급한 \n포인트는 환불되지 않습니다.\n- 자세한 내용은 보이스온 이용약관에서 확인할 수 있습니다.</string>
<string name="screen_can_payment_amount_label">결제금액</string>
<string name="screen_can_payment_pay">결제하기</string>
<string name="screen_can_payment_currency_unit"></string>
<string name="msg_can_payment_missing_data">다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다.</string>
<string name="msg_can_payment_method_required">결제수단을 선택해 주세요.</string>
<string name="msg_can_payment_agree_required">결제 진행에 동의하셔야 결제가 가능합니다.</string>
<string name="msg_can_payment_retry">결제를 하지 못했습니다.\n다시 시도해 주세요.</string>
<string name="msg_can_payment_init_failed">결제 초기화에 실패했습니다.</string>
<!-- Service Center -->
<string name="screen_service_center_title">고객센터</string>
<string name="screen_service_center_logo_label">보이스온 고객센터</string>