Skip to content

Commit e6f4ecc

Browse files
author
AnkitDroidGit
committed
Used flatMap(), filter() and singleOnError() for email verification
Used flatMap(), just() and singleOnError() to check length of enter text Used retryWhen() and FlatMap() for error handling
1 parent c9f1848 commit e6f4ecc

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

RxBinding/src/main/java/com/freeankit/rxbinding/MainActivity.kt

+80
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,91 @@ package com.freeankit.rxbinding
22

33
import android.support.v7.app.AppCompatActivity
44
import android.os.Bundle
5+
import android.util.Patterns
6+
import com.jakewharton.rxbinding2.widget.RxTextView
7+
import io.reactivex.Observable
8+
import io.reactivex.ObservableTransformer
9+
import io.reactivex.Single
10+
import io.reactivex.android.schedulers.AndroidSchedulers
11+
import kotlinx.android.synthetic.main.activity_main.*
12+
import java.util.concurrent.TimeUnit
513

614
class MainActivity : AppCompatActivity() {
715

816
override fun onCreate(savedInstanceState: Bundle?) {
917
super.onCreate(savedInstanceState)
1018
setContentView(R.layout.activity_main)
19+
20+
RxTextView.afterTextChangeEvents(editTextEmail)
21+
.skipInitialValue()
22+
.map {
23+
emailWrapper.error = null
24+
it.view().text.toString()
25+
}
26+
.debounce(1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread())
27+
.compose(lengthGreaterThanSix)
28+
.compose(verifyEmailPattern)
29+
.compose(retryWhenError {
30+
emailWrapper.error = it.message
31+
})
32+
.subscribe()
33+
34+
RxTextView.afterTextChangeEvents(editTextPassword)
35+
.skipInitialValue()
36+
.map {
37+
passwordWrapper.error = null
38+
it.view().text.toString()
39+
}
40+
.debounce(1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread())
41+
.compose(lengthGreaterThanSix)
42+
.compose(retryWhenError {
43+
passwordWrapper.error = it.message
44+
})
45+
.subscribe()
46+
}
47+
private inline fun retryWhenError(crossinline onError: (ex: Throwable) -> Unit): ObservableTransformer<String, String> = ObservableTransformer { observable ->
48+
observable.retryWhen { errors ->
49+
errors.flatMap {
50+
onError(it)
51+
Observable.just("")
52+
}
53+
}
54+
}
55+
56+
private val lengthGreaterThanSix = ObservableTransformer<String, String> { observable ->
57+
observable.flatMap {
58+
Observable.just(it).map { it.trim() } // - abcdefg - |
59+
.filter { it.length > 6 }
60+
.singleOrError()
61+
.onErrorResumeNext {
62+
if (it is NoSuchElementException) {
63+
Single.error(Exception("Length should be greater than 6"))
64+
} else {
65+
Single.error(it)
66+
}
67+
}
68+
.toObservable()
69+
}
1170
}
71+
72+
private val verifyEmailPattern = ObservableTransformer<String, String> { observable ->
73+
observable.flatMap {
74+
Observable.just(it).map { it.trim() }
75+
.filter {
76+
Patterns.EMAIL_ADDRESS.matcher(it).matches()
77+
}
78+
.singleOrError()
79+
.onErrorResumeNext {
80+
if (it is NoSuchElementException) {
81+
Single.error(Exception("Email not valid"))
82+
} else {
83+
Single.error(it)
84+
}
85+
}
86+
.toObservable()
87+
}
88+
}
89+
90+
91+
1292
}

0 commit comments

Comments
 (0)