Skip to content

Instantly share code, notes, and snippets.

View dcampogiani's full-sized avatar
🌴
On vacation

Daniele Campogiani dcampogiani

🌴
On vacation
View GitHub Profile
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)
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())
private fun handleLeft(error: String) {
showMessage(error)
}
private fun handleRight(data: Data) {
val message = "Mail: ${data.mail} Phone: ${data.phone}"
showMessage(message)
}
sealed class ValidationError {
object InvalidMail : ValidationError()
object InvalidPhoneNumber : ValidationError()
}
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()
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)
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())
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)
}
private fun handleValid(data: Data) {
val message = "Mail: ${data.mail} Phone: ${data.phone}"
showMessage(message)
}