Skip to content

Commit 77b67f7

Browse files
authored
Merge pull request #22 from Kyash/fix_custom_validator
Fix custom validator
2 parents 5b962d7 + fd7e7ac commit 77b67f7

File tree

13 files changed

+89
-77
lines changed

13 files changed

+89
-77
lines changed

README.md

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,24 +77,52 @@ focus_changed | Validate when the focus is changed
7777
This library provides some common validators
7878

7979
Validator | Screenshot
80-
:--: | :--
80+
:--: | :--:
8181
RequiredValidator | ![required_validator.gif](art/required_validator.gif)
8282
EmailValidator | ![email_validator.gif](art/email_validator.gif)
83-
NumberOnlyValidator | Coming soon
83+
NumberOnlyValidator |
8484
AsciiOnlyValidator | ![ascii_validator.gif](art/ascii_validator.gif)
85-
HiraganaOnlyValidator | Coming soon
86-
KatakanaOnlyValidator | Coming soon
85+
HiraganaOnlyValidator |
86+
KatakanaOnlyValidator |
8787

8888

8989

9090
## Custom validator
9191
You can create the custom validator by using `VtlValidator`.
9292
Since `VtlValidator` uses RxJava2, it can handle async logic like API as well!
9393

94-
```
94+
[MaterialDesignColorsValidator](https://github.com/Kyash/validatable-textinput-layout/blob/master/example/src/main/java/co/kyash/vtl/example/validators/MaterialDesignColorsValidator.kt) is example to get data via API and validate the input value.
95+
96+
```kotlin
97+
class MaterialDesignColorsValidator(
98+
private val api: MaterialDesignColorsApi,
99+
private val context: Context
100+
) : VtlValidator {
101+
102+
override fun validateAsCompletable(context: Context, text: String?): Completable {
103+
return api.all()
104+
.onErrorResumeNext { Single.error(VtlValidationFailureException(context.getString(R.string.validation_error_server))) }
105+
.flatMapCompletable { list ->
106+
if (text?.trim() != null) {
107+
list.filter { it == text.trim().toLowerCase() }
108+
.forEach { return@flatMapCompletable Completable.complete() }
109+
}
110+
return@flatMapCompletable Completable.error(VtlValidationFailureException(getErrorMessage()))
111+
}
112+
}
95113

114+
override fun validate(text: String?): Boolean {
115+
throw UnsupportedOperationException("sync method is not arrowed because this validation uses async API response.")
116+
}
117+
118+
override fun getErrorMessage(): String {
119+
return context.getString(R.string.validation_error_colors)
120+
}
121+
}
96122
```
97123

124+
![custom_validator.gif](art/custom_validator.gif)
125+
98126
## Contributing
99127
We are always welcome your contribution!
100128
If you find a bug or want to add new feature, please raise issue.

art/custom_validator.gif

484 KB
Loading

example/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ dependencies {
6666
implementation depends.support.cardview
6767

6868
//==================== Network ====================
69-
implementation depends.okhttp3.jsonMock
70-
7169
implementation depends.retrofit.core
7270
implementation depends.retrofit.converterMoshi
7371
implementation depends.retrofit.adapterRxJava2
@@ -86,6 +84,10 @@ dependencies {
8684
transitive = true
8785
}
8886

87+
//==================== Debug ====================
88+
debugImplementation depends.stetho.core
89+
debugImplementation depends.stetho.okhttp3
90+
8991
//==================== Test ====================
9092
testImplementation depends.junit
9193
testImplementation depends.mockitoKotlin

example/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77

88
<application
9+
android:name=".App"
910
android:allowBackup="true"
1011
android:hardwareAccelerated="true"
1112
android:icon="@mipmap/ic_launcher"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package co.kyash.vtl.example
2+
3+
import android.app.Application
4+
import com.facebook.stetho.Stetho
5+
6+
class App : Application() {
7+
8+
override fun onCreate() {
9+
super.onCreate()
10+
setUpStetho()
11+
}
12+
13+
private fun setUpStetho() {
14+
Stetho.initializeWithDefaults(this)
15+
}
16+
}

example/src/main/java/co/kyash/vtl/example/MainActivity.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import android.widget.Toast
99
import co.kyash.vtl.ValidatableView
1010
import co.kyash.vtl.example.api.MaterialDesignColorsApi
1111
import co.kyash.vtl.example.databinding.ActivityMainBinding
12+
import co.kyash.vtl.example.validators.MaterialDesignColorsValidator
1213
import co.kyash.vtl.validators.AsciiOnlyValidator
1314
import co.kyash.vtl.validators.EmailValidator
1415
import co.kyash.vtl.validators.NumberOnlyValidator
1516
import co.kyash.vtl.validators.RequiredValidator
1617
import com.crashlytics.android.Crashlytics
18+
import com.facebook.stetho.okhttp3.StethoInterceptor
1719
import com.squareup.moshi.Moshi
1820
import io.fabric.sdk.android.Fabric
1921
import io.reactivex.Completable
@@ -42,7 +44,7 @@ class MainActivity : AppCompatActivity() {
4244
.baseUrl("https://raw.githubusercontent.com")
4345
.addConverterFactory(MoshiConverterFactory.create(Moshi.Builder().build()))
4446
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
45-
.client(OkHttpClient.Builder().build())
47+
.client(OkHttpClient.Builder().addNetworkInterceptor(StethoInterceptor()).build())
4648
.build()
4749
.create(MaterialDesignColorsApi::class.java)
4850

@@ -68,6 +70,8 @@ class MainActivity : AppCompatActivity() {
6870
validatableViewsForTriggerFocusChanged.addAll(arrayOf(
6971
binding.email2.register(EmailValidator(getString(R.string.validation_error_email)))
7072
))
73+
74+
binding.colors.register(MaterialDesignColorsValidator(api, this))
7175
}
7276

7377
private fun onSubmitClick(@Suppress("UNUSED_PARAMETER") view: View) {

example/src/main/java/co/kyash/vtl/example/validators/MaterialDesignColorsValidator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ class MaterialDesignColorsValidator(
1818
.onErrorResumeNext { Single.error(VtlValidationFailureException(context.getString(R.string.validation_error_server))) }
1919
.flatMapCompletable { list ->
2020
if (text?.trim() != null) {
21-
list.filter { it == text }
22-
.first { return@flatMapCompletable Completable.complete() }
21+
list.filter { it == text.trim().toLowerCase() }
22+
.forEach { return@flatMapCompletable Completable.complete() }
2323
}
2424
return@flatMapCompletable Completable.error(VtlValidationFailureException(getErrorMessage()))
2525
}

example/src/main/res/layout/activity_main.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@
184184
<TextView
185185
style="@style/Description"
186186
android:layout_marginTop="@dimen/space_8dp"
187-
android:text="@string/validator_colors" />
187+
android:text="@string/validator_colors_description" />
188188

189189
<android.support.v7.widget.CardView
190190
android:layout_width="match_parent"
@@ -206,11 +206,11 @@
206206
<co.kyash.vtl.ValidatableTextInputLayout
207207
android:id="@+id/colors"
208208
style="@style/InputRow"
209-
app:trigger="focus_changed">
209+
app:trigger="text_changed">
210210

211211
<EditText
212212
style="@style/BaseEditText"
213-
android:hint="@string/first_name"
213+
android:hint="@string/material_design_colors"
214214
android:inputType="text" />
215215

216216
</co.kyash.vtl.ValidatableTextInputLayout>

example/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
<string name="ascii">Ascii Only</string>
1414
<string name="submit">Submit</string>
1515

16+
<string name="material_design_colors">Material design colors</string>
17+
1618
<string name="validation_error_required">Required</string>
1719
<string name="validation_error_email">Invalid email</string>
1820
<string name="validation_error_number_only">Input only number</string>

example/src/test/assets/Kyash/validatable-textinput-layout/master/json/colors.json

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)