diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpActivity.kt index 9aff98f7..3736788a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpActivity.kt @@ -113,17 +113,18 @@ class SignUpActivity : BaseActivity(ActivitySignupBinding binding.ivPrivacyPolicy.isSelected = it } - viewModel.signUpErrorLiveData.observe(this) { - Toast.makeText(applicationContext, it.message, Toast.LENGTH_LONG).show() + viewModel.signUpErrorLiveData.observe(this) { error -> + val message = resolveMessage(error.message) ?: return@observe + Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show() - when (it.errorProperty) { + when (error.errorProperty) { "email" -> { - binding.etEmail.error = it.message + binding.etEmail.error = message binding.etEmail.requestFocus() } "password" -> { - binding.etPassword.error = it.message + binding.etPassword.error = message binding.etPassword.requestFocus() } } @@ -137,8 +138,10 @@ class SignUpActivity : BaseActivity(ActivitySignupBinding } } - viewModel.toastLiveData.observe(this) { - it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } + viewModel.toastLiveData.observe(this) { message -> + resolveMessage(message)?.let { + Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() + } } } @@ -150,4 +153,12 @@ class SignUpActivity : BaseActivity(ActivitySignupBinding ) }, 100) } + + private fun resolveMessage(message: SignUpUiMessage?): String? { + return when (message) { + is SignUpUiMessage.Text -> message.value + is SignUpUiMessage.Resource -> getString(message.resId) + null -> null + } + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpError.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpError.kt index 7ae5a244..5f6a893d 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpError.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpError.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.user.signup import androidx.annotation.Keep +import androidx.annotation.StringRes import com.google.gson.annotations.SerializedName @Keep @@ -8,3 +9,13 @@ data class SignUpError( @SerializedName("errorProperty") val errorProperty: String, @SerializedName("message") val message: String ) + +data class SignUpUiError( + val errorProperty: String, + val message: SignUpUiMessage +) + +sealed class SignUpUiMessage { + data class Resource(@StringRes val resId: Int) : SignUpUiMessage() + data class Text(val value: String) : SignUpUiMessage() +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpViewModel.kt index 0b497623..aaf99351 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/signup/SignUpViewModel.kt @@ -6,6 +6,7 @@ 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.tracking.FirebaseTracking @@ -23,12 +24,12 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() val isAgreePrivacyPolicyLiveData: LiveData get() = _isAgreePrivacyPolicyLiveData - private val _signUpErrorLiveData = MutableLiveData() - val signUpErrorLiveData: LiveData + private val _signUpErrorLiveData = MutableLiveData() + val signUpErrorLiveData: LiveData get() = _signUpErrorLiveData - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private var _isLoading = MutableLiveData(false) @@ -63,20 +64,33 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() onSuccess(it.message) FirebaseTracking.signUp("email") } else { - if (it.errorProperty != null && it.message != null) { - _signUpErrorLiveData.postValue( - SignUpError(it.errorProperty, it.message) - ) - } else if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + when { + it.errorProperty != null && it.message != null -> { + _signUpErrorLiveData.postValue( + SignUpUiError( + it.errorProperty, + SignUpUiMessage.Text(it.message) + ) + ) + } + + it.message != null -> { + _toastLiveData.postValue(SignUpUiMessage.Text(it.message)) + } + + else -> { + _toastLiveData.postValue( + SignUpUiMessage.Resource(R.string.common_error_unknown) + ) + } } } }, { it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue( + SignUpUiMessage.Resource(R.string.common_error_unknown) + ) } ) ) @@ -85,9 +99,9 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() private fun validation(): Boolean { if (email.isBlank()) { _signUpErrorLiveData.postValue( - SignUpError( + SignUpUiError( "email", - "이메일을 입력하세요." + SignUpUiMessage.Resource(R.string.signup_error_email_required) ) ) @@ -96,9 +110,9 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() if (password.isBlank()) { _signUpErrorLiveData.postValue( - SignUpError( + SignUpUiError( "password", - "비밀번호를 입력하세요." + SignUpUiMessage.Resource(R.string.signup_error_password_required) ) ) @@ -110,9 +124,9 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() !_isAgreeTermsOfServiceLiveData.value!! ) { _signUpErrorLiveData.postValue( - SignUpError( + SignUpUiError( "", - "약관에 동의하셔야 회원가입이 가능합니다." + SignUpUiMessage.Resource(R.string.signup_error_terms_required) ) ) @@ -121,9 +135,9 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() if (!PatternsCompat.EMAIL_ADDRESS.matcher(email).matches()) { _signUpErrorLiveData.postValue( - SignUpError( + SignUpUiError( "email", - "올바른 이메일을 입력해 주세요" + SignUpUiMessage.Resource(R.string.signup_error_email_invalid) ) ) @@ -137,9 +151,9 @@ class SignUpViewModel(private val repository: UserRepository) : BaseViewModel() .not() ) { _signUpErrorLiveData.postValue( - SignUpError( + SignUpUiError( "password", - "영문, 숫자 포함 8자 이상의 비밀번호를 입력해 주세요." + SignUpUiMessage.Resource(R.string.signup_error_password_rule) ) ) diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index af9a7989..d4df3455 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -67,6 +67,11 @@ Terms of Service Privacy Policy (Required) + Please enter your email. + Please enter your password. + You must agree to the terms to sign up. + Please enter a valid email. + Enter at least 8 characters with letters and numbers. Please enter your email. Please enter your password. Could not sign in with Google. Please try again. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 4c7bf86d..90569b36 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -67,6 +67,11 @@ 利用規約 個人情報の収集・利用について (必須) + メールアドレスを入力してください。 + パスワードを入力してください。 + 利用規約に同意すると会員登録できます。 + 正しいメールアドレスを入力してください。 + 英字と数字を含む8文字以上のパスワードを入力してください。 メールアドレスを入力してください。 パスワードを入力してください。 Googleでログインできませんでした。もう一度お試しください。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 10b8e601..d170c3e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -66,6 +66,11 @@ 이용약관 개인정보수집 및 이용동의 (필수) + 이메일을 입력하세요. + 비밀번호를 입력하세요. + 약관에 동의하셔야 회원가입이 가능합니다. + 올바른 이메일을 입력해 주세요. + 영문, 숫자 포함 8자 이상의 비밀번호를 입력해 주세요. 이메일을 입력하세요. 비밀번호를 입력하세요. 구글 로그인을 하지 못했습니다. 다시 시도해 주세요