From 7e74bd1e4d971bcd10eb88caa4624132b26ad0cd Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 1 Dec 2025 13:56:14 +0900 Subject: [PATCH] =?UTF-8?q?Login=20=EC=9E=85=EB=A0=A5=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=EB=AC=B8=EA=B5=AC=20=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 이메일·비밀번호 미입력 안내를 ko/en/ja 리소스로 추가 토스트 메시지를 리소스 기반 메시지 클래스로 전달 --- .../sodalive/user/login/LoginActivity.kt | 9 ++- .../sodalive/user/login/LoginViewModel.kt | 61 ++++++++++--------- app/src/main/res/values-en/strings.xml | 2 + app/src/main/res/values-ja/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 5 files changed, 46 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt index 9a8b70a9..e65a3968 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt @@ -190,8 +190,13 @@ class LoginActivity : BaseActivity(ActivityLoginBinding::i } ) - viewModel.toastLiveData.observe(this) { - it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } + viewModel.toastLiveData.observe(this) { message -> + val text = when (message) { + is LoginUiMessage.Text -> message.value + is LoginUiMessage.Resource -> getString(message.resId) + null -> null + } + text?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } } viewModel.isLoading.observe(this) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginViewModel.kt index 7d870b25..62067695 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginViewModel.kt @@ -1,10 +1,12 @@ package kr.co.vividnext.sodalive.user.login +import androidx.annotation.StringRes import androidx.lifecycle.LiveData 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.user.UserRepository @@ -14,8 +16,8 @@ class LoginViewModel(private val repository: UserRepository) : BaseViewModel() { var email = "" var password = "" - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private var _isLoading = MutableLiveData(false) @@ -46,19 +48,17 @@ class LoginViewModel(private val repository: UserRepository) : BaseViewModel() { SharedPreferenceManager.profileImage = it.data.profileImage onSuccess() } else { - if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - ) - } + _toastLiveData.postValue( + it.message?.let { message -> + LoginUiMessage.Text(message) + } ?: LoginUiMessage.Resource(R.string.common_error_unknown) + ) } }, { _isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(LoginUiMessage.Resource(R.string.common_error_unknown)) } ) ) @@ -88,19 +88,17 @@ class LoginViewModel(private val repository: UserRepository) : BaseViewModel() { SharedPreferenceManager.profileImage = it.data.profileImage onSuccess() } else { - if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - ) - } + _toastLiveData.postValue( + it.message?.let { message -> + LoginUiMessage.Text(message) + } ?: LoginUiMessage.Resource(R.string.common_error_unknown) + ) } }, { _isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(LoginUiMessage.Resource(R.string.common_error_unknown)) } ) ) @@ -108,12 +106,16 @@ class LoginViewModel(private val repository: UserRepository) : BaseViewModel() { fun login(onSuccess: (String?) -> Unit) { if (email.isBlank()) { - _toastLiveData.postValue("이메일을 입력하세요.") + _toastLiveData.postValue( + LoginUiMessage.Resource(R.string.login_error_email_required) + ) return } if (password.isBlank()) { - _toastLiveData.postValue("비밃번호를 입력하세요.") + _toastLiveData.postValue( + LoginUiMessage.Resource(R.string.login_error_password_required) + ) return } @@ -134,21 +136,24 @@ class LoginViewModel(private val repository: UserRepository) : BaseViewModel() { SharedPreferenceManager.profileImage = it.data.profileImage onSuccess(it.message) } else { - if (it.message != null) { - _toastLiveData.postValue(it.message) - } else { - _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." - ) - } + _toastLiveData.postValue( + it.message?.let { message -> + LoginUiMessage.Text(message) + } ?: LoginUiMessage.Resource(R.string.common_error_unknown) + ) } }, { _isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(LoginUiMessage.Resource(R.string.common_error_unknown)) } ) ) } } + +sealed class LoginUiMessage { + data class Resource(@StringRes val resId: Int) : LoginUiMessage() + data class Text(val value: String) : LoginUiMessage() +} diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index e8f0d152..af9a7989 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -67,6 +67,8 @@ Terms of Service Privacy Policy (Required) + Please enter your email. + Please enter your password. Could not sign in with Google. Please try again. Could not sign in. Please try again. Could not sign in with Kakao. Please try again. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 2ee29a16..4c7bf86d 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -67,6 +67,8 @@ 利用規約 個人情報の収集・利用について (必須) + メールアドレスを入力してください。 + パスワードを入力してください。 Googleでログインできませんでした。もう一度お試しください。 ログインできませんでした。もう一度お試しください。 Kakaoアカウントでログインできませんでした。もう一度お試しください。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 90546315..10b8e601 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -66,6 +66,8 @@ 이용약관 개인정보수집 및 이용동의 (필수) + 이메일을 입력하세요. + 비밀번호를 입력하세요. 구글 로그인을 하지 못했습니다. 다시 시도해 주세요 로그인을 하지 못했습니다. 다시 시도해 주세요 카카오 계정으로 로그인 하지 못했습니다. 다시 시도해 주세요