From 9a9b223d9a9dc22c4fc69d9b0ad4af37dff69c5d Mon Sep 17 00:00:00 2001 From: JSPark <48265129+pknujsp@users.noreply.github.com> Date: Mon, 11 Mar 2024 18:47:43 +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?=ED=95=A8=EC=88=98=EC=97=90=EC=84=9C=20=ED=94=84=EB=9E=98?= =?UTF-8?q?=EA=B7=B8=EB=A8=BC=ED=8A=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/intro/EmailVerificationDialog.kt | 17 ------- .../verification/EmailVerificationDialog.kt | 45 +++++++++++++++++++ .../verification/VerificationViewModel.kt | 32 ++++++++++++- .../res/layout/dialog_email_verification.xml | 17 ++++++- feature/intro/src/main/res/values/strings.xml | 1 + 5 files changed, 93 insertions(+), 19 deletions(-) delete mode 100644 feature/intro/src/main/java/com/android/mediproject/feature/intro/EmailVerificationDialog.kt create mode 100644 feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/EmailVerificationDialog.kt diff --git a/feature/intro/src/main/java/com/android/mediproject/feature/intro/EmailVerificationDialog.kt b/feature/intro/src/main/java/com/android/mediproject/feature/intro/EmailVerificationDialog.kt deleted file mode 100644 index a4fc261f..00000000 --- a/feature/intro/src/main/java/com/android/mediproject/feature/intro/EmailVerificationDialog.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.android.mediproject.feature.intro - -import android.app.Activity -import com.android.mediproject.feature.intro.databinding.DialogEmailVerificationBinding -import com.google.android.material.dialog.MaterialAlertDialogBuilder - -fun emailVerificationDialog(activity: Activity, verifyCode: (String) -> Unit, resendCode: () -> Unit) { - val binding = DialogEmailVerificationBinding.inflate(activity.layoutInflater, null, false) - val dialogBuilder = MaterialAlertDialogBuilder(activity).apply { - setView(binding.root) - } - - binding.apply { - - } - dialogBuilder.create().show() -} 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 new file mode 100644 index 00000000..e1e731a9 --- /dev/null +++ b/feature/intro/src/main/java/com/android/mediproject/feature/intro/verification/EmailVerificationDialog.kt @@ -0,0 +1,45 @@ +package com.android.mediproject.feature.intro.verification + +import android.app.Dialog +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.viewModels +import com.android.mediproject.feature.intro.databinding.DialogEmailVerificationBinding +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class EmailVerficationDialogFragment : DialogFragment() { + + private var _binding: DialogEmailVerificationBinding? = null + private val binding get() = _binding!! + + private val viewModel by viewModels() + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + _binding = DialogEmailVerificationBinding.inflate(layoutInflater, null, false) + return MaterialAlertDialogBuilder(requireActivity()).apply { + setView(binding.root) + }.create() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return binding.root + } + + override fun getView(): View = binding.root + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.viewModel = viewModel + setDialog() + } + + private fun setDialog() { + binding.run {} + } + +} 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 64952c01..a8bce70a 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,13 +1,43 @@ package com.android.mediproject.feature.intro.verification +import androidx.lifecycle.viewModelScope +import com.android.mediproject.core.common.network.Dispatcher +import com.android.mediproject.core.common.network.MediDispatchers +import com.android.mediproject.core.data.session.AccountSessionRepository import com.android.mediproject.core.data.sign.SignRepository import com.android.mediproject.core.ui.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import javax.inject.Inject @HiltViewModel class VerificationViewModel @Inject constructor( private val signRepository: SignRepository, + private val accountSessionRepository: AccountSessionRepository, + @Dispatcher(MediDispatchers.Default) private val defaultDispatcher: kotlinx.coroutines.CoroutineDispatcher, ) : BaseViewModel() { - + + val email = accountSessionRepository.lastSavedEmail.stateIn(viewModelScope, kotlinx.coroutines.flow.SharingStarted.Eagerly, "") + + private val _verificationState = MutableStateFlow(null) + val verificationState = _verificationState.asStateFlow() + + fun verifyEmail(code: String) { + viewModelScope.launch { + withContext(defaultDispatcher) { signRepository.verifyEmail(email, code) }.onSuccess { + _verificationState.value = VerificationState.Verified + }.onFailure { + _verificationState.value = VerificationState.VerifyFailed + } + } + } +} + +sealed interface VerificationState { + data object Verified : VerificationState + data object VerifyFailed : VerificationState } 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 52aa26e0..25fd8e16 100644 --- a/feature/intro/src/main/res/layout/dialog_email_verification.xml +++ b/feature/intro/src/main/res/layout/dialog_email_verification.xml @@ -6,7 +6,7 @@ + type="com.android.mediproject.feature.intro.verification.VerificationViewModel" /> @@ -40,6 +40,19 @@ android:text="@string/verificationCodeDescription" android:textSize="16sp" /> + + + + 코드를 입력하세요 완료 로그인 하려면 이메일 인증이 필요합니다 + 다음 이메일로 인증 코드가 전송되었습니다