From f1b3adc36a5aba6d4abee72acd3595dcd1e09b95 Mon Sep 17 00:00:00 2001 From: JSPark <48265129+pknujsp@users.noreply.github.com> Date: Mon, 11 Mar 2024 19:59:58 +0900 Subject: [PATCH] =?UTF-8?q?#219=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=EB=8B=A4=EC=9D=B4=EC=96=BC=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/bindingadapter/BindingAdapter.kt | 11 +++++- .../core/common/bindingadapter/ISendText.kt | 4 +- .../mediproject/core/ui/base/view/Subtitle.kt | 6 +-- .../MedicineCommentsViewModel.kt | 2 +- .../verification/EmailVerificationDialog.kt | 37 +++++++++++++++++-- .../verification/VerificationViewModel.kt | 7 ++-- .../res/layout/dialog_email_verification.xml | 5 +-- feature/intro/src/main/res/values/strings.xml | 2 + 8 files changed, 57 insertions(+), 17 deletions(-) diff --git a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt index 75744e320..b900c239a 100644 --- a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt +++ b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt @@ -1,6 +1,7 @@ package com.android.mediproject.core.common.bindingadapter import android.graphics.Bitmap +import android.text.Editable import android.text.Spanned import android.view.View import android.widget.EditText @@ -66,11 +67,19 @@ object BindingAdapter { @JvmStatic fun setOnClick(view: View, iSendText: ISendText, editText: EditText) { view.setOnClickListener { - iSendText.onClickedSendButton(editText.text) + iSendText.onClickWithText(editText.text.toString()) editText.text.clear() } } + @BindingAdapter("onClickWithText", "otherEditText", requireAll = true) + @JvmStatic + fun setOnClickWithText(view: TextView, onClickWithText: ISendText, otherEditText: Editable) { + view.setOnClickListener { + onClickWithText.onClickWithText(otherEditText.toString()) + } + } + /** * ImageView에 이미지를 설정합니다. * 이미지가 없을 경우 TextView에 메시지를 표시합니다. diff --git a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/ISendText.kt b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/ISendText.kt index 62af5b7b8..d21c83712 100644 --- a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/ISendText.kt +++ b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/ISendText.kt @@ -1,5 +1,5 @@ package com.android.mediproject.core.common.bindingadapter interface ISendText { - fun onClickedSendButton(text: CharSequence) -} \ No newline at end of file + fun onClickWithText(text: String) +} diff --git a/core/ui/src/main/java/com/android/mediproject/core/ui/base/view/Subtitle.kt b/core/ui/src/main/java/com/android/mediproject/core/ui/base/view/Subtitle.kt index 16a68b16c..0897cffee 100644 --- a/core/ui/src/main/java/com/android/mediproject/core/ui/base/view/Subtitle.kt +++ b/core/ui/src/main/java/com/android/mediproject/core/ui/base/view/Subtitle.kt @@ -24,9 +24,9 @@ class Subtitle @JvmOverloads constructor( const val PASSWORD = 1 } - lateinit var title: TextView - lateinit var redPoint: TextView - lateinit var inputData: EditText + var title: TextView + var redPoint: TextView + var inputData: EditText init { val infService = Context.LAYOUT_INFLATER_SERVICE diff --git a/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt b/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt index 818eda5fb..0e92cfa35 100644 --- a/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt +++ b/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt @@ -174,7 +174,7 @@ class MedicineCommentsViewModel @Inject constructor( } } - override fun onClickedSendButton(text: CharSequence) {/* viewModelScope.launch { + override fun onClickWithText(text: String) {/* viewModelScope.launch { if (text.isEmpty()) { _action.emit(OnCompleteApplyCommentOrReply(false)) } else { diff --git a/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/EmailVerificationDialog.kt b/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/EmailVerificationDialog.kt index e1e731a95..581211d58 100644 --- a/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/EmailVerificationDialog.kt +++ b/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/EmailVerificationDialog.kt @@ -5,11 +5,15 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.DialogFragment import androidx.fragment.app.viewModels +import com.android.mediproject.core.common.viewmodel.repeatOnStarted +import com.android.mediproject.feature.intro.R import com.android.mediproject.feature.intro.databinding.DialogEmailVerificationBinding import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.filterNotNull @AndroidEntryPoint class EmailVerficationDialogFragment : DialogFragment() { @@ -35,11 +39,38 @@ class EmailVerficationDialogFragment : DialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.viewModel = viewModel - setDialog() + binding.lifecycleOwner = viewLifecycleOwner + + init() + viewLifecycleOwner.repeatOnStarted { + viewModel.verificationState.filterNotNull().collect { + when (it) { + is VerificationState.Verified -> { + Toast.makeText(requireContext(), getString(R.string.confirmedVerificationCode), Toast.LENGTH_SHORT).show() + dismiss() + } + + is VerificationState.VerifyFailed -> { + Toast.makeText(requireContext(), getString(R.string.verificationCodeError), Toast.LENGTH_SHORT).show() + } + } + } + } } - private fun setDialog() { - binding.run {} + private fun init() { + binding.run { + positiveButton.setOnClickListener { + if (dialogSubtitle1.inputData.text.toString().isEmpty()) { + Toast.makeText(requireContext(), getString(R.string.verificationCodeHint), Toast.LENGTH_SHORT).show() + return@setOnClickListener + } + viewModel.onClickWithText(dialogSubtitle1.inputData.text.toString()) + } + negativeButton.setOnClickListener { + dismiss() + } + } } } diff --git a/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/VerificationViewModel.kt b/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/VerificationViewModel.kt index a8bce70a9..ef5f1c5d2 100644 --- a/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/VerificationViewModel.kt +++ b/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/VerificationViewModel.kt @@ -1,6 +1,7 @@ package com.android.mediproject.feature.intro.verification import androidx.lifecycle.viewModelScope +import com.android.mediproject.core.common.bindingadapter.ISendText import com.android.mediproject.core.common.network.Dispatcher import com.android.mediproject.core.common.network.MediDispatchers import com.android.mediproject.core.data.session.AccountSessionRepository @@ -19,16 +20,16 @@ class VerificationViewModel @Inject constructor( private val signRepository: SignRepository, private val accountSessionRepository: AccountSessionRepository, @Dispatcher(MediDispatchers.Default) private val defaultDispatcher: kotlinx.coroutines.CoroutineDispatcher, -) : BaseViewModel() { +) : BaseViewModel(), ISendText { val email = accountSessionRepository.lastSavedEmail.stateIn(viewModelScope, kotlinx.coroutines.flow.SharingStarted.Eagerly, "") private val _verificationState = MutableStateFlow(null) val verificationState = _verificationState.asStateFlow() - fun verifyEmail(code: String) { + override fun onClickWithText(text: String) { viewModelScope.launch { - withContext(defaultDispatcher) { signRepository.verifyEmail(email, code) }.onSuccess { + withContext(defaultDispatcher) { signRepository.verifyEmail(email.value, text) }.onSuccess { _verificationState.value = VerificationState.Verified }.onFailure { _verificationState.value = VerificationState.VerifyFailed diff --git a/feature/intro/src/main/res/layout/dialog_email_verification.xml b/feature/intro/src/main/res/layout/dialog_email_verification.xml index 25fd8e16a..d48c1c5f0 100644 --- a/feature/intro/src/main/res/layout/dialog_email_verification.xml +++ b/feature/intro/src/main/res/layout/dialog_email_verification.xml @@ -7,7 +7,6 @@ - + android:textSize="14sp" /> 완료 로그인 하려면 이메일 인증이 필요합니다 다음 이메일로 인증 코드가 전송되었습니다 + 인증 코드가 틀렸습니다 + 인증 완료