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" /> + + + + 코드를 입력하세요 완료 로그인 하려면 이메일 인증이 필요합니다 + 다음 이메일로 인증 코드가 전송되었습니다