From 3909920a4c1c52c1aa5fc2fdb9ed2519fd8c8c70 Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 2 Dec 2025 12:24:34 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=89=EB=84=A4=EC=9E=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=ED=99=94=EB=A9=B4=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 --- .../nickname/NicknameUpdateActivity.kt | 17 +-- .../nickname/NicknameUpdateViewModel.kt | 106 +++++++++--------- .../res/layout/activity_nickname_update.xml | 11 +- app/src/main/res/values-en/strings.xml | 13 +++ app/src/main/res/values-ja/strings.xml | 13 +++ app/src/main/res/values/strings.xml | 13 +++ 6 files changed, 108 insertions(+), 65 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateActivity.kt index 3d213617..8a83f28f 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateActivity.kt @@ -6,6 +6,7 @@ import android.widget.Toast import com.jakewharton.rxbinding4.widget.textChanges import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.SharedPreferenceManager @@ -31,7 +32,7 @@ class NicknameUpdateActivity : BaseActivity( } override fun setupView() { - binding.toolbar.tvBack.text = "닉네임 변경" + binding.toolbar.tvBack.text = getString(R.string.screen_nickname_update_title) binding.toolbar.tvBack.setOnClickListener { finish() } loadingDialog = LoadingDialog(this, layoutInflater) @@ -59,8 +60,9 @@ class NicknameUpdateActivity : BaseActivity( ) 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() } } @@ -72,11 +74,12 @@ class NicknameUpdateActivity : BaseActivity( } } - viewModel.priceLiveData.observe(this) { - if (it > 0) { - binding.tvChangeNickname.text = "${it}캔으로 닉네임 변경하기" + viewModel.priceLiveData.observe(this) { price -> + if (price > 0) { + binding.tvChangeNickname.text = + getString(R.string.screen_nickname_update_submit_with_can, price) } else { - binding.tvChangeNickname.text = "닉네임 변경하기" + binding.tvChangeNickname.text = getString(R.string.screen_nickname_update_submit) } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateViewModel.kt index e68006e9..a7b68495 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/profile/nickname/NicknameUpdateViewModel.kt @@ -5,8 +5,10 @@ import androidx.lifecycle.MutableLiveData import com.orhanobut.logger.Logger import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.common.ToastMessage import kr.co.vividnext.sodalive.mypage.profile.ProfileUpdateRequest import kr.co.vividnext.sodalive.user.UserRepository @@ -21,8 +23,8 @@ class NicknameUpdateViewModel(private val repository: UserRepository) : BaseView val isLoading: LiveData get() = _isLoading - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData var isCheckedNickname = false @@ -40,19 +42,17 @@ class NicknameUpdateViewModel(private val repository: UserRepository) : BaseView if (it.success && it.data != null) { _priceLiveData.value = it.data.price } else { - if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - ) - } + _toastLiveData.postValue( + it.message?.let { message -> + ToastMessage(message = message) + } ?: ToastMessage(resId = R.string.common_error_unknown) + ) } }, { _isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown)) } ) ) @@ -68,31 +68,31 @@ class NicknameUpdateViewModel(private val repository: UserRepository) : BaseView .observeOn(AndroidSchedulers.mainThread()) .subscribe( { - _isLoading.value = false - if (it.success) { - isCheckedNickname = true - _toastLiveData.postValue("사용가능한 닉네임 입니다.") - } else { - if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - ) - } - } - }, - { - _isLoading.value = false - it.message?.let { message -> Logger.e(message) } + _isLoading.value = false + if (it.success) { + isCheckedNickname = true _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.msg_nickname_update_available) + ) + } else { + _toastLiveData.postValue( + it.message?.let { message -> + ToastMessage(message = message) + } ?: ToastMessage(resId = R.string.common_error_unknown) ) } - ) + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown)) + } + ) + ) + } else { + _toastLiveData.postValue( + ToastMessage(resId = R.string.msg_nickname_update_input_required) ) - } else { - _toastLiveData.postValue("닉네임을 입력하세요.") } } @@ -111,32 +111,32 @@ class NicknameUpdateViewModel(private val repository: UserRepository) : BaseView .observeOn(AndroidSchedulers.mainThread()) .subscribe( { - _isLoading.value = false - if (it.success) { - _toastLiveData.postValue("닉네임이 변경되었습니다.") - SharedPreferenceManager.nickname = nickname - onSuccess() - } else { - if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - ) - } - } - }, - { - _isLoading.value = false - it.message?.let { message -> Logger.e(message) } + _isLoading.value = false + if (it.success) { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.msg_nickname_update_success) + ) + SharedPreferenceManager.nickname = nickname + onSuccess() + } else { + _toastLiveData.postValue( + it.message?.let { message -> + ToastMessage(message = message) + } ?: ToastMessage(resId = R.string.common_error_unknown) ) } - ) + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown)) + } + ) + ) + } else { + _toastLiveData.postValue( + ToastMessage(resId = R.string.msg_nickname_update_check_required) ) - } else { - _toastLiveData.postValue("닉네임 중복체크를 해주세요.") } } } diff --git a/app/src/main/res/layout/activity_nickname_update.xml b/app/src/main/res/layout/activity_nickname_update.xml index 89cc7c81..58cd59e5 100644 --- a/app/src/main/res/layout/activity_nickname_update.xml +++ b/app/src/main/res/layout/activity_nickname_update.xml @@ -25,7 +25,7 @@ android:layout_marginHorizontal="20dp" android:layout_marginTop="40dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="닉네임 변경으로 인해 피해를 입는 사용자가 지속적으로 발생하여 닉네임 변경을 부득이하게 유료로 전환합니다." + android:text="@string/screen_nickname_update_notice_primary" android:textColor="@color/color_eeeeee" /> @@ -58,7 +58,7 @@ android:layout_height="wrap_content" android:background="@drawable/edittext_underline" android:fontFamily="@font/gmarket_sans_medium" - android:hint="닉네임" + android:hint="@string/screen_nickname_update_hint" android:importantForAutofill="no" android:inputType="textWebEditText" android:maxLength="12" @@ -81,7 +81,7 @@ android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" android:paddingVertical="13.3dp" - android:text="중복확인" + android:text="@string/screen_nickname_update_check" android:textColor="@color/color_eeeeee" /> @@ -103,6 +103,7 @@ android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" android:paddingVertical="16dp" + android:text="@string/screen_nickname_update_submit" android:textColor="@color/white" android:textSize="18.3sp" tools:text="1000캔으로 닉네임 변경하기" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 5129d420..abd069bb 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -341,6 +341,19 @@ Re-enter the new password * At least 8 characters with letters and numbers Update password + + Change nickname + Because some users keep being harmed by nickname changes, we must switch nickname changes to a paid feature. + Your first change is free. All later changes will be paid. + Nickname (up to 12 characters) + Nickname + Check availability + Change nickname + Change nickname with %1$d cans + Nickname is available. + Please enter a nickname. + Nickname changed. + Please check nickname availability. View my channel Charge cans Point reward diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 90b271e1..e06bc090 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -341,6 +341,19 @@ 新しいパスワードをもう一度入力してください * 英数字8文字以上 パスワードを変更 + + ニックネーム変更 + ニックネーム変更による被害が継続的に発生しているため、やむを得ず有料に切り替えます。 + 初回1回のみ無料で変更でき、それ以降は有料になります。 + ニックネーム(最大12文字) + ニックネーム + 重複確認 + ニックネームを変更 + %1$dCANでニックネームを変更 + 使用可能なニックネームです。 + ニックネームを入力してください。 + ニックネームを変更しました。 + ニックネームの重複チェックを行ってください。 マイチャンネルを見る CANチャージ ポイントリワード diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c36e8f2e..86046bf7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -340,6 +340,19 @@ 신규 비밀번호를 재입력해주세요 * 영문, 숫자 포함 8자 이상 비밀번호 변경하기 + + 닉네임 변경 + 닉네임 변경으로 인해 피해를 입는 사용자가 지속적으로 발생하여 닉네임 변경을 부득이하게 유료로 전환합니다. + 최초 1회에 한해서 무료로 변경이 가능하고, 그 이후부터는 유료로 전환됩니다. + 닉네임 (최대 12자) + 닉네임 + 중복확인 + 닉네임 변경하기 + %1$d캔으로 닉네임 변경하기 + 사용가능한 닉네임 입니다. + 닉네임을 입력하세요. + 닉네임이 변경되었습니다. + 닉네임 중복체크를 해주세요. 내 채널 보기 캔 충전 포인트 리워드