This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class EitherViewModel : ViewModel() { | |
private val mutableValidation: MutableLiveData<Either<String, Data>> = MutableLiveData() | |
val validation: LiveData<Either<String, Data>> | |
get() = mutableValidation | |
fun validate(mail: String, phoneNumber: String) { | |
mutableValidation.value = validateData(mail, phoneNumber) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class EitherActivity : AppCompatActivity() { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_input) | |
val viewModel = ViewModelProviders.of(this)[EitherViewModel::class.java] | |
signup_button.setOnClickListener { | |
viewModel.validate(email.text.toString(), number.text.toString()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun handleLeft(error: String) { | |
showMessage(error) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun handleRight(data: Data) { | |
val message = "Mail: ${data.mail} Phone: ${data.phone}" | |
showMessage(message) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed class ValidationError { | |
object InvalidMail : ValidationError() | |
object InvalidPhoneNumber : ValidationError() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun String.validatedMail(): Validated<Nel<ValidationError>, String> = | |
when { | |
validMail(this) -> this.valid() | |
else -> ValidationError.InvalidMail.nel().invalid() | |
} | |
fun String.validatedPhoneNumber(): Validated<Nel<ValidationError>, String> = | |
when { | |
validNumber(this) -> this.valid() | |
else -> ValidationError.InvalidPhoneNumber.nel().invalid() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ValidatedNelValidationErrorViewModel : ViewModel() { | |
private val mutableValidation: MutableLiveData<Validated<Nel<ValidationError>, Data>> = MutableLiveData() | |
val validation: LiveData<Validated<Nel<ValidationError>, Data>> | |
get() = mutableValidation | |
fun validate(mail: String, phoneNumber: String) { | |
mutableValidation.value = validateData(mail, phoneNumber) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ValidatedNelValidationErrorActivity : AppCompatActivity() { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_input) | |
val viewModel = ViewModelProviders.of(this)[ValidatedNelValidationErrorViewModel::class.java] | |
signup_button.setOnClickListener { | |
viewModel.validate(email.text.toString(), number.text.toString()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun handleInvalid(errors: Nel<ValidationError>) { | |
errors.map { handleInvalidField(it) }.all.forEach { it.second.error = it.first } | |
} | |
fun handleInvalidField(validationError: ValidationError): Pair<String, TextInputLayout> = | |
when (validationError) { | |
ValidationError.InvalidMail -> Pair(getString(R.string.invalid_mail), emailWrapper) | |
ValidationError.InvalidPhoneNumber -> Pair(getString(R.string.invalid_phone_number), numberWrapper) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun handleValid(data: Data) { | |
val message = "Mail: ${data.mail} Phone: ${data.phone}" | |
showMessage(message) | |
} |