diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponActivity.kt index 38605636..cda5cb92 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponActivity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.text.InputFilter import android.widget.Toast import kr.co.vividnext.sodalive.base.BaseActivity +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.databinding.ActivityCanCouponBinding import org.koin.android.ext.android.inject @@ -25,7 +26,7 @@ class CanCouponActivity : BaseActivity( override fun setupView() { loadingDialog = LoadingDialog(this, layoutInflater) - binding.toolbar.tvBack.text = "쿠폰등록" + binding.toolbar.tvBack.text = getString(R.string.screen_can_coupon_title) binding.toolbar.tvBack.setOnClickListener { finish() } binding.etCouponNumber.filters = arrayOf(InputFilter.AllCaps()) @@ -37,7 +38,10 @@ class CanCouponActivity : BaseActivity( private fun bindData() { viewModel.toastLiveData.observe(this) { - it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } + val message = it?.resId?.let(::getString) ?: it?.message + message?.let { text -> + Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).show() + } } viewModel.isLoading.observe(this) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponViewModel.kt index e9d5d022..062860a9 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/coupon/CanCouponViewModel.kt @@ -6,7 +6,9 @@ import com.orhanobut.logger.Logger import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers 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 kr.co.vividnext.sodalive.mypage.can.CanRepository class CanCouponViewModel(private val repository: CanRepository) : BaseViewModel() { @@ -14,8 +16,8 @@ class CanCouponViewModel(private val repository: CanRepository) : BaseViewModel( val isLoading: LiveData get() = _isLoading - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData fun useCoupon(couponNumber: String, onSuccess: () -> Unit) { @@ -31,24 +33,22 @@ class CanCouponViewModel(private val repository: CanRepository) : BaseViewModel( { _isLoading.value = false if (it.success && it.data != null) { - _toastLiveData.value = it.message + _toastLiveData.value = it.message?.let { message -> + ToastMessage(message = message) + } onSuccess() } else { - if (it.message != null) { - _toastLiveData.value = it.message - } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - } + _toastLiveData.value = it.message?.let { message -> + ToastMessage(message = message) + } ?: ToastMessage(resId = R.string.msg_can_coupon_unknown_error) } }, { _isLoading.value = false - if (it.message != null) { - _toastLiveData.value = it.message - Logger.e(it.message!!) - } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - } + it.message?.let { message -> Logger.e(message) } + _toastLiveData.value = it.message?.let { message -> + ToastMessage(message = message) + } ?: ToastMessage(resId = R.string.msg_can_coupon_unknown_error) } ) diff --git a/app/src/main/res/layout/activity_can_coupon.xml b/app/src/main/res/layout/activity_can_coupon.xml index aa93da72..3b597db5 100644 --- a/app/src/main/res/layout/activity_can_coupon.xml +++ b/app/src/main/res/layout/activity_can_coupon.xml @@ -24,7 +24,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="쿠폰번호 입력" + android:text="@string/screen_can_coupon_input_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -35,7 +35,7 @@ android:layout_marginTop="13.3dp" android:background="@drawable/bg_round_corner_6_7_222222" android:fontFamily="@font/gmarket_sans_medium" - android:hint="쿠폰번호를 입력해 주세요" + android:hint="@string/screen_can_coupon_input_hint" android:importantForAutofill="no" android:inputType="textCapCharacters" android:maxEms="12" @@ -57,7 +57,7 @@ android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" android:paddingVertical="16dp" - android:text="등록하기" + android:text="@string/screen_can_coupon_submit" android:textColor="@color/white" android:textSize="18.3sp" /> @@ -74,7 +74,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="[등록 및 사용안내]" + android:text="@string/screen_can_coupon_guide_title" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -85,7 +85,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:lineSpacingExtra="5sp" android:paddingHorizontal="10dp" - android:text="- 공백없이 쿠폰번호 12자리를 입력해주세요.\n- 충전된 캔 또는 포인트는 해당 충전현황에서 확인할 수 있습니다.\n- 쿠폰으로 충전된 캔은 사용 전까지 소멸되지 않으며, 포인트는 충전 후 72시간 이내에 사용하지 않으면 자동 소멸됩니다." + android:text="@string/screen_can_coupon_guide_description" android:textColor="@color/color_bbbbbb" android:textSize="13.3sp" /> @@ -99,7 +99,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="[주의사항]" + android:text="@string/screen_can_coupon_notice_title" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -110,7 +110,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:lineSpacingExtra="5sp" android:paddingHorizontal="10dp" - android:text="- 이벤트 쿠폰을 통해 충전한 캔이나 포인트는 환불되지 않습니다.\n- 쿠폰은 상업적 용도로 사용하거나 매매할 수 없습니다.\n- 한번 등록한 쿠폰은 재사용이 불가합니다.\n- 연령 제한 정책에 따라 쿠폰이용은 본인인증한 회원만 이용 가능합니다." + android:text="@string/screen_can_coupon_notice_description" android:textColor="@color/color_bbbbbb" android:textSize="13.3sp" /> @@ -119,7 +119,7 @@ android:layout_height="wrap_content" android:layout_marginTop="13.3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="※ 쿠폰 등록 및 이용에 문제가 발생한 경우 '고객센터'로 문의주시기 바랍니다." + android:text="@string/screen_can_coupon_notice_support" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 4fc69abb..8d7ced3b 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -397,6 +397,17 @@ You must agree before proceeding with payment. Payment failed.\nPlease try again. Failed to start payment. + + Register coupon + Enter coupon number + Please enter the coupon number + Register + [Registration & Usage Guide] + - Enter the 12-digit coupon number without spaces.\n- You can check charged cans or points in the charge status screen.\n- Cans charged via coupon do not expire until used. Points expire automatically if unused within 72 hours. + [Notice] + - Cans or points charged via event coupons are non-refundable.\n- Coupons may not be sold or used for commercial purposes.\n- A registered coupon cannot be reused.\n- Coupon usage is limited to members who completed identity verification per policy. + If you experience issues with coupon registration or usage, please contact Customer Service. + An unknown error occurred. Please try again. Customer service VoiceOn Customer Service diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 4b88be5f..c0007b1d 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -397,6 +397,17 @@ 決済の進行に同意する必要があります。 決済に失敗しました。\nもう一度お試しください。 決済の開始に失敗しました。 + + クーポン登録 + クーポン番号入力 + クーポン番号を入力してください + 登録する + [登録および利用案内] + - 12桁のクーポン番号を空白なしで入力してください。\n- 充電されたCANまたはポイントは該当する充電状況で確認できます。\n- クーポンで充電したCANは使用するまで失効せず、ポイントは充電後72時間以内に使用しないと自動失効します。 + [注意事項] + - イベントクーポンでチャージしたCANやポイントは返金されません。\n- クーポンを商業目的で使用したり売買することはできません。\n- 一度登録したクーポンは再使用できません。\n- 年齢制限ポリシーにより、本人確認を完了した会員のみクーポンを利用できます。 + クーポン登録や利用に問題が発生した場合は「カスタマーセンター」にお問い合わせください。 + 不明なエラーが発生しました。もう一度お試しください。 カスタマーセンター VoiceOn カスタマーセンター diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6638c6e6..a9a8bb2a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -396,6 +396,17 @@ 결제 진행에 동의하셔야 결제가 가능합니다. 결제를 하지 못했습니다.\n다시 시도해 주세요. 결제 초기화에 실패했습니다. + + 쿠폰등록 + 쿠폰번호 입력 + 쿠폰번호를 입력해 주세요 + 등록하기 + [등록 및 사용안내] + - 공백없이 쿠폰번호 12자리를 입력해주세요.\n- 충전된 캔 또는 포인트는 해당 충전현황에서 확인할 수 있습니다.\n- 쿠폰으로 충전된 캔은 사용 전까지 소멸되지 않으며, 포인트는 충전 후 72시간 이내에 사용하지 않으면 자동 소멸됩니다. + [주의사항] + - 이벤트 쿠폰을 통해 충전한 캔이나 포인트는 환불되지 않습니다.\n- 쿠폰은 상업적 용도로 사용하거나 매매할 수 없습니다.\n- 한번 등록한 쿠폰은 재사용이 불가합니다.\n- 연령 제한 정책에 따라 쿠폰이용은 본인인증한 회원만 이용 가능합니다. + ※ 쿠폰 등록 및 이용에 문제가 발생한 경우 \'고객센터\'로 문의주시기 바랍니다. + 알 수 없는 오류가 발생했습니다. 다시 시도해 주세요. 고객센터 보이스온 고객센터