Interfaces tengo que extender en mi Activity
IEnrollmentUseCase,IValidationUseCase:
class EnrollmentActivity : AppCompatActivity() , IEnrollmentUseCase, IValidationUseCase {
En la interfaz IEnrollmentUseCase deberás sobreescribir los siguientes métodos, ellos serán llamados internamente para tener el control del estado de la validación:
- fun doAfterEnrollmentStarted()
- fun doAfterEnrollmentFinished(pinVerificationID: String)
- fun showErrorEnrollment(exception: BioException)
interface IEnrollmentUseCase {
val enrollmentUseCase : EnrollmentUseCase
fun doAfterEnrollmentStarted()
fun doAfterEnrollmentFinished(pinVerificationID: String)
fun showErrorEnrollment(exception: BioException)
}
En la interfaz IValidationUseCase deberás sobreescribir los siguientes métodos, ellos serán llamados internamente para tener el control del estado de la validación:
- fun doAfterValidationStarted()
- fun doAfterFieldValidating(field: Field)
- fun doAfterFieldValidated(field: Field)
- fun doAfterValidationFinished()
- fun showErrorValidation(exception: BioException)
interface IValidationUseCase {
val enrollmentUseCase : EnrollmentUseCase
fun doAfterValidationStarted()
fun doAfterFieldValidating(field: Field)
fun doAfterFieldValidated(field: Field)
fun doAfterValidationFinished()
fun showErrorValidation(exception: BioException)
sealed class Field {
object Email: Field()
object Phone: Field()
}
}
¿Cómo integrar registro de usuario?
Se trata de un caso de uso que permite, mediante una llamada, crear o recuperar una cuenta a partir de un usuario dependiendo si está ya creado en la BBDD de Biocryptology.
- Llamada: enrollmentUseCase.enrollment(user)
- Parámetro de entrada: Objeto User() con campos {email, prefix, phone, name, lastName}
- locale es un campo no obligatorio, en caso de no pasarle argumento lo setearemos por defecto a inglés.
binding.btnSend.setOnClickListener {
hideKeyboard()
val user = EnrollmentUseCase.User(
binding.etEmail.text.toString(),
34,
binding.etPhone.text.toString(),
binding.etName.text.toString(),
binding.etLastName.text.toString(),
locale = getLocale())
enrollmentUseCase.enrollment(user)
}
Las interfaces EnrollmentUseCase y ValidationUseCase lanzarán eventos que informarán del estado del registro:
interface IEnrollmentUseCase {
|
interface IValidationUseCase { |
Una vez que se ha completado el enrollment salta el método doAfterEnrollmentFinished sobreescrito y, será en este punto, donde sepamos que ha finalizado en enrollment correctamente.
Caso de uso que permite ver el estado de la validación del pin con los siguientes estados
- PIN { AccountCreated, EmailValidating, PhoneValidating, Error}
sealed class PinStatus {
object AccountCreated: PinStatus()
object PhoneValidating: PinStatus()
object EmailValidating: PinStatus()
data class Error(val error: BioException): PinStatus()
}
¿Sabemos el estado del registro al iniciar la app desde 0?
Puede guardar en BioSharedPreferences el objeto User del usuario y hacer una consulta al método userStatus con los campos email y phone y nos devolverá el estado que se encuentra la validación del usuario:
bioSharedPreferences.currentUser?.let {
PublicDataSource(bioSharedPreferences).userStatus(it.email?:"",it.mobilePhone?:"") { status ->
when (status) {
PublicDataSource.EnrollmentStatus.ValidateEmail -> {
enrollmentUseCase.validate()
validatingField(IValidationUseCase.Field.Email)
}
PublicDataSource.EnrollmentStatus.ValidatePhone -> {
enrollmentUseCase.validate()
validatingField(IValidationUseCase.Field.Phone)
}
PublicDataSource.EnrollmentStatus.AccountCreated -> {
// Enrollment success
}
PublicDataSource.EnrollmentStatus.Enrollment -> {
// Init enrollment
}
PublicDataSource.EnrollmentStatus.Error -> {
// Error
}
}
}
}