Skip to content

Commit 5b962d7

Browse files
authored
Merge pull request #21 from Kyash/custom/validator
Added custom validator
2 parents 092f60b + 7b4517d commit 5b962d7

File tree

17 files changed

+295
-35
lines changed

17 files changed

+295
-35
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ buildscript {
77
mavenCentral()
88
maven { url "https://plugins.gradle.org/m2/" }
99
maven { url 'https://maven.fabric.io/public' }
10+
maven { url "https://jitpack.io" }
1011
}
1112
dependencies {
1213
classpath "com.android.tools.build:gradle:$versions.gradleBuildTool"
@@ -21,6 +22,7 @@ allprojects {
2122
repositories {
2223
google()
2324
jcenter()
25+
maven { url "https://jitpack.io" }
2426
}
2527
}
2628

example/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,17 @@ dependencies {
6565
implementation depends.support.design
6666
implementation depends.support.cardview
6767

68+
//==================== Network ====================
69+
implementation depends.okhttp3.jsonMock
70+
71+
implementation depends.retrofit.core
72+
implementation depends.retrofit.converterMoshi
73+
implementation depends.retrofit.adapterRxJava2
74+
6875
//==================== Structure ====================
76+
implementation depends.kotshi.api
77+
kapt depends.kotshi.compiler
78+
6979
implementation depends.rxjava2.core
7080
implementation depends.rxjava2.android
7181
implementation depends.rxjava2.kotlin

example/src/main/AndroidManifest.xml

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

77

88
<application
9-
android:allowBackup="false"
9+
android:allowBackup="true"
1010
android:hardwareAccelerated="true"
1111
android:icon="@mipmap/ic_launcher"
1212
android:label="@string/app_name"

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,23 @@ import android.util.Log
77
import android.view.View
88
import android.widget.Toast
99
import co.kyash.vtl.ValidatableView
10+
import co.kyash.vtl.example.api.MaterialDesignColorsApi
1011
import co.kyash.vtl.example.databinding.ActivityMainBinding
1112
import co.kyash.vtl.validators.AsciiOnlyValidator
1213
import co.kyash.vtl.validators.EmailValidator
1314
import co.kyash.vtl.validators.NumberOnlyValidator
1415
import co.kyash.vtl.validators.RequiredValidator
1516
import com.crashlytics.android.Crashlytics
17+
import com.squareup.moshi.Moshi
1618
import io.fabric.sdk.android.Fabric
1719
import io.reactivex.Completable
1820
import io.reactivex.android.schedulers.AndroidSchedulers
1921
import io.reactivex.disposables.CompositeDisposable
2022
import io.reactivex.schedulers.Schedulers
23+
import okhttp3.OkHttpClient
24+
import retrofit2.Retrofit
25+
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
26+
import retrofit2.converter.moshi.MoshiConverterFactory
2127

2228

2329
class MainActivity : AppCompatActivity() {
@@ -32,6 +38,14 @@ class MainActivity : AppCompatActivity() {
3238

3339
private val compositeDisposable = CompositeDisposable()
3440

41+
private val api = Retrofit.Builder()
42+
.baseUrl("https://raw.githubusercontent.com")
43+
.addConverterFactory(MoshiConverterFactory.create(Moshi.Builder().build()))
44+
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
45+
.client(OkHttpClient.Builder().build())
46+
.build()
47+
.create(MaterialDesignColorsApi::class.java)
48+
3549
override fun onCreate(savedInstanceState: Bundle?) {
3650
super.onCreate(savedInstanceState)
3751
Fabric.with(this, Crashlytics())
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package co.kyash.vtl.example.api
2+
3+
import io.reactivex.Single
4+
import retrofit2.http.GET
5+
6+
interface MaterialDesignColorsApi {
7+
8+
@GET("/Kyash/validatable-textinput-layout/master/json/colors.json")
9+
fun all(): Single<List<String>>
10+
11+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package co.kyash.vtl.example.validators
2+
3+
import android.content.Context
4+
import co.kyash.vtl.VtlValidationFailureException
5+
import co.kyash.vtl.example.R
6+
import co.kyash.vtl.example.api.MaterialDesignColorsApi
7+
import co.kyash.vtl.validators.VtlValidator
8+
import io.reactivex.Completable
9+
import io.reactivex.Single
10+
11+
class MaterialDesignColorsValidator(
12+
private val api: MaterialDesignColorsApi,
13+
private val context: Context
14+
) : VtlValidator {
15+
16+
override fun validateAsCompletable(context: Context, text: String?): Completable {
17+
return api.all()
18+
.onErrorResumeNext { Single.error(VtlValidationFailureException(context.getString(R.string.validation_error_server))) }
19+
.flatMapCompletable { list ->
20+
if (text?.trim() != null) {
21+
list.filter { it == text }
22+
.first { return@flatMapCompletable Completable.complete() }
23+
}
24+
return@flatMapCompletable Completable.error(VtlValidationFailureException(getErrorMessage()))
25+
}
26+
}
27+
28+
override fun validate(text: String?): Boolean {
29+
throw UnsupportedOperationException("sync method is not arrowed because this validation uses async API response.")
30+
}
31+
32+
override fun getErrorMessage(): String {
33+
return context.getString(R.string.validation_error_colors)
34+
}
35+
36+
}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,50 @@
175175

176176
</android.support.v7.widget.CardView>
177177

178+
179+
<TextView
180+
style="@style/Title"
181+
android:layout_marginTop="@dimen/space_32dp"
182+
android:text="@string/validator_colors" />
183+
184+
<TextView
185+
style="@style/Description"
186+
android:layout_marginTop="@dimen/space_8dp"
187+
android:text="@string/validator_colors" />
188+
189+
<android.support.v7.widget.CardView
190+
android:layout_width="match_parent"
191+
android:layout_height="wrap_content"
192+
android:layout_marginTop="@dimen/space_16dp">
193+
194+
<LinearLayout
195+
android:layout_width="match_parent"
196+
android:layout_height="match_parent"
197+
android:orientation="vertical"
198+
android:paddingBottom="@dimen/space_16dp"
199+
android:paddingEnd="@dimen/space_16dp"
200+
android:paddingLeft="@dimen/space_16dp"
201+
android:paddingRight="@dimen/space_16dp"
202+
android:paddingStart="@dimen/space_16dp"
203+
android:paddingTop="@dimen/space_8dp">
204+
205+
<!-- Email -->
206+
<co.kyash.vtl.ValidatableTextInputLayout
207+
android:id="@+id/colors"
208+
style="@style/InputRow"
209+
app:trigger="focus_changed">
210+
211+
<EditText
212+
style="@style/BaseEditText"
213+
android:hint="@string/first_name"
214+
android:inputType="text" />
215+
216+
</co.kyash.vtl.ValidatableTextInputLayout>
217+
218+
</LinearLayout>
219+
220+
</android.support.v7.widget.CardView>
221+
178222
</LinearLayout>
179223

180224
</ScrollView>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
<string name="trigger_text_change">Text change trigger</string>
55
<string name="trigger_focus_change">Focus change trigger</string>
6+
<string name="validator_colors">Material design colors validator</string>
7+
<string name="validator_colors_description">Ex) blue, red, yellow</string>
68

79
<string name="first_name">First name (Required)</string>
810
<string name="last_name">Last name (Required)</string>
@@ -16,6 +18,9 @@
1618
<string name="validation_error_number_only">Input only number</string>
1719
<string name="validation_error_ascii_only">Input only ascii characters</string>
1820

21+
<string name="validation_error_server">Failed to validate by network error</string>
22+
<string name="validation_error_colors">Color name is not match</string>
23+
1924
<string name="validation_error_occurred">Error occurred</string>
2025
<string name="validation_success">Success</string>
2126
</resources>

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<style name="BaseEditText">
55
<item name="android:layout_width">match_parent</item>
66
<item name="android:layout_height">wrap_content</item>
7+
<item name="android:lines">1</item>
78
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Subhead</item>
89
</style>
910

@@ -13,6 +14,13 @@
1314
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
1415
</style>
1516

17+
<style name="Description">
18+
<item name="android:layout_width">match_parent</item>
19+
<item name="android:layout_height">wrap_content</item>
20+
<item name="android:textColor">@color/grey500</item>
21+
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Caption</item>
22+
</style>
23+
1624
<style name="InputRow">
1725
<item name="android:layout_width">match_parent</item>
1826
<item name="android:layout_height">wrap_content</item>

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

File renamed without changes.

0 commit comments

Comments
 (0)