Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ dependencies {
}
```

`LATEST_VERSION` is [![JitPack](https://jitpack.io/v/Kyash/validatable-textinput-layout.svg)](https://jitpack.io/#Kyash/validatable-textinput-layout)
`LATEST_VERSION` is [![JitPack](https://jitpack.io/v/Kyash/validatable-textinput-layout.svg)](https://jitpack.io/#Kyash/validatable-textinput-layout) which supports AndroidX.
If you still use Support Library, please use version `0.3.0`.

## Basic usage
You can use as same as `TextInputLayout` in layout xml.
Expand Down
14 changes: 7 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
buildscript {
apply from: "${rootDir.absolutePath}/versions.gradle"
import dependencies.Depends

buildscript {
repositories {
google()
jcenter()
Expand All @@ -10,11 +10,11 @@ buildscript {
maven { url "https://jitpack.io" }
}
dependencies {
classpath "com.android.tools.build:gradle:$versions.gradleBuildTool"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin"
classpath "gradle.plugin.org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle"
classpath "io.fabric.tools:gradle:$versions.fabricGradleTool"
classpath "com.github.dcendents:android-maven-gradle-plugin:$versions.mavenGradle"
classpath Depends.GradlePlugin.android
classpath Depends.GradlePlugin.kotlin
classpath Depends.GradlePlugin.ktlint
classpath Depends.GradlePlugin.fabric
classpath Depends.GradlePlugin.androidMaven
}
}

Expand Down
1 change: 1 addition & 0 deletions buildSrc/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
6 changes: 6 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
65 changes: 65 additions & 0 deletions buildSrc/src/main/java/dependencies/Depends.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package dependencies

@Suppress("unused")
object Depends {
object GradlePlugin {
const val android = "com.android.tools.build:gradle:3.2.1"
const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Kotlin.version}"
const val ktlint = "gradle.plugin.org.jlleitschuh.gradle:ktlint-gradle:3.0.0"
const val fabric = "io.fabric.tools:gradle:1.25.4"
const val androidMaven = "com.github.dcendents:android-maven-gradle-plugin:2.0"
}

object Test {
const val junit = "junit:junit:4.12"
const val testRunner = "androidx.test:runner:1.1.0"
const val mockitoKotlin = "com.nhaarman.mockitokotlin2:mockito-kotlin:2.0.0"
const val robolectric = "org.robolectric:robolectric:3.5.1"

object Espresso {
const val core = "androidx.test.espresso:espresso-core:3.1.0-alpha4"
const val intents = "androidx.test.espresso:espresso-intents:3.1.0-alpha4"
}
}

object AndroidX {
const val appCompat = "androidx.appcompat:appcompat:1.0.0"
const val recyclerView = "androidx.recyclerview:recyclerview:1.0.0"
const val cardView = "androidx.cardview:cardview:1.0.0"
const val design = "com.google.android.material:material:1.1.0-alpha01"
}

object Kotlin {
const val version = "1.3.11"
const val stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$version"
}

object Stetho {
const val version = "1.5.0"
const val core = "com.facebook.stetho:stetho:$version"
const val okhttp = "com.facebook.stetho:stetho-okhttp3:$version"
}

object Crashlytics {
const val core = "com.crashlytics.sdk.android:crashlytics:2.8.0@aar"
}

object Retrofit {
private const val version = "2.5.0"
const val core = "com.squareup.retrofit2:retrofit:$version"
const val converterMoshi = "com.squareup.retrofit2:converter-moshi:$version"
const val adapterRxJava2 = "com.squareup.retrofit2:adapter-rxjava2:$version"
}

object Kotshi {
private const val version = "1.0.6"
const val api = "se.ansman.kotshi:api:$version"
const val compiler = "se.ansman.kotshi:compiler:$version"
}

object Rx {
const val RxJava = "io.reactivex.rxjava2:rxjava:2.2.4"
const val RxAndroid = "io.reactivex.rxjava2:rxandroid:2.1.0"
const val RxKotlin = "io.reactivex.rxjava2:rxkotlin:2.3.0"
}
}
7 changes: 7 additions & 0 deletions buildSrc/src/main/java/dependencies/Versions.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dependencies

private object Versions {
val androidCompileSdkVersion = 28
val androidTargetSdkVersion = 28
val androidMinSdkVersion = 19
}
57 changes: 30 additions & 27 deletions example/build.gradle
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import dependencies.Depends
import dependencies.Versions

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: "org.jlleitschuh.gradle.ktlint"
apply plugin: 'io.fabric'
apply from: "${rootDir.absolutePath}/versions.gradle"

def versionMajor = 0
def versionMinor = 1
def versionMajor = 1
def versionMinor = 0
def versionPatch = 0

android {
compileSdkVersion versions.compileSdk
compileSdkVersion Versions.androidCompileSdkVersion
dataBinding.enabled = true

defaultConfig {
applicationId "co.kyash.vtl.sample"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk
minSdkVersion Versions.androidMinSdkVersion
targetSdkVersion Versions.androidTargetSdkVersion
versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch
versionName "$versionMajor.$versionMinor.$versionPatch"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Expand Down Expand Up @@ -58,43 +62,42 @@ dependencies {
implementation project(':library')

//==================== Kotlin ====================
implementation depends.kotlin.stdlib
implementation Depends.Kotlin.stdlib

//==================== Support Library ====================
implementation depends.support.appcompat
implementation depends.support.design
implementation depends.support.cardview
implementation Depends.AndroidX.appCompat
implementation Depends.AndroidX.design
implementation Depends.AndroidX.cardView

//==================== Network ====================
implementation depends.retrofit.core
implementation depends.retrofit.converterMoshi
implementation depends.retrofit.adapterRxJava2
implementation Depends.Retrofit.core
implementation Depends.Retrofit.converterMoshi
implementation Depends.Retrofit.adapterRxJava2

//==================== Structure ====================
implementation depends.kotshi.api
kapt depends.kotshi.compiler
implementation Depends.Kotshi.api
kapt Depends.Kotshi.compiler

implementation depends.rxjava2.core
implementation depends.rxjava2.android
implementation depends.rxjava2.kotlin
implementation Depends.Rx.RxJava
implementation Depends.Rx.RxAndroid
implementation Depends.Rx.RxKotlin

//==================== Debug ====================
implementation(depends.crashlytics) {
implementation(Depends.Crashlytics.core) {
transitive = true
}

//==================== Debug ====================
debugImplementation depends.stetho.core
debugImplementation depends.stetho.okhttp3
implementation Depends.Stetho.core
implementation Depends.Stetho.okhttp

//==================== Test ====================
testImplementation depends.junit
testImplementation depends.mockitoKotlin
testImplementation depends.robolectric.core
androidTestImplementation depends.supporttest.runner
androidTestImplementation depends.supporttest.espresso
androidTestImplementation depends.espresso.core
androidTestImplementation depends.espresso.intents
testImplementation Depends.Test.junit
testImplementation Depends.Test.mockitoKotlin
testImplementation Depends.Test.robolectric
androidTestImplementation Depends.Test.testRunner
androidTestImplementation Depends.Test.Espresso.core
androidTestImplementation Depends.Test.Espresso.intents
}

ktlint {
Expand Down
62 changes: 31 additions & 31 deletions example/src/main/java/co/kyash/vtl/example/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package co.kyash.vtl.example

import android.databinding.DataBindingUtil
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import co.kyash.vtl.ValidatableView
import co.kyash.vtl.example.api.MaterialDesignColorsApi
import co.kyash.vtl.example.databinding.ActivityMainBinding
Expand Down Expand Up @@ -42,12 +42,12 @@ class MainActivity : AppCompatActivity() {
private val compositeDisposable = CompositeDisposable()

private val api = Retrofit.Builder()
.baseUrl("https://raw.githubusercontent.com")
.addConverterFactory(MoshiConverterFactory.create(Moshi.Builder().build()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.client(OkHttpClient.Builder().addNetworkInterceptor(StethoInterceptor()).build())
.build()
.create(MaterialDesignColorsApi::class.java)
.baseUrl("https://raw.githubusercontent.com")
.addConverterFactory(MoshiConverterFactory.create(Moshi.Builder().build()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.client(OkHttpClient.Builder().addNetworkInterceptor(StethoInterceptor()).build())
.build()
.create(MaterialDesignColorsApi::class.java)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -65,33 +65,33 @@ class MainActivity : AppCompatActivity() {
private fun initValidators() {
// Example 1
validatableViewsForTriggerTextChanged.addAll(arrayOf(
binding.firstName.register(RequiredValidator(getString(R.string.validation_error_required))),
binding.lastName.register(RequiredValidator(getString(R.string.validation_error_required))),
binding.email.register(EmailValidator(getString(R.string.validation_error_email))),
binding.numberOnly.register(NumberOnlyValidator(getString(R.string.validation_error_number_only))),
binding.asciiOnly.register(AsciiOnlyValidator(getString(R.string.validation_error_ascii_only)))
binding.firstName.register(RequiredValidator(getString(R.string.validation_error_required))),
binding.lastName.register(RequiredValidator(getString(R.string.validation_error_required))),
binding.email.register(EmailValidator(getString(R.string.validation_error_email))),
binding.numberOnly.register(NumberOnlyValidator(getString(R.string.validation_error_number_only))),
binding.asciiOnly.register(AsciiOnlyValidator(getString(R.string.validation_error_ascii_only)))
))

// Example 2
validatableViewsForTriggerFocusChanged.addAll(arrayOf(
binding.email2.register(EmailValidator(getString(R.string.validation_error_email)))
binding.email2.register(EmailValidator(getString(R.string.validation_error_email)))
))

// Example 3
binding.colors.register(MaterialDesignColorsValidator(api, this))

// Example 4
validatableViewsForButtonEnable.addAll(arrayOf(
binding.firstName2.register(RequiredValidator(getString(R.string.validation_error_required))),
binding.lastName2.register(RequiredValidator(getString(R.string.validation_error_required)))
binding.firstName2.register(RequiredValidator(getString(R.string.validation_error_required))),
binding.lastName2.register(RequiredValidator(getString(R.string.validation_error_required)))
))
val validations: List<Flowable<Any>> = validatableViewsForButtonEnable.flatMap { it.validationFlowables }
Flowable.zip(validations) { Any() }
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.doOnError({ binding.submit3.isEnabled = false })
.retry() // non-terminated stream
.subscribe({ binding.submit3.isEnabled = true }, { })
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.doOnError({ binding.submit3.isEnabled = false })
.retry() // non-terminated stream
.subscribe({ binding.submit3.isEnabled = true }, { })
}


Expand All @@ -113,16 +113,16 @@ class MainActivity : AppCompatActivity() {
compositeDisposable.clear()

compositeDisposable.add(
Completable.mergeDelayError(validations)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.d("MainActivity", "Validation cleared.")
Toast.makeText(this, R.string.validation_success, Toast.LENGTH_SHORT).show()
}, { throwable ->
Log.e("MainActivity", "Validation error occurred.", throwable)
Toast.makeText(this, R.string.validation_error_occurred, Toast.LENGTH_SHORT).show()
})
Completable.mergeDelayError(validations)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.d("MainActivity", "Validation cleared.")
Toast.makeText(this, R.string.validation_success, Toast.LENGTH_SHORT).show()
}, { throwable ->
Log.e("MainActivity", "Validation error occurred.", throwable)
Toast.makeText(this, R.string.validation_error_occurred, Toast.LENGTH_SHORT).show()
})
)
}

Expand Down
Loading